• UID80
  • 登录2017-10-11
  • 粉丝63
  • 关注21
  • 发帖1124
  • 主页
  • 金币6445枚
社区居民
忠实会员
原创写手
潇潇宇 发布于2016-08-18 10:32
0/592

apache drill 0.8.0 安装测试

楼层直达

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。

好不好,先搭建一个环境测试一下: 

单机模式:

  1. 下载安装包:
  2. http://mirror.bit.edu.cn/apache/drill/drill-0.8.0/apache-drill-0.8.0.tar.gz
  3. 解压安装即可

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


0人打赏
您需要登录后才可以回帖
发表回复
极贡献
技术问答
专题荟萃
程序人生
视觉设计
Android开发
iOS开发
编程语言
前端开发
后端开发
服务器架构
软件测试
运维方案
创业路上



最热文章墙

  • 77023/375   【精品推荐】200多种Android动画效果的强悍框架,太全了,不看这个,再有动画的问题,不理你了^@^

  • 44086/191   情人节福利,程序员表白的正确姿势:改几行代码就变成自己的表白了

  • 43708/0   Python爬虫:常用浏览器的useragent

  • 40222/259   【精品推荐】Android版产品级的音乐播放器源码,功能太强大了,最好的产品原型有木有?

  • 37958/145   省时省力的Android组件群来了,非常棒的原型参考

  • 29224/142   2016抢红包软件及源码

  • 28976/2   超全!整理常用的iOS第三方资源

  • 28850/71   原创表白APP,以程序员的姿势备战新年后的7夕,持续完善中!

  • 23568/159   Android版类似UC浏览器:非常赞,产品级的源码

  • 22588/30   麻省理工的一帮疯子,真的实现了随意操控万物!(绝对黑科技)

  • 22272/25   Android工程师面试题大全

  • 22147/27   2016程序员跳槽全攻略

  • 21737/9   GitHub上排名前50的iOS项目:总有一款你用得着

  • 20702/20   码魂:程序员的牛B漫画

  • 18795/10   2016年最全的Android面试考题+答案 精编版

  • 18644/85   Android小而全的博客源码:非常适合全面掌握开发技巧

  • 18530/3   吐槽那些程序员的搞笑牛逼注释

  • 18523/42   一个绚丽的loading动效分析与实现!

  • 18504/73   【持续更新中】Android福利贴(二):资料源码大放送

  • 17454/1   iOS 动画总结

  • 17301/45   惊艳的App引导页:背景图片切换加各个页面动画效果

  • 17101/81   仿京东商城客户端Android最新版,不错的原型和学习资料

  • 16929/104   Android带弹幕的视频播放器源码,来自大名鼎鼎的Bilibili弹幕网站

  • 16840/23   个人收集的Android 各类功能源代码

  • 16329/5   新一代Android渠道打包工具:1000个渠道包只需要5秒

  • 16247/10   女程序员的梦,众网友的神回复

  • 16242/21   Android福利第三波【Android电子书】

  • 16109/53   基于瀑布流的美女图片浏览App,有注释的源代码

  • 16085/17   用JavaScript 来开发iOS和Android 原生应用:React Native开源框架中文版来啦

  • 16003/81   【精品推荐】类似360安全卫士安Android源码:非常赞的产品原型

  • 15939/11   年会上现场review代码是怎么样的体验!

  • 15747/23   珍藏多年的素材,灵感搜寻网站

  • 15743/0   iOS中文版资源库,非常全

  • 15048/18   65条最常用正则表达式,你要的都在这里了

  • 14573/15   基于Android支付宝支付设计和开发方案

  • 13999/17   什么是真正的黑客:收获12200+Stars,人气远超微软开源VS

  • 13971/11   有木有这样一张酷图帮你集齐所有git命令超实用

  • 13658/46   在线音乐播放器完整版(商用级的源码):非常赞,可听免费高品质专辑

  • 13480/0   GitHub iOS 库和框架Top100 

  • 13333/7   一张图搞定iOS学习路线,非常全面

  • 13326/7   用程序员的姿势抢过年的火车票

  • 13201/61   【技巧一】搭配Android Studio,如何实现App远程真机debug?

  • 12958/10   成为Java顶尖程序员 ,看这11本书就够了

  • 12877/10   微信支付终于成功了(安卓,iOS),在此分享

  • 12800/18   一张图搞定Android学习路线,非常全面

  • 12542/29   【持续更新中】Android福利贴(一):资料源码

  • 12475/3   基于Node.js的强大爬虫,能直接发布抓取的文章哦

  • 12188/4   46 个非常有用的 PHP 代码片段

  • 11740/3   即时通信第三方库

  • 11256/8   流媒体视频直播方案

  • 11172/18   八个最优秀的Android Studio插件

  • 11054/9   B站建开源工作组:APP想支持炫酷弹幕的看过来

  • 10883/9   烧了5亿美金,这家神秘的公司即将颠覆人类未来!

  • 10785/2   【精品推荐】高质量PHP代码的50个实用技巧:非常值得收藏

  • 10695/10   中国黑客的隐秘江湖:攻守对立,顶尖高手月入千万美元

  • 10057/6   开箱即用!Android四款系统架构工具

  • 9876/10   十大技巧快速提升Android应用开发性能

  • 9799/3   10款GitHub上最火爆的国产开源项目——可以媲美西半球

  • 9698/1   Android性能优化视频,文档以及工具

  • 9660/3   一张图看清Linux 内核运行原理

  • 返回顶部