apache drill 0.8.0 安装测试
环境 apache-drill-0.8.0 apache-hadoop-2.5.2 jdk1.7
写在前面 看到社区发表的文章显示,apache drill 在PB级数据面前在数秒内即可查询返回结果,这个测试报告很吸引人,但是没有描述用了多少个节点有点遗憾,drill的强大引用一段描述:
- 大数据面临的一个很大的问题是大多数分析查询都很缓慢且非交互式。Google的Dremel能以极快的速度处理网络规模的海量数据。据谷歌的研究报告显示,Dremel能以拍字节(petabyte,PB,1PB等于1024TB)的数量级来进行查询,而且只需几秒钟时间就能完成。而其对应的开源版本就是Drill。
好不好,先搭建一个环境测试一下:
单机模式:
- 下载安装包: http://mirror.bit.edu.cn/apache/drill/drill-0.8.0/apache-drill-0.8.0.tar.gz
- 解压安装即可
1.下载并解压
[hadoop@dn apache-drill-0.8.0]$ wget http://mirror.bit.edu.cn/apache/drill/drill-0.8.0/apache-drill-0.8.0.tar.gz -C /usr/local/
[hadoop@dn apache-drill-0.8.0]$ tar zxvf apache-drill-0.8.0.tar.gz
[hadoop@dn apache-drill-0.8.0]$ cd apache-drill-0.8.0/
2.启动
[hadoop@rm local]$ apache-drill-0.8.0/bin/drillbit.sh start
3.sqlline 工具进行测试
[hadoop@rm local]$ apache-drill-0.8.0/bin/sqlline -u jdbc:drill:zk=local
Drill log directory /var/log/drill does not exist or is not writable, defaulting to /opt/work/apache-drill-0.8.0/log
四月 16, 2015 4:17:05 下午 org.glassfish.jersey.server.ApplicationHandler initialize
信息: Initiating Jersey application, version Jersey: 2.8 2014-04-29 01:25:26...
sqlline version 1.1.6
0: jdbc:drill:zk=local>
note:通过命令sqlline -h可以查看sqlline的参数 -u 即为链接地址 zk=local 即为本地zookeeper服务,本地不用另外配置zookeeper服务,直接执行step2 step3即可
4.sqlline基本sql查询
0: jdbc:drill:zk=local> select * from dfs.`/opt/work/apache-drill-0.8.0/sample-data/nation.parquet`;
+-------------+------------+-------------+------------+
| N_NATIONKEY | N_NAME | N_REGIONKEY | N_COMMENT |
+-------------+------------+-------------+------------+
| 0 | ALGERIA | 0 | haggle. carefully f |
| 1 | ARGENTINA | 1 | al foxes promise sly |
| 2 | BRAZIL | 1 | y alongside of the p |
| 3 | CANADA | 1 | eas hang ironic, sil |
| 4 | EGYPT | 4 | y above the carefull |
| 5 | ETHIOPIA | 0 | ven packages wake qu |
| 6 | FRANCE | 3 | refully final reques |
| 7 | GERMANY | 3 | l platelets. regular |
| 8 | INDIA | 2 | ss excuses cajole sl |
| 9 | INDONESIA | 2 | slyly express asymp |
| 10 | IRAN | 4 | efully alongside of |
| 11 | IRAQ | 4 | nic deposits boost a |
| 12 | JAPAN | 2 | ously. final, expres |
| 13 | JORDAN | 4 | ic deposits are blit |
| 14 | KENYA | 0 | pending excuses hag |
| 15 | MOROCCO | 0 | rns. blithely bold c |
| 16 | MOZAMBIQUE | 0 | s. ironic, unusual a |
| 17 | PERU | 1 | platelets. blithely |
| 18 | CHINA | 2 | c dependencies. furi |
| 19 | ROMANIA | 3 | ular asymptotes are |
| 20 | SAUDI ARABIA | 4 | ts. silent requests |
| 21 | VIETNAM | 2 | hely enticingly expr |
| 22 | RUSSIA | 3 | requests against th |
| 23 | UNITED KINGDOM | 3 | eans boost carefully |
| 24 | UNITED STATES | 1 | y final packages. sl |
+-------------+------------+-------------+------------+
25 rows selected (0.065 seconds)
0: jdbc:drill:zk=local>
dfs.中dfs是drill默认待的storage plugin
括号中的内容为你主机本地的文件路径,实例中给出的/opt/work/apache-drill-0.8.0/sample-data/nation.parquet路径是drill解压包中的实例parquet形式的数据文件,此路径可以修改为任意你自己的数据文件路径,json,tsv,csv都可以
5.查看drill的UI
执行step2后即可通过浏览器访问:http://localhost:8047/ 路径访问drill的ui,点开storage页签即可查看当前支持的访问schame
6.添加storage plugin
step5的管理地址 ,打开storage页签,update现有dfs,并可以仿照dfs实例,添加一个访问hdfs的storage plugin
在最底下输入新的storage plugin 名称,点击create
进入下一个页面,然后输入如下信息:
{
"type": "file",
"enabled": true,
"connection": "hdfs://localhost: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"
}
}
}
note:
“connection”: “hdfs://localhost:9000/” 是指本地的hdfs地址
“location”: “/opt/drill” 是工作空间,如你要将hdfs的数据倒出到另外一张表,你可以将表倒出到hdfs的location目录下
下面的formats是支持的文件格式
7.访问hdfs文件系统
将数据上传到hdfs
[hadoop@rm local]$ hadoop fs -put /opt/work/apache-drill-0.8.0/sample-data/nation.parquet /tmp/
sqlline查询hdfs上的nation.parquet文件
0: jdbc:drill:zk=local> select * from hdfs.`/tmp/nation.parquet`
8.测试结果
tsv文件大小5.6G 记录43282116 条数据
执行
select count() from hdfs.`/test/tsv/`;
消耗时间:54.616 seconds
将上面的tsv文件转换成parquet文件,执行同样的count 需要时间0.388 seconds
,单从tsv等富文本查询和从parquet文件查询效果是显著的
单机模式的初步配置如上即可,其中step5从官方看,刚开始没有太注意,一直提到storage plugin,不知道从哪里配置,找的资料都是m1的老版本,后来尝试访问8047端口才找到了配置的入口
后续会继续发布分布式模式的搭建和测试结果,tsv,csv文件转化成parquet等
分布式安装部署
单机模式下部署也相当的简单:
1.解压上面下载的gz包到一个目录下
2.修改drill-override.conf文件
[hadoop@rm apache-drill-0.8.0]$ vim conf/drill-override.conf
# Licensed to the Apache Software Foundation (ASF) under one or more
# See 'drill-override-example.conf' for example configurations
drill.exec: {
cluster-id: "drillbits1",
zk.connect: "dn.hdp.010104015209.tgz:2181"
}
即修改zk.connect属性值为你的zookeeper的地址和端口即可,此处我配置一个zk地址
配置好以后,分发到其他主机上,并分别在每台主机上启动drill
[hadoop@rm apache-drill-0.8.0]$ bin/drillbit.sh start
drill 没有start-all这么好用的命令,只能每台机器上分别启动
启动之后查看UI,可以看到如下页面
2.进入sqlline
在任意一个节点进入sqlline命令端,执行命令
[hadoop@rm apache-drill-0.8.0]$ /opt/work/apache-drill-0.8.0/bin/sqlline -u jdbc:drill:zk=dn.hdp.010104015209.tgz
即可
总结,单机模式和分布式,测试同样的parquet文件(5.6G,43282116条记录)查询7个查询节点,执行count节约100毫秒左右,效果不明显,后续在持续跟新中
业务查询:
分布式模式下查询:
0: jdbc:drill:zk=dn.hdp.zk.tgz> select domain_id,sum(total_num) from hdfs.root.`/log_parquet4` where app_id=236 group by domain_id limit 10 ;
+------------+------------+
| domain_id | EXPR$1 |
+------------+------------+
| 3041 | 3264 |
| 5509 | 490 |
| 3397 | 90 |
| 26423 | 2 |
| 3409 | 14 |
| 3405 | 9 |
| 3520 | 3 |
| 3603 | 4 |
| 35448 | 6 |
| 40053 | 3 |
+------------+------------+
10 rows selected (0.632 seconds)
单机模式下查询:
0: jdbc:drill:zk=dn.hdp.zk.tgz> select domain_id,sum(total_num) from hdfs.root.`/log_parquet3` where app_id=236 group by domain_id limit 10 ;
+------------+------------+
| domain_id | EXPR$1 |
+------------+------------+
| 3041 | 3264 |
| 5509 | 490 |
| 3409 | 14 |
| 3397 | 90 |
| 40053 | 3 |
| 3405 | 9 |
| 3520 | 3 |
| 29494 | 1 |
| 13689 | 2 |
| 26423 | 2 |
+------------+------------+
10 rows selected (1.546 seconds)
分布式与单机模式相差一倍多的执行效率,分布式查询还是效果明显,
note:在单机模式下执行sql将tsv文件建立成parquet表:log_parquet3, 在分布式模式下建立parquet表:log_parquet4,然后分别进行查询对比即可
drill直接将tsv文件转化为parquet文件参考地址:https://www.mapr.com/blog/evolving-parquet-self-describing-data-format-new-paradigms-consumerization-hadoop-data#.VS25js2UfCL
parquet文件结构的文章:http://blog.jobbole.com/29561/
比较好用的wiki:https://cwiki.apache.org/confluence/display/DRILL/Installing+Drill+in+Distributed+Mode