hive sql连接优化,hive参数设定,map连接

Map连接

大小表连接时,Map连接是一个非常有用的特性。小表保存在每个节点的本地缓存,在Map阶段与大表进行连接。
两个优势:小表装进缓存将节省每个数据节点上的读取时间;避免了hive查询中的倾斜连接,因为每个数据块的连接操作在map阶段完成了。

  • hive.auto.convert.join=true:是否启用基于输入文件的大小,将普通连接转化为Map连接的优化机制。
  • hive.auto.covert.join.noconditionaltask=true:是否启用基于文件的大小,将普通连接转化为Map连接的优化机制。假设N个表连接,N-1个表的的大小总和小于hive.auto.covert.join.noconditionaltask.size参数指定的值,那么自动转为Map连接。
  • hive.auto.covert.join.noconditionaltask.size=10000000:上边的参数开启,该参数起作用。N-1个表的大小要小于这个参数的值。转为Map连接。
  • hive.auto.covert.join.use.nonstaged=true:对于条件连接,如果从一个小的输入流可以直接应用于join操作而不需要过滤或者投影,那么不需要通过MapReduce的本地任务在分布式缓存中预存。

倾斜连接

两个大表连接时,会先基于连接键分别对两个表进行排序,然后连接他们。Mapper将特定键值的所有行发给同一个reducer。

  • hive.optimize.skewjoin=true:是否为连接表中的倾斜键创建单独的执行计划。它基于存储在元数据中的倾斜键。编译时,hive为倾斜键和其他键值生成各自的执行计划。
  • hive.skewjoin.key=100000:决定如何确定连接中的倾斜键。连接操作中,同一键值所对应的数据行数超过该参数值,则认为是连接倾斜键。
  • hive.skewjoin.mapjoin.min.tasks=10000:指定倾斜连接中,用于Map连接作业的任务数。与hive.skewjoin.mapjoin.min.split一起使用,执行细粒度的控制。
  • hive.skewjoin.mapjoin.min.split=33554432:通过指定最小split的大小,执行细粒度的控制。

你可能感兴趣的:(hive)