Hadoop-Drill深度剖析

简介:

1.概述

  在《Hadoop - 实时查询Drill》一文当中,笔者给大家介绍如何去处理实时查询这样的业务场景,也是简略的提了一下如何去实时查询HDFS,然起相关细节并未说明。今天给大家细说一下相关细节,其中包含:HDFS,Hive以及HBase等内容。

2.数据源和文件格式

  在使用Drill去做实时查询,由于其只是一个中间件,其适配的存储介质是有限制的,目前官方支持以下存储介质:

  • FS
  • HDFS
  • HBase
  • Hive
  • RDBMS
  • MongoDB
  • MapR-DB
  • S3

  这里笔者主要给大家介绍HDFS,Hive,HBase这三种介质。另外,Drill支持以下输入格式的数据源:

  • Avro
  • CSV
  • TSV
  • PSV
  • Parquet
  • MapR-DB*
  • Hadoop Sequence Files

2.1 文本类型文件(CSV,TSV,PSV)

  下面笔者给大家介绍文本类型的相关细节,文本类型的使用,有其固定的使用方法,通用配置如下:

复制代码
"formats": {
    "csv": {
      "type": "text",
      "extensions": [
        "txt"
      ],
      "delimiter": "\t"
    },
    "tsv": {
      "type": "text",
      "extensions": [
        "tsv"
      ],
      "delimiter": "\t"
    },
    "parquet": {
      "type": "parquet"
    }
  }
复制代码

  这里以CSV为例子来说明:

  • "csv":表示固定的文本格式
  • "type":制定文件的类型,这里指定为文本类型
  • "extensions":扩展名为csv
  • "delimiter":文本内容,每行的分隔符为一个tab占位符

  上面的配置,这里我们也可以进行拓展,比如我们的HDFS上的文件格式如下图所示:

  我们要达到以下查询结果,内容如下所示:

复制代码
0: jdbc:drill:zk=local> SELECT * FROM hdfs.`/tmp/csv_with_header.csv2`;
+------------------------+
|        columns         |
+------------------------+
| ["hello","1","2","3"]  |
| ["hello","1","2","3"]  |
| ["hello","1","2","3"]  |
| ["hello","1","2","3"]  |
| ["hello","1","2","3"]  |
| ["hello","1","2","3"]  |
| ["hello","1","2","3"]  |
+------------------------+
复制代码

  那么,我们可以对其做以下配置,内容如下所示:

复制代码
"csv": {
  "type": "text",
  "extensions": [
    "csv2"
  ],
  "skipFirstLine": true,
  "delimiter": ","
},
复制代码

  这里skipFirstLine这个属性表示忽略一行结果。

  另外,同样用到上面的数据源,我们要实现以下查询结果,内容如下所示:

复制代码
0: jdbc:drill:zk=local> SELECT * FROM hdfs.`/tmp/csv_with_header.csv2`;
+-------+------+------+------+
| name  | num1 | num2 | num3 |
+-------+------+------+------+
| hello |   1  |   2  |   3  |
| hello |   1  |   2  |   3  |
| hello |   1  |   2  |   3  |
| hello |   1  |   2  |   3  |
| hello |   1  |   2  |   3  |
| hello |   1  |   2  |   3  |
| hello |   1  |   2  |   3  |
+-------+------+------+------+
复制代码

  这该如何去修改CSV的属性,我们添加以下内容即可:

复制代码
"csv": {
  "type": "text",
  "extensions": [
    "csv2"
  ],
  "skipFirstLine": false,
  "extractHeader": true,
  "delimiter": ","
},
复制代码

  从单词的意义上可以很直接的读懂属性所要表达的意思,这里就不多做赘述了。由于篇幅问题,这里就不一一列举了。

  其他格式文件与此类似,填写指定文件格式,文件类型,扩展名,文本分隔符即可,其他扩展属性可按需添加。

3.Plugins

3.1 HDFS

  集成HDFS的Plugins,添加内容如下所示:

复制代码
{
  "type": "file",
  "enabled": true,
  "connection": "hdfs://hdfs.company.com:9000/",
  "workspaces": {
    "root": {
      "location": "/opt/drill",
      "writable": true,
      "defaultInputFormat": null
    }
  },
  "formats": {
    "csv": {
      "type": "text",
      "extensions": [
        "txt"
      ],
      "delimiter": "\t"
    },
    "tsv": {
      "type": "text",
      "extensions": [
        "tsv"
      ],
      "delimiter": "\t"
    },
    "parquet": {
      "type": "parquet"
    }
  }
}
复制代码

  PS:连接HDFS地址注意要正确。

3.2 Hive

  集成Hive的Plugins,添加内容如下所示:

复制代码
{
  "type": "hive",
  "enabled": true,
  "configProps": {
    "hive.metastore.uris": "thrift://hdfs.company.com:9083",
    "fs.default.name": "hdfs://hdfs.company.com/",
    "hive.metastore.sasl.enabled": "false"
  }
}
复制代码

  PS:这里需要指定Hive的metastore的thrift地址,同时也需要指定hdfs的地址。另外,我们需要启动metastore的thrift服务,命令如下所示:

hive --service metastore

   这里需要注意的是,Drill当前不支持写操作到Hive表,在将Hive表结构中的数据类型做查询映射时,支持以下类型:

支持的SQL类型 Hive类型
BIGINT BIGINT
BOOLEAN BOOLEAN
VARCHAR CHAR
DATE DATE
DECIMAL* DECIMAL
FLOAT FLOAT
DOUBLE DOUBLE
INTEGER INT,TINYINT,SMALLINT
INTERVAL N/A
TIME N/A
N/A TIMESPAMP  (unix的系统时间)
TIMESPAMP TIMESPAMP  (JDBC时间格式:yyyy-mm-dd hh:mm:ss)
None STRING
VARCHAR VARCHAR
VARBINARY BINARY

  另外,在Drill中,不支持以下Hive类型:

  • LIST
  • MAP
  • STRUCT
  • TIMESTAMP(Unix Epoch format)
  • UNION

3.3 HBase

  集成HBase的Plugins,添加内容如下所示:

复制代码
{
  "type": "hbase",
  "config": {
    "hbase.zookeeper.quorum": "hbase-zk01,hbase-zk02,hbase-zk03",
    "hbase.zookeeper.property.clientPort": "2181"
  },
  "size.calculator.enabled": false,
  "enabled": true
}
复制代码

  PS:在使用ZooKeeper集群连接信息时,需要注意的是,Drill在解析HBase的Plugins时,会解析其HBase集群上的ZK集群信息,如:在HBase集群中的ZK信息配置使用的时域名,这里在配置其HBase的Plugins的ZK连接信息也需使用对应的域名,若是直接填写IP,解析会失败。保证解析的一致性。

4.总结

  另外,在使用JDBC或ODBC去操作Drill的时候,连接信息的使用是需要注意的,直接按照官方给出的连接方式硬套是有问题的,这里我们修改以下连接信息。连接分2种情况,一种指定其Drill的IP和PORT,第二种,使用ZK的连接方式,如jdbc:drill:zk=dn1,dn2,dn3:2181即可。

5.结束语

  这篇博客就和大家分享到这里,如果大家在研究学习的过程当中有什么问题,可以加群进行讨论或发送邮件给我,我会尽我所能为您解答,与君共勉!

联系方式: 
邮箱:smartloli.org@gmail.com 
Twitter: https://twitter.com/smartloli 
QQ群(Hadoop - 交流社区1): 424769183 
温馨提示:请大家加群的时候写上加群理由(姓名+公司/学校),方便管理员审核,谢谢! 

热爱生活,享受编程,与君共勉!



本文转自哥不是小萝莉博客园博客,原文链接:http://www.cnblogs.com/smartloli/,如需转载请自行联系原作者

相关文章
|
1月前
|
分布式计算 资源调度 监控
Hadoop生态系统深度剖析:面试经验与必备知识点解析
本文深入探讨了Hadoop生态系统的面试重点,涵盖Hadoop架构、HDFS、YARN和MapReduce。了解Hadoop的主从架构、HDFS的读写流程及高级特性,YARN的资源管理与调度,以及MapReduce编程模型。通过代码示例,如HDFS文件操作和WordCount程序,帮助读者巩固理解。此外,文章强调在面试中应结合个人经验、行业动态和技术进展展示技术实力。
|
存储 分布式计算 Hadoop
|
SQL 数据库连接 分布式数据库
|
1月前
|
存储 分布式计算 Hadoop
大数据处理架构Hadoop
【4月更文挑战第10天】Hadoop是开源的分布式计算框架,核心包括MapReduce和HDFS,用于海量数据的存储和计算。具备高可靠性、高扩展性、高效率和低成本优势,但存在低延迟访问、小文件存储和多用户写入等问题。运行模式有单机、伪分布式和分布式。NameNode管理文件系统,DataNode存储数据并处理请求。Hadoop为大数据处理提供高效可靠的解决方案。
57 2
|
1月前
|
分布式计算 Hadoop 大数据
大数据技术与Python:结合Spark和Hadoop进行分布式计算
【4月更文挑战第12天】本文介绍了大数据技术及其4V特性,阐述了Hadoop和Spark在大数据处理中的作用。Hadoop提供分布式文件系统和MapReduce,Spark则为内存计算提供快速处理能力。通过Python结合Spark和Hadoop,可在分布式环境中进行数据处理和分析。文章详细讲解了如何配置Python环境、安装Spark和Hadoop,以及使用Python编写和提交代码到集群进行计算。掌握这些技能有助于应对大数据挑战。
|
3天前
|
分布式计算 资源调度 Hadoop
java与大数据:Hadoop与MapReduce
java与大数据:Hadoop与MapReduce
23 0
|
13天前
|
存储 分布式计算 Hadoop
【专栏】Hadoop,开源大数据处理框架:驭服数据洪流的利器
【4月更文挑战第28天】Hadoop,开源大数据处理框架,由Hadoop Common、HDFS、YARN和MapReduce组成,提供大规模数据存储和并行处理。其优势在于可扩展性、容错性、高性能、灵活性及社区支持。然而,数据安全、处理速度、系统复杂性和技能短缺是挑战。通过加强安全措施、结合Spark、自动化工具和培训,Hadoop在应对大数据问题中保持关键地位。
|
18天前
|
分布式计算 Hadoop 大数据
[大数据] mac 史上最简单 hadoop 安装过程
[大数据] mac 史上最简单 hadoop 安装过程
|
1月前
|
SQL 分布式计算 Hadoop
利用Hive与Hadoop构建大数据仓库:从零到一
【4月更文挑战第7天】本文介绍了如何使用Apache Hive与Hadoop构建大数据仓库。Hadoop的HDFS和YARN提供分布式存储和资源管理,而Hive作为基于Hadoop的数据仓库系统,通过HiveQL简化大数据查询。构建过程包括设置Hadoop集群、安装配置Hive、数据导入与管理、查询分析以及ETL与调度。大数据仓库的应用场景包括海量数据存储、离线分析、数据服务化和数据湖构建,为企业决策和创新提供支持。
82 1
|
1月前
|
分布式计算 资源调度 Hadoop
Apache Hadoop入门指南:搭建分布式大数据处理平台
【4月更文挑战第6天】本文介绍了Apache Hadoop在大数据处理中的关键作用,并引导初学者了解Hadoop的基本概念、核心组件(HDFS、YARN、MapReduce)及如何搭建分布式环境。通过配置Hadoop、格式化HDFS、启动服务和验证环境,学习者可掌握基本操作。此外,文章还提及了开发MapReduce程序、学习Hadoop生态系统和性能调优的重要性,旨在为读者提供Hadoop入门指导,助其踏入大数据处理的旅程。
186 0