干货!来取!Hadoop调度器 和Hive中发生数据倾斜的处理方法

Posted IT大数据笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了干货!来取!Hadoop调度器 和Hive中发生数据倾斜的处理方法相关的知识,希望对你有一定的参考价值。

Hadoop调度器

  • 默认的调度器 FIFO Hadoop中默认的调度器,它先按照作业的优先级高低,再按照到达时间的先后选择被执行的作业。

  • 计算能力调度器 Capacity Scheduler 支持多个队列,每个队列可配置一定的资源量,每个队列采用FIFO调度策略,为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。调度时,首先按以下策略选择一个合适队列:计算每个队列中正在运行的任务数与其应该分得的计算资源之间的比值,选择一个该比值最小的队列;然后按以下策略选择该队列中一个作业:按照作业优先级和提交时间顺序选择,同时考虑用户资源量限制和内存限制。

  • 公平调度器 Fair Schedule 同计算能力调度器类似,支持多队列多用户,每个队列中的资源量可以配置,同一队列中的作业公平共享队列中所有资源。

  • 等其他调度器。

secondary namenode / namenode如何工作

  1. secondary namenode 在 namenode 的 edits log 文件超过规定值(默认 64M)时,或者每隔3600秒(默认值)时会剪切 edits log 文件,复制 namenode 上的 fsimage文件(若没有 fsimage)。

  2. namenode 节点创建一个新的 edits 文件。

  3. 将 edits log 文件及 fsimage 文件进行合并为一个新 fsimage。

  4. 将 fsimage 文件回传至 namenode 节点。

  5. Namenode 节点使用 seconday namenode 节点回传的 fsimage 文件覆盖本地的fsimage 文件。

  6. 当 namenode 节点启动时可以从 seconday namenode 节点复制 fsimage 文件达到快速启动的目的。

Hive中发现数据倾斜的解决方案

1.调节配置参数

  • 设置hive.map.aggr = true map端部分聚合,相当于Combiner

  • 设置hive.groupby.skewindata = true 有数据倾斜时,查询计划生成两个mr job, 第一个job先进行key随机分配处理,先缩小数据量。第二个job再进行真正的group by key处理。

2.SQL语句优化

  • 大小表进行连接时,使用map join让小表先进内存,在map端完成reduce。

  • 大表连接大表时,如果是空值造成数据倾斜,那么把空值变成一个字符串加上随机数,把这部分倾斜的数据分发到不同的reduce上。

  • 如果count distinct有大量相同特殊值 (如空值) 空值可以不用处理,直接最后count结果加1即可。或者空值单独拿出来处理,最后再union回去。

  • 不同数据类型关联 默认的hash操作会按其中一种类型的值进行分配,导致别一种类型全部分发到同一个reduce中。把两个关联的类型转换成相同类型。

欢迎在下方互相讨论,喜欢就分享给别人吧。


以上是关于干货!来取!Hadoop调度器 和Hive中发生数据倾斜的处理方法的主要内容,如果未能解决你的问题,请参考以下文章

干货达观数据分析平台架构和Hive实践

技术干货三分钟了解数据仓库Hive

Hadoop大数据技术Yarn 案例实操

Hadoop MapReduce优化和资源调度器

Hadoop 三大调度器分析

hive集群tez引擎执行任务报错