本篇,将说明如何实现 Alluxio和来自FaceBook的Presto集成(Presto是完全基于内存的计算框架;Alluxio是以内存为中心的分布式虚拟存储方案,两者结合究竟能带来多少性能的提升和系统架构上的优势,有待后续更多的研究和验证)。
其他更多关于Alluxio的使用和交流,请加QQ群讨论:
Alluxio-China 452894882
2. Alluxio系统已安装Java1.7以上版本的JDK
3. Presto集群已经安装Java1.8_u60以上版本JDK
4. 通过Presto能正常提交查询和返回结果
二、配置Presto集群
1. 修改presto节点安装目录下面的hadoop、hive相关配置文件hive-site.xml,在原配置内容之上,增加如下配置信息
fs.defaultFS
alluxio://:19998
alluxio.user.file.writetype.default
CACHE_THROUGH
2. 修改presto节点安装目录下面的hadoop、hive相关配置文件core-site.xml,在原配置内容之上,增加如下配置信息
fs.alluxio.impl
alluxio.hadoop.FileSystem
fs.AbstractFileSystem.alluxio.impl
alluxio.hadoop.AlluxioFileSystem
3. 分发Alluxio客户端jar包/
特别说明:
上述【$PRESTO_HOME/plugin/hive-cdh5/】中的 "hive-cdh5"是跟Presto集群catalog配置中的"connector.name"的值对应的
4. 完成上述配置和Alluxio客户端文件分发后,重启Presto集群节点。
三、验证
执行presto查询:
presto --server :15050 --execute "use default; select * from words;"
id word
5 nihao
1 hadoop
2 hive
3 hbase
4 hello
Query 20170117_075052_00008_n6cwe, FINISHED, 1 node
Splits: 3 total, 3 done (100.00%)
0:00 [5 rows, 40B] [21 rows/s, 175B/s]
presto --server :15050 --execute "use default; select * from test_alluxio_hive_tbl;"
id word
1 hadoop
2 hive
3 hbase
4 hello
5 alluxio-hive
Query 20170117_075140_00009_n6cwe, FINISHED, 1 node
http://10.2.26.41:15050/query.html?20170117_075140_00009_n6cwe
Splits: 2 total, 2 done (100.00%)
CPU Time: 0.0s total, 384 rows/s, 3.53KB/s, 33% active
Per Node: 0.1 parallelism, 24 rows/s, 231B/s
Parallelism: 0.1
0:00 [5 rows, 47B] [24 rows/s, 231B/s]
1. 对于查询语句【use default; select * from words;】,原生Presto CLI 不支持 "--execute"查询模式下【use schema;】语句,
这种写法是基于作者对Presto CLI的二次开发实现的;读者朋友可以将【use default; select * from words;】换作【select * from default.words;】提交查询
2. 上述两个示例中,表"words"是原生的hive表;表"test_alluxio_hive_tbl"是通过 Alluxio & Apache Hive整合后的hive客户端创建的表,
表的结构描述信息并不相同(有兴趣的读者可以在hive客户端使用命令【show create table table_name;】查看)
3. 执行上述两个查询时,开启presto service日志模式为debug模式,同时监控 presto 的 server日志,会发现,两个表读取数据的Split path并不相同:前者是"{path=hdfs://...}"; 后者是"{path=alluxio://...}",其中细节研究,后续做详细探讨。
4. 通过Presto Service 的Web UI查看查询历史,如下图