<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://bd01:3306/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<!--开启 spark 引擎-->
<property>
<name>hive.execution.engine</name>
<value>spark</value>
</property>
<!-- 合并 block 减少 task 数量-->
<property>
<name>ngmr.partition.automerge</name>
<value>true</value>
</property>
<!-- 表示将 n 个 block 安排给单个线程处理。 -->
<property>
<name>ngmr.partition.mergesize.mb</name>
<value>3</value>
</property>
<!-- 开启小文件合并-->
<property>
<name>hive.merge.sparkfiles</name>
<value>true</value>
</property>
<!-- 开启小文件合并-->
<property>
<name>hive.map.agg</name>
<value>true</value>
</property>
<!-- 使用向量化查询-->
<property>
<name>hive.vectorized.execution.enabled</name>
<value>true</value>
</property>
<!-- cbo可以优化hive的每次查询-->
<property>
<name>hive.cbo.enable</name>
<value>true</value>
</property>
<property>
<name>hive.stats.fetch.column.stats</name>
<value>true</value>
</property>
<property>
<name>hive.stats.fetch.partition.stats</name>
<value>true</value>
</property>
<property>
<name>hive.compute.query.using.stats</name>
<value>true</value>
</property>
<!-- 开启数据压缩-->
<property>
<name>hive.exec.compress.intermediate</name>
<value>true</value>
</property>
<property>
<name>hive.exec.compress.output</name>
<value>true</value>
</property>
<!-- 使简单的sql语句不执行spark引擎-->
<property>
<name>hive.fetch.task.conversion</name>
<value>more</value>
</property>
<!-- 有数据倾斜的时候进行负载均衡
group by操作是否允许数据倾斜,默认是false,当设置为true时,执行计划会生成两个map/reduce作业,第一个MR中会将map的结果随机分布到reduce中,达到负载均衡的目的来解决数据倾斜,
-->
<property>
<name>hive.groupby.skewindata</name>
<value>true</value>
</property>
<!-- 列裁剪,默认开启true,在做查询时只读取用到的列,这个是个有用的优化;-->
<property>
<name>hive.optimize.cp</name>
<value>true</value>
</property>
<!--jvm重用-->
<property>
<name>mapreduce.job.jvm.numtasks</name>
<value>10</value>
<description>How many tasks to run per jvm. If set to -1, there is no limit.</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
<description>password to use against metastore database</description>
</property>
</configuration>
hive cli 中设置调优参数
// 合并 block 减少 task 数量
set ngmr.partition.automerge = true;
// jvm 重用
set mapreduce.job.jvm.numtasks=10;
// 表示将 n 个 block 安排给单个线程处理。
set ngmr.partition.mergesize.mb =3;
// 开启小文件合并
set hive.merge.sparkfiles = true;
// 开启小文件合并
set hive.map.agg = true;
// 使用向量化查询
set hive.vectorized.execution.enabled = true;
// cbo可以优化hive的每次查询
set hive.cbo.enable = true;
set hive.stats.fetch.column.stats = true;
set hive.stats.fetch.partition.stats = true;
set hive.compute.query.using.stats = true;
// 开启数据压缩
set hive.exec.compress.intermediate = true;
set hive.exec.compress.output = true;
// 有数据倾斜的时候进行负载均衡group by操作是否允许数据倾斜,默认是false,当设置为true时,执行计划会生成两个map/reduce作业,第一个MR中会将map的结果随机分布到reduce中,达到负载均衡的目的来解决数据倾斜,
set hive.groupby.skewindata = true;
// 列裁剪,默认开启true,在做查询时只读取用到的列,这个是个有用的优化;
set hive.optimize.cp = true;