执行Hive引擎业务
Hive算子下推使用hive命令来执行。
本次任务示例使用tpch的1T数据的非分区表作为测试表,测试Sql为tpch-sql6。
相关的表信息如表1 相关表信息所示。
具体步骤如下。
- 配置参数文件tpch_ndp.setting,这个文件可以放在自定义路径,本次运行放在“/opt/hive”目录中。
1 2
cd /opt/hive vim tpch_ndp.setting
- 将下面参数配置添加到tpch_ndp.setting中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
set hive.execution.engine=tez; set hive.cbo.enable=true; set hive.tez.container.size=6144; set hive.mapjoin.hybridgrace.hashtable=false; set hive.vectorized.execution.mapjoin.native.fast.hashtable.enabled=true; set omnidata.hive.enabled=true; set omnidata.hive.filter.selectivity.enabled=true; set omnidata.hive.filter.selectivity=1.0; set omnidata.hive.table.size.threshold=10240; set omnidata.hive.zookeeper.quorum.server=agent1:2181,agent2:2181,agent3:2181; set omnidata.hive.zookeeper.status.node=/sdi/status; set omnidata.hive.zookeeper.conf.path=/usr/local/zookeeper/conf; set omnidata.hive.group.optimized.enabled=true; set omnidata.hive.reduce.optimized.enabled=true;
以上的参数也可以通过set命令直接在Hive中设置。
新增算子下推的参数信息如表2 算子下推的参数含义所示。
表2 算子下推的参数含义 参数
默认值
含义
omnidata.hive.enabled
false
开启算子下推。
omnidata.hive.filter.selectivity.enabled
true
开启filter选择率来判断是否下推。
算子下推的收益和filter过滤的数据量相关,过滤的数据量越多,性能收益越明显,建议打开。
omnidata.hive.filter.selectivity
0.2
filter选择率小于该值才会下推(selectivity越小,表示过滤后的剩余的数据量越小),默认值为0.2,类型为double。取值范围为0.0~1.0。
omnidata.hive.table.size.threshold
102400
查询的表大于该值才会执行下推,单位为字节。
omnidata.hive.zookeeper.quorum.server
无
连接到ZooKeeper的地址。
客户场景中启动ZooKeeper的IP地址和端口号,可配置多台,以英文逗号分隔。必须传入参数。
omnidata.hive.zookeeper.status.node
无
下推信息存放在Zookeeper里面的路径。推荐设置“/sdi/status”。必须传入参数。
omnidata.hive.zookeeper.conf.path
无
Zookeeper配置文件存放目录。必须传入参数。
omnidata.hive.group.optimized.enabled
false
算子下推情况下,是否开启group优化。
omnidata.hive.reduce.optimized.enabled
false
算子下推情况下,是否开启reduce优化。
omnidata.hive.group.optimized.coefficient
无
算子下推情况下,设置group优化系数。
omnidata.hive.filter.selectivity和omnidata.hive.table.size.threshold这两个参数是根据规划集群环境给出的推荐值,环境不同性能稍有影响。在实际场景中,如果执行下推的查询时间高于原生查询时间的80%,可配置omnidata.hive.filter.selectivity和omnidata.hive.table.size.threshold参数优化下推性能。 - 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 运行Hive命令。
1
/usr/local/hive/bin/hive -i /opt/hive/tpch_ndp.setting -database tpch_flat_orc_date_1000
- 执行sql6语句。
select sum(l_extendedprice * l_discount) as revenue from tpch_flat_orc_1000.lineitem where l_shipdate >= '1993-01-01' and l_shipdate < '1994-01-01' and l_discount between 0.06 - 0.01 and 0.06 + 0.01 and l_quantity < 25;
执行任务时会打印下推的信息,如下所示。
Table [lineitem] Push Down Info [ Select:[DoubleColMultiplyDoubleColumn(col 5:double, col 6:double) -> 17:double], Filter:[GenericUDFOPAnd(GenericUDFOPEqualOrGreaterThan(Column[l_shipdate], Const date 1993-01-01), GenericUDFOPLessThan(Column[l_shipdate], Const date 1994-01-01), GenericUDFBetween(Const boolean false, Column[l_discount], Const double 0.05, Const double 0.07), GenericUDFOPLessThan(Column[l_quantity], Const double 25.0))], Aggregation:[sum(_col0)], Group By:[], Limit:[], Raw Filter:[], Host Map:[hdfs1 -> hdfs1, hdfs2 -> hdfs2, hdfs3 -> hdfs3]
包含了算子信息。