工作中用到的参数

set datasync.input.table.encrypt=true;

  • 用于在ks_db_origin_encrypt(这种为加密表)的解密

set hive.fetch.task.conversion=none;

  • 启动MapReduce Job需要消耗系统开销,有时候简单的查询(没有子查询,没有聚合函数,没有join,没有distinct,没有lateral view)时不需要启动mr的; 例如:select * from table [limit n]; 这种情况不用启动mr,直接fetch即可;
  • 有3个值:none, minimal, more;
<property>
  <name>hive.fetch.task.conversion</name>
  <value>more</value>
  <description>
    Expects one of [none, minimal, more].
    Some select queries can be converted to single FETCH task minimizing latency.
    Currently the query should be single sourced not having any subquery and should not have
    any aggregations or distincts (which incurs RS), lateral views and joins.
    0. none : disable hive.fetch.task.conversion
    1. minimal : SELECT STAR, FILTER on partition columns, LIMIT only
    2. more  : SELECT, FILTER, LIMIT only (support TABLESAMPLE and virtual columns)
  </description>
</property>

set hive.auto.convert.join = true; //是否自动转换为mapjoin
set hive.mapjoin.smalltable.filesize=25000000; //小表的最大文件大小,默认为25000000,即25M
hive.auto.convert.join.noconditionaltask //是否将多个mapjoin合并为一个
hive.auto.convert.join.noconditionaltask.size //多个mapjoin转换为1个时,所有小表的文件大小总和的最大值

  • Hive内置提供的优化机制之一就包括MapJoin。 在Hive v0.7之前,需要给出MapJoin的指示,Hive才会提供MapJoin的优化。Hive v0.7之后的版本已经不需要给出MapJoin的指示就进行优化。
  • hive自动转换为mapjoin时,需要判断另外一个表的大小,需要配合hive.mapjoin.smalltable.filesize=25000000(默认值是25Mb)使用;
  • 例如,一个大表顺序关联3个小表a(10M), b(8M),c(12M),如果hive.auto.convert.join.noconditionaltask.size的值:
  1. 小于18M,则无法合并mapjoin,必须执行3个mapjoin;
  2. 大于18M小于30M,则可以合并a和b表的mapjoin,所以只需要执行2个mapjoin;
  3. 大于30M,则可以将3个mapjoin都合并为1个。

set hive.exec.parallel = true; // 开启任务并行执行
set hive.exec.parallel.thread.number = 16; 同一个sql允许并行任务的最大线程数

  • 有时候会有多个sql的union操作, 如果不加上面的参数,他会按顺序执行,但是如果union的多个sql之间没有关系,那么是可以并行执行的。

set hive.groupby.skewindata = true;

  • 控制生成两个MR Job,第一个MR Job Map的输出结果随机分配到reduce中减少某些key值条数过多某些key条数过小造成的数据倾斜问题。
  • 在第一个 MapReduce 中,map 的输出结果集合会随机分布到 reduce 中, 每个reduce 做部分聚合操作,并输出结果。这样处理的结果是,相同的 Group By Key 有可能分发到不同的reduce中,从而达到负载均衡的目的;
  • 第二个 MapReduce 任务再根据预处理的数据结果按照 Group By Key 分布到 reduce 中(这个过程可以保证相同的 Group By Key 分布到同一个 reduce 中),最后完成最终的聚合操作。
  • set hive.mapred.mode=nonstrict;
  • 使用严格模式可以限制3种类型的查询:
    1.对于分区表,不加分区字段进行查询,不能执行。
    2.对于order by语句必须使用limit语句。
    3.限制笛卡尔积的查询(join的时候不适用on,而使用where的)
  • set hive.specify.execution.engine.enforce.name=spark; // 设置使用spark
  • set mapreduce.map.java.opts=-Xmx4915m;
  • set mapreduce.map.memory.mb=6144;
  • set mapreduce.reduce.java.opts=-Xmx4912m;
  • set mapreduce.reduce.memory.mb=6144;
  • set mapreduce.task.timeout= 1200000;
  • set spark.cores.max=10;
  • set spark.driver.memory=20G;
  • set spark.executor.cores=3;
  • set spark.executor.memory=20G;
  • set spark.network.timeout=500s;
  • set spark.executor.memoryOverhead=3G;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Fetch 抓取 Fetch抓取是指,Hive中对某些情况的查询可以不必使用MapReduce计算。例如:SELE...
    ZFH__ZJ阅读 1,948评论 0 3
  • 小文件问题的影响1.从Hive的角度看,小文件会开很多map,一个map开一个JVM去执行,所以这些任务的初始化,...
    JayWolf阅读 1,897评论 0 0
  • 上一篇:097-BigData-25Hive函数压缩存储格式 九、企业级调优 9.1 Fetch抓取Fetch抓取...
    AncientMing阅读 590评论 0 6
  • Hive优化 今天的主要内容——Hive优化 Fetch抓取Hive 中对某些情况的查询可以不必使用 MapRed...
    须臾之北阅读 1,279评论 0 3
  • 9.1 Fetch抓取(了解) Fetch抓取是指,Hive中对某些情况的查询可以不必使用MapReduce计算。...
    码农GG阅读 435评论 0 0

友情链接更多精彩内容