Drill doc, https://drill.apache.org/docs/hive-storage-plugin/
发现在国内访问的时候有些标签反应还是很慢,因为它访问了gooleapi的缘故吧。故连接vpn后,访问效果好了很多。
尝试Drill的原因是,在公司开发的项目一直用Hive,但在测试阶段,有些交互式查询想快些获取到结果,但是hive就是不给力,而且当前的版本不支持使用spark-sql和tez.遂后尝试了使用impala.但impala有一个很受不了的问题是,它访问hive的时候,使用的是impala 作为用户名,需要hdfs文件的权限是775,即可读可执行,否则报错。impala访问速度真是快,不管query多么复杂,反应相当给力,所以回来后就想尝试一下工作机制类似impala的Drill.
根据doc下载并安装Drill.
配置drill为分布式模式。
启动hive metastore 服务:
hive --service metastore
启动Drill服务:
drillbit.sh start &
从firefox中访问:http://localhost:8047
配置存储插件的内容如下:
storage dfs plugin: { "type": "file", "enabled": true, "connection": "hdfs://namenode01/", "workspaces": { "root": { "location": "/", "writable": false, "defaultInputFormat": null }, "tmp": { "location": "hdfs://namenode01/tmp", "writable": true, "defaultInputFormat": null } } hive plugin configuration: { "type": "hive", "enabled": true, "configProps": { "hive.metastore.uris": "thrift://namenode01:9083", "javax.jdo.option.ConnectionURL": "jdbc:mysql://namenode01:3306/hive?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=latin1", "hive.metastore.warehouse.dir": "/user/hive/warehouse/", "fs.default.name": "hdfs://namenode01/tmp", "hive.metastore.sasl.enabled": "false" } }
我当时在使用drill访问hive的时候,遇到的一些问题都是没有设置好这些个地方。
启动adhoc 查询程序:
sqlline -u jdbc:drill:schema=hiveremote
Error: SYSTEM ERROR: UnknownHostException: cluster1
because I use namenode HA .
So I change to namenode:port. this looks like a bug.
http://mail-archives.apache.org/mod_mbox/drill-user/201508.mbox/%[email protected].com%3E
我把mysql的示例数据库都已经导入到hive表中,数据库名为test.
show databases;
use test;
select count(*) as cnt , dept_name from employees group by dept_name order by dept_name,cnt;
第一次8秒多,第二次不到三秒,第三次不到二秒。
打开hive端口进行尝试:
默认mr模式下很慢,直接启用tez模式。
set hive.execution.engine=tez;
大约使用30约左右。
打开spark-sql standlone模式 :第一次22秒,第二次9秒,第三次接近8秒。速度还可以,但是还是比drill差一些。
简单对比,可见Drill的实现真是牛叉。
测试一下join的效果依然不错。