在现实业务当中,存在这样的业务场景,须要实时去查询HDFS上的相关存储数据,普通的查询(如:Hive查询),时延较高。那么,是否存在时延较小的查询组件。在业界目前较为成熟的有Cloudera的Impala,Apache的Drill,Hortonworks的Stinger。本篇博客主要为你们介绍Drill,其余两种方式你们能够自行下去补充。html
使用Drill,能够经过如下方式进入到Drill当中,内容以下所示:java
执行流程以下图所示:sql
核心模块图,以下所示:shell
至于详细的文字描述,这里就很少作赘述了。你们看图如果有疑惑的地方,能够去官方网站,查看详细的文档描述。[官方文档]apache
介绍完Drill的架构流程,下面咱们能够去使用Drill去作相关查询操做。安装Drill的过程比较简单,这里就很少作详细的赘述了。首先,去Apache的官网下载Drill的安装包,这里笔者所使用的本版是drill-1.2.0。可独立部署在物理机上,没必要与Hadoop集群部署在一块儿。这里须要注意的是,物理机的内存至少留有4G空闲给Drill去使用。否则,在执行查询操做的时候会内容溢出,查询Drill的官方文档,官方给出的解释是,操做的内容都在内容中完成,不会写磁盘,除非你强制指明去写磁盘,可是,通常考虑到响应速度因素,都会在内容中完成。笔者曾试图下降其内存配置小于4G,然并卵。因此,在使用Drill作查询时,须要保证物理机空闲内存大于等于4G。架构
目前,Drill迭代版本比较快速。你们在下载Drill版本的时候,能够多多留意下版本内容变化。oracle
在解压Drill的压缩包后,在其conf文件夹下有一个drill-override.conf文件,这里咱们在里面添加Web UI的访问地址,添加的内容咱们能够在drill-override-example.conf模版文件中查找对应的内容。添加内容以下所示:ide
drill.exec: { cluster-id: "drillbits1", zk.connect: "dn1:2181,dn2:2181,dn2:2181", http: { enabled: true, ssl_enabled: false, port: 8047 } }
这里须要注意的是,Drill须要用ZK,这里笔者就直接使用Hadoop集群的ZooKeeper集群链接信息地址。在添加完内容后,可使用如下命令启动。oop
./drillbit.sh start
启动以后,Web UI界面以下所示:性能
目前条件有限,只有单台物理机,因此只部署了单台Drill。如果,你们条件容许,能够查看官网文档去部署Cluster。Drill插件默认是没有HDFS的,须要咱们主动去建立,默认只有如下插件,以下图所示:
这里,笔者已经配置过HDFS的插件,故上图出现HDFS插件信息,其配置信息以下所示:
{ "type": "file", "enabled": true, "connection": "hdfs://hadoop.company.com:9000/", "workspaces": { "root": { "location": "/opt/drill", "writable": true, "defaultInputFormat": null } }, "formats": { "csv": { "type": "text", "extensions": [ "csv" ], "delimiter": "," }, "tsv": { "type": "text", "extensions": [ "tsv" ], "delimiter": "\t" }, "parquet": { "type": "parquet" } } }
PS:这里要保证HDFS的地址信息正确。另外,Drill支持的存储介质较多,你们参考官方文档去添加对应的存储介质。
在添加HDFS插件以后,咱们能够经过Web UI界面的查询界面进行文件查询,也可使用Drill Shell命令在终端去查询。查询方式以下所示:
另外,其查询记录详情能够在Profiles模块下查看。以下图所示:
./sqlline -u jdbc:drill:zk=dn1,dn2,dn3:2181
这里,笔者作过一个性能测试比较,数量级分别为10W,100W,1000W的不重复数据,其响应时间依次递增。结果以下图所示:
经过测试结果能够看出,如果数量级在100W时,响应时间平均在秒级别,能够尝试用Drill去中OLTP业务。如果在1000W以上级别,显然这个延时作OLTP是难以接受的,这个能够去作OLAP业务。
这篇博客就和你们分享到这里,若是你们在研究学习的过程中有什么问题,能够加群进行讨论或发送邮件给我,我会尽我所能为您解答,与君共勉!