1. Drill是什么
Apache drill是什么,脱去华丽的外衣,Apache Drill是一个能够对大数据进行实时的分布式查询引擎,目前它已经成为Apache的顶级项目。Drill是开源版本的Google Dremel。它以兼容ANSI SQL语法作为接口,支持对本地文件,HDFS,HIVE, HBASE,MongeDB作为存储的数据查询,文件格式支持Parquet,CSV, TSV,以及JSON这种无模式无关(schema-free)的数据。所有这些数据都可以像使用传统数据库的针对表查询一样进行快速实时的查询。
2. Drill结构
Apache Drill是一个无主节点的分布式查询工具,每一个部署节点(Drillbit)都包含有以下核心模块:
- RPC Endpoint: 基于RPC协议的客户端通信接口
- SQL Parser: SQL解析工具,输出Logical plan, 它使用了开源工具:Calcite
- Storage Engine interface: 面对多种数据源的统一读写抽象接口,它提供几种功能: 1.提供Metadata。 2.数据读写接口。3.数据定位和优化规则帮助提高查询效率。
Drill提供以下几种类型的使用接口:
- Drill Shell
- Drill WEB控制台
- ODBC/JDBC
- C++ API
3. Drill安装
Drill支持单机或分布式模块的Linux, Mac OS X, Windows系统的部署。本文的测试环境为基于CDH 5.5的Hadoop集群环境的安装和测试。ApacheDrill 版本: 1.8. Drill 的安装依赖于以下几个组件:
- (必须)JDK 7
- (必须)ZooKeeper quorum
- (建议)Hadoop Cluster
- (建议)使用DNS
即然是基于已安装好的CDH 5.5环境,那么以上要求自然是完全满足的。(CDH5.5安装参考: 理清CDH Hadoop集群安装流程,剩下的就是安装Drill了:
1. 解压Apache Drill(软件包的下载可以在Apache drill官网下到)
tar -xzvf apache-drill-1.8.0.tar.gz
2. 更改配置文件
更改目录 apache-drill-1.8.0/conf/drill-override.conf配置文件,如:
drill.exec: {
cluster-id: "drillbits1", //集群唯一ID,可以默认
zk.connect: "master:2181,slave2:2181,slave3:2181" //参考hdfs-site.xml的ha.zookeeper.quorum配置项值
}
3. 配置Drill
Drill默认使用4G Heap memory, 8G Direct Memory的配置,(自Drill 1.5后,Drill使用Driect Memory来分配查询内存,提高查询效率)。可以在apache-drill-1.8.0/conf/drill-env.sh文件中更改内存配置,如:
DRILL_MAX_DIRECT_MEMORY="8G"
DRILL_MAX_HEAP="4G"
4. 启动Drill
将配置完成后的 apache-drill-1.8.0 目录拷贝到每一个集群节点上,执行bin目录下的以下脚本启动Apache Drill:
./drillbits.sh start
5. 连接到Drill
Drill可以使用以下几方式进行命令行连接操作:
##使用drill-override.conf配置文件进行默认连接
./bin/drill-conf #以下的查询测试都采用此方式进行连接
##使用命令行自己指定参数进行连接
./bin/sqlline -u jdbc:drill:schema=