MapReduce数据倾斜产生的原因及其解决方案

这篇具有很好参考价值的文章主要介绍了MapReduce数据倾斜产生的原因及其解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、数据倾斜现象

数据倾斜就是数据的key的分化严重不均,造成一部分数据很多,一部分数据很少的局面。
数据频率倾斜 —— 某一个区域的数据量要远远大于其他区域。
数据大小倾斜 —— 部分记录的大小远远大于平均值。

2、数据倾斜产生的原因

(1)Hadoop框架的特性

Job数多的作业运行效率会相对比较低;
countdistinct、group by、join等操作,触发了shuffle动作,导致全部相同key的值聚集在一个或几个节点上,很容易发生单点问题。

(2)具体原因

key 分布不均匀,某一个key的数据条数比其他key多太多;
业务数据自带的特性;
建表时考虑不全面;
可能某些 HQL 语句自身就存在数据倾斜问题。

3、数据倾斜解决方案

从业务和数据方面解决数据倾斜
有损的方法: 找到异常数据。
无损的方法:
对分布不均匀的数据,进行单独计算,首先对key做一层hash,把数据打散,让它的并行度变大,之后进行汇集数据预处理

Hadoop平台的解决方法

1)针对join产生的数据倾斜

场景一:大表和小表join产生的数据倾斜
① 在多表关联情况下,将小表(关联键记录少的表)依次放到前面,这样能够触发reduce端减少操作次数,从而减少运行时间。
② 同时使用Map Join让小表缓存到内存。在map端完成join过程,这样就能省掉redcue端的工作。

需要注意:这一功能使用时,需要开启map-side join的设置属性:

set hive.auto.convert.join=true #(默认是false)
③ 还可以对使用这个优化的小表的大小进行设置:
set hive.mapjoin.smalltable.filesize=25000000 #(默认值25M) 
场景二:大表和大表的join产生的数据倾斜
① 将异常值赋一个随机值,以此来分散key,均匀分配给多个reduce去执行
set hive.exec.reducers.bytes.per.reducer = 1000000000
② 如果key值都是有效值的情况下,需要设置以下几个参数来解决也就是每个节点的reduce,其 默认是处理数据地大小为1G,如果join 操作也产生了数据倾斜,那么就在hive 中设定
set hive.optimize.skewjoin = true;
set hive.skewjoin.key = skew_key_threshold  #(default = 100000)
2)group by 造成的数据倾斜

解决方式相对简单:

#(默认true) 这个配置项代表是否在map端进行聚合,相当于Combiner
hive.map.aggr=true 
hive.groupby.skewindata
3)count(distinct)或者其他参数不当造成的数据倾斜
① reduce个数太少
set mapred.reduce.tasks=800
② HiveQL中包含count(distinct)时

使用sum…group byl来替代。例如select a,sum(1) from (select a, b from t group by a,b) group by a;文章来源地址https://www.toymoban.com/news/detail-403125.html

到了这里,关于MapReduce数据倾斜产生的原因及其解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【模拟IC】闩锁效应的概念,产生原因,工作过程及解决方案

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 闩锁效应指的是在CMOS工艺制作的芯片中,寄生三极管与寄生体电阻形成的电路,在一定条件下,会导致电源与地之间产生大电流,可能会永久损坏芯片。可以由图一看出,在同时具有NMOS和PMOS管时,P区

    2024年04月12日
    浏览(36)
  • RabbitMq消息丢失原因及其解决方案

    我们首先了解下一条消息从生产到消费的整个流程如下: 生产--MQ Broker -- 消费。所以这三个环节都有丢失消息的可能。 1.1、生产者丢失消息 生产者将数据发送到rabbitmq的时候,可能因为网络问题导致数据就在半路给搞丢了。 1.使用事务(性能差) ​ RabbitMQ 客户端中与事务机

    2024年02月08日
    浏览(45)
  • Android 内存泄漏的常见原因及其对应的解决方案

    Android应用程序中常见的内存泄漏原因有很多,以下是一些常见的原因及对应的解决方案: 1. 静态引用导致的内存泄漏: 静态变量持有对Activity或Fragment的引用,导致它们无法被垃圾回收机制释放。 解决方案: 确保不将Activity或Fragment的实例赋值给静态变量。如果确实需要使用

    2024年02月08日
    浏览(52)
  • 带你了解RabbitMQ:消息丢失、重复、积压的原因及其解决方案

    前言 首先说一点,企业中最常用的实际上既不是RocketMQ,也不是Kafka,而是RabbitMQ。 RocketMQ很强大,但主要是阿里推广自己的云产品而开源出来的一款消息队列,其实中小企业用RocketMQ的没有想象中那么多。 深层次的原因在于兔宝在中小企业普及更早,经受的考验也更久,很容

    2024年02月04日
    浏览(36)
  • Spark数据倾斜解决方案一:源数据预处理和过滤倾斜key

    为什么把源数据预处理和过滤掉倾斜的key两种处理倾斜的方式写到一起? 因为这两种方式在实际的项目中场景较少而且单一,对于数据源预处理,比如原本要在spark中进行聚合或join的操作,提前到hive中去做,这种方式虽然解决了spark中数据倾斜的问题,但是hive中依然也会存

    2024年02月09日
    浏览(42)
  • hive/spark数据倾斜解决方案

    数据倾斜主要表现在,mapreduce程序执行时,reduce节点大部分执行完毕,但是有一个或者几个reduce节点运行很慢,导致整个程序的处理时间很长,这是因为某一个key的条数比其他key多很多(有时是百倍或者千倍之多),这条Key所在的reduce节点所处理的数据量比其他节点就大很多,

    2024年02月11日
    浏览(45)
  • Hive数据倾斜常见场景及解决方案(超全!!!)

    Hive数据倾斜常见问题和解决方案 目录 前言 一、Explain 二、数据倾斜 1.什么是数据倾斜?它的主要表现? 2.产生数据倾斜的常见原因 一.join时:首先是大表关联小表,容易发生数据倾斜 二.join时:空key过多,或者相同key过多 三.join时:不同数据类型关联产生数据倾斜 四.join时

    2024年02月03日
    浏览(44)
  • Kafka数据倾斜到某一个分区解决方案

    我们使用Kafka时,某时需要消息消费是有序的,因此在生产者投递消息时,可能会指定分区,或者指定Key,此时可能会导致数据倾斜到某一个分区。 由于Kafka消费的特性,即一个消费组,那怕此时消费组有2个以上消费者,此时同一个主分区,只能被一个消费者消费,当生产消

    2024年02月13日
    浏览(56)
  • 第十六章 Hive生产环境优化&数据倾斜解决方案

    Hive调优作用:在保证业务结果不变的前提下,降低资源的使用量,减少任务的执行时间。 1、调优须知 (1)对于大数据计算引擎来说:数据量大不是问题, 数据倾斜是个问题。 (2)Hive的复 杂HQL底层会转换成多个MapReduce Job并行或者串行执行 ,Job数比较多的作业运行效 率相

    2024年02月12日
    浏览(41)
  • Mysql与SeaweedFS数据不同步问题产生原因及解决办法

    在数据库和文件存储系统之间保持一致性是数据管理中的一个关键问题。这篇文章将专注于Mysql和SeaweedFS(一种快速、简单和高效的分布式存储系统)之间数据不同步的问题,探讨可能的原因并提出相应的解决策略。 Mysql是最流行的关系型数据库管理系统之一,被广泛应用于

    2024年02月06日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包