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

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Hadoop - 实时查询Drill
1.概述 在现实业务当中,存在这样的业务场景,需要实时去查询HDFS上的相关存储数据,普通的查询(如:Hive查询),时延较高。那么,是否存在时 延较小的查询组件。在业界目前较为成熟的有Cloudera的Impala,Apache的Drill,Hortonworks的Stinger。本篇博 客主要为大家介绍Drill,其他两种方式大家可以自行下去补充。 2.DrillArchitecture 2.1 Cilent 使用Drill,可以通过以下方式进入到Drill当中,内容如下所示: Drill shell:使用客户端命令去操作 Drill Web Console:Web UI界面去操作相关内容 ODBC/JDBC:使用驱动接口操作 C++ API:C++的API接口 2.2Drill Query Execution 执行流程如下图所示: 2.3Core Modules 核心模块图,如下所示: 至于详细的文字描述,这里就不多做赘述了。大家看图若是有疑惑的地方,可以去官方网站,查看详细的文档描述。[官方文档] 3.Drill使用 介绍完Drill的架构流程,下面我们可以去使用Drill去做...
- 下一篇
HBase - Phoenix剖析
1.概述 在《Hadoop-Drill深度剖析》 一文当中,给大家介绍了Drill的相关内容,就实时查询来说,Drill基本能够满足要求,同时还可以做一个简单业务上的聚合,如果在使用Hive做一 些简单的业务统计(不涉及多维度,比如CUBE,ROLLUP之类的函数),只是用一些基本的聚合函数或是JOIN ON之类的,Drill基本满足要求,而且响应速度可比OLTP。今天给大家剖析的是另外一种工具,由于目前Drill官方不支持对表的插入,更新操作。 所以,在操作HBase的时候,若遇到这些需求,Drill就有点力不从心。那么,Phoenix可以满足以上需求。它更接近与标准的SQL。 2.Architecture 在Phoenix中SQL Query Plan的执行,基本上是通过构建一系列的HBase Scan来完成。为了尽可能减少数据的传输,在Region Server使用Coprocessor来尽可能的执行Aggregate相关的工作,基本实现的思路是使用RegionObserver在 PostScannerOpen Hook中将RegionScanner替换成支持Aggregatio...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- 2048小游戏-低调大师作品
- CentOS8编译安装MySQL8.0.19