本文链接:https://blog.csdn.net/zilianxiaozhu/article/details/80320759
版权
1. hive2.x新功能及 LLap 特性介绍
1. (对于hive的介绍我就不多说了) hive 2.1 发布后增加了许多新功能,官网里面提到了以下几点(翻译):
- 使用Hive LLAP进行交互式查询。 LLAP在Hive 2.0中引入,在Hive 2.1中进行了改进,使其性能比Hive 1提高了25倍
- 强大的SQL ACID支持,拥有60多个稳定性修复程序。
- 2x通过更智能的CBO实现更快速的ETL,更快的类型转换和动态分区优化。
- 程序化SQL支持,大大简化了从EDW解决方案迁移的过程。
- 对文本文件进行矢量化支持,在没有任何ETL的情况下引入快速分析选项。
- 大量新的诊断和监测工具,包括新的HiveServer2 UI,新的LLAP UI和改进的Tez UI。
- 总共有2100多个功能,Hive 2.0和Hive 2.1之间的改进和修复。 创新速度巨大,势头继续增长。
2. LLAP(Live Long and Process)特性介绍
使用HIVE LLAP可提高25倍的查询性能, LLAP将计算带入内存(而不是计算到磁盘),它智能地缓存内存,并在所有客户 端之间共享这些数据,同时保留在群集内弹性缩放的能力。
性能提升的主要原因:
- Smarter Map Joins
Hive on Tez是一个无共享架构:每个处理单元独立工作,拥有自己的内存和磁盘资源。 LLAP是一个多线程进程,允许worker共享内存。 map端连接需要将散列表以1:1分布到每个map任务中。 如果你在一个节点上有24个容器,你需要做24个散列表的副本并分发出去。 使用LLAP,您可以为每个节点构建一次散列表,并将其缓存在所有worker的内存中。
-
Better MapJoin Vectorization for Joins
hive2 的mapjoin 的优化,对小维度表的 join现在运行的速度与显式扩展列表一样快
-
A Fully Vectorized Pipeline
Hive 2在reduce端引入了Map Join vectorization特性,它具有动态分区的哈希join,本质上是MapJoin优化的缩减版本。 通过这种优化,reducer输入被排序并通过保持在reduce端的散列表进行流传输。 优化将大维度表分成许多小的不相交维度表 -
A Smarter CBO
3. 测试
(1)本文的测试环境是ambari 2.6.1 + hadoop 2.7.3
Hive 1:
Hive 1.2.1
Tez 0.7.0
Hadoop 2.7.3
hive2:
Hive 2.1.0
Tez 0.8.4-snapshot
Hadoop 2.7.3
(2)其它 Hive / Hadoop 设置:(笔者在这里没配置,你们可以自己配)
除了ambari 默认的配置外,还可以对hive进行一些优化:
- hive.vectorized.execution.mapjoin.native.enabled=true;
- hive.vectorized.execution.mapjoin.native.fast.hashtable.enabled=true;
- hive.vectorized.execution.mapjoin.minmax.enabled=true;
- hive.vectorized.execution.reduce.enabled=true;
- hive.llap.client.consistent.splits=true;
- hive.optimize.dynamic.partition.hashjoin=true;
硬件:
四台阿里云服务节点
修改ambari里面的配置,开启LLAP
Data:
- 对于数据方面,我用TPC-H 生成数据, 存储格式TEXTFILE . 在Hive1和Hive2中使用相同的数据与表结构.
查询:
- 使用 Hive Testbench https://github.com/t3rmin4t0r/hive-testbench/tree/hive14 进行数据构建与查询,然后驱动测试.在Hive1和Hive2执行相同的查询文本.
4. TPC-H 的安装(官网下载地址:http://www.tpc.org/tpc_documents_current_versions/current_specifications.asp)
- 官网下载不能,好像是需要翻墙吧,我这里下载了一份 tpc-h-tool.zip
- 解压到自己的安装目录 我这里是/data0 解压完是
- 进入后找到dbgen 进入这个目录 ,会看到 makefile.suite,备份并重命名它为makefile
- 修改makefile 里面的内容
CC = gcc
DATABASE= DB2
MACHINE = LINUX
WORKLOAD = TPCH
- 保存,执行make 编译(可能会报错,百度一下就行)
- 编译完成会出现一个目录 dbgen 和 qgen
- 然后生成数据 ./dbgen -vf -s 5 -T O 生成5 G 数据(命令里5的含义)
- 会生成8 张表,这时候你就可以测试了
5.测试开始
- 用上述的环境进行hive1 和hive2 llap的测试
- https://github.com/t3rmin4t0r/hive-testbench 这个地址里面有测试sql
- 经测试得出用的tpch_query8.sql 数据5G hive1 结果如下:
- hive2 测试结果(beeline 下测试的):
93.125 seconds
结论:大概快了15倍,小点的查询快6、7倍 笔者认为数据小,官网建议1TB 数据做测试,大家可以测试看看对比,1TB差距25 倍差不多吧,所以说 用hive2 吧 不过内存也要注意哟!!! 另外可以通过新的Hive Server2 Web UI,LLAP Web UI和Tez Web UI查看Hive相关的HQL查询以及关联的作业状态和日志。 端口去配置文件里面看
转载请注明出处:https://blog.csdn.net/zilianxiaozhu/article/details/80320759