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
相关推荐
Apache Drill 是一个低延迟的分布式海量数据交互式查询引擎,使用户能够使用 ANSI SQL 兼容语法查询多种类型的数据存储系统,包括本地文件、HDFS、Hive、HBase、MongoDB 等。Drill 的设计目标是为了支持更广泛的数据...
**Apache Drill** 是一款用于大数据交互式分析的强大工具,属于开源分布式系统。它的主要特点包括: - **支持多种数据源和格式**:不仅可以处理传统的结构化数据,还能有效管理半结构化及嵌套数据。 - **兼容SQL...
《Learning Apache Drill 2019》是一本关于如何使用Apache Drill进行分布式数据源查询和分析的书籍。Apache Drill是一个开源的SQL查询引擎,它能够查询各种数据源,包括Hadoop上的数据、NoSQL数据库、云存储服务和...
Apache Drill是Google BigQuery团队发起的一个开源项目,它是一个分布式、低延迟的SQL查询引擎,设计用于处理大规模的非结构化和半结构化数据。Apache Drill的目标是提供一种简单、快速的方式来查询和分析大规模的...
1. **安装和配置Drill**:包括下载、构建、配置Drill的单节点或分布式集群。 2. **基本查询操作**:学习如何编写和执行SQL查询,包括SELECT、WHERE、JOIN等语句。 3. **处理JSON数据**:了解如何查询和解析嵌套及...
Apache Drill是一个分布式MPP查询层,支持针对NoSQL和Hadoop数据存储系统SQL和替代查询语言。 它的部分灵感来自 。 开发者 请阅读以设置和运行Apache Drill。 有关完整的开发人员文档,请参见 更多信息 请参阅或以...
Apache Drill是一款强大的、跨平台的数据查询引擎,专为大数据分析设计。它支持SQL查询语言,使得用户能够方便地处理各种不同类型的数据源,如Hadoop、NoSQL数据库、云存储等。在Apache Drill 1.18版本中,我们找到...
Learning Apache Drill Queryand Analyze Distributed Data Sources with SQL
apache-drill-jdbc-plugin 适用于Apache Drill的JDBC插件 下载Apache Drill 0.9。 将代码添加到contrib中,然后用此文件夹中的pom文件替换现有的pom文件。 用mvn构建。 要仅生成软件包,请使用与以下类似的符号:...
Apache Drill是一款开源的分布式SQL查询引擎,专门设计用于大规模数据集的分析,尤其适用于现代大数据存储格式,如Hadoop Distributed File System (HDFS)、云存储服务以及NoSQL数据库。这款工具无需预先定义schema...
一组用于处理Internet域名的Apache Drill UDF UDFs 有一个UDF: suffix_extract(domain-string) :给定一个有效的互联网域名(FQDN或其他方式),这将返回一个地图的领域tld , assigned , subdomain和hostname的...
Apache Drill是一个分布式MPP查询层,支持针对NoSQL和Hadoop数据存储系统SQL和替代查询语言。 它的部分灵感来自于Google的Dremel。https://mirrors.tuna.tsinghua.edu.cn/apache/drill/drill-1.17.0/
### Cognos Drill Up/Down:深入理解与应用 #### 引言 在现代数据分析领域,Cognos作为一款领先的企业级商业智能工具,提供了强大的报告设计与数据分析功能。其中,“Drill Up/Down”(钻取)是Cognos中的一个核心...
1. **安装与配置**:首先,你需要下载Apache Drill并进行安装,这通常涉及到配置Drill的分布式环境,如设置 Drillbit节点、 ZooKeeper集群等。 2. **注册存储插件**:接着,你需要在Drill的配置文件中注册要使用的...
安装使用NPM软件包管理器安装Drillone npm install drillnode入门// Requirementsconst Drill = require ( 'drillnode' ) ;// Init Drill clientconst drill = new Drill ( { url : 'http://localhost:8047'} ) ;// ...