Hadoop-Drill深度剖析
在《Hadoop - 实时查询Drill》一文当中,笔者给大家介绍如何去处理实时查询这样的业务场景,也是简略的提了一下如何去实时查询HDFS,然起相关细节并未说明。今天给大家细说一下相关细节,其中包含:HDFS,Hive以及HBase等内容。
2.数据源和文件格式在使用Drill去做实时查询,由于其只是一个中间件,其适配的存储介质是有限制的,目前官方支持以下存储介质:
HBase RDBMS MongoDB MapR-DB这里笔者主要给大家介绍HDFS,Hive,HBase这三种介质。另外,Drill支持以下输入格式的数据源:
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"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表结构中的数据类型做查询映射时,支持以下类型:
"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,解析会失败。保证解析的一致性。
另外,在使用JDBC或ODBC去操作Drill的时候,连接信息的使用是需要注意的,直接按照官方给出的连接方式硬套是有问题的,这里我们修 改以下连接信息。连接分2种情况,一种指定其Drill的IP和PORT,第二种,使用ZK的连接方式,如 jdbc:drill:zk=dn1,dn2,dn3:2181即可。
5.结束语这篇博客就和大家分享到这里,如果大家在研究学习的过程当中有什么问题,可以加群进行讨论或发送邮件给我,我会尽我所能为您解答,与君共勉!
【Hadoop学习笔记】——Hadoop基础 当前时代是数据爆炸的时代,全球各个网站、电子设备等都在源源不断地产生着大量数据.2006年数字世界项目统计得出全球数据总量为0.18ZB,2011年全球数据量1.8ZB,2013全球数据量4.4ZB,2014年全球数据总量在6.2ZB左右,2015年全球数据总量在8.6ZB左右,2016年12ZB左右,2020年的时候,全球的数据总量将达到40ZB。(小编的印象里,高中时用的手机内存卡是512M,当时就感觉已经很牛逼了,现在16G、32G都感觉不够用~)
Hadoop02【架构分析】 Hadoop1.0即第一代Hadoop,指的是版本为Apache Hadoop 0.20.x、1.x或者CDH3系列的Hadoop,内核主要由HDFS和MapReduce两个系统组成,其中MapReduce是一个离线处理框架,由编程模型(新旧API)、运行时环境(JobTracker和TaskTracker)和数据处理引擎(MapTask和ReduceTask)三部分组成。
相关文章
- Hadoop 生态系统的构成(Hadoop 生态系统组件释义)
- Hadoop实战_hadoop 项目实战
- Hadoop3.0-Hdfs | Apache Hadoop介绍
- Hadoop生态上几个技术的关系与区别:hive、pig、hbase 关系与区别
- 大数据先驱Cloudera拥抱云计算,探索后Hadoop时代的下一代数据平台 | Q推荐
- Hadoop(三)手把手教你搭建Hadoop全分布式集群详解大数据
- Hadoop(九)Hadoop IO之Compression和Codecs详解大数据
- Hadoop入门进阶课程8–Hive介绍和安装部署详解大数据
- Hadoop伪分布安装详解(四)大数据
- Spark1.4.0和hadoop联合部署的坑详解大数据
- Hadoop集群群启脚本详解大数据
- Hadoop学习之SecondaryNameNode详解大数据
- Hadoop-Drill深度剖析详解大数据
- Redis与Hadoop:让数据变得更加简单(redis与hadoop)
- Linux系统下安装配置Hadoop(linux下安装hadoop)
- Google打造云中Hadoop便捷版 强势对抗AWS
- 十八款Hadoop工具帮你驯服大数据【转】
- MySQL与Hadoop:改善数据处理效率(mysql与hadoop)
- Hadoop与MySQL技术协同打造大数据完美解决方案(hadoopmysql)