原标题:什么是数据倾斜?如何解决数据倾斜?

导读

相信很多接触MapReduce的朋友对'数据倾斜'这四个字并不陌生,那么究竟什么是数据倾斜?又该怎样解决这种该死的情况呢?

何为数据倾斜?

在弄清什么是数据倾斜之前,我想让大家看看数据分布的概念:

正常的数据分布理论上都是倾斜的,就是我们所说的20-80原理:80%的财富集中在20%的人手中, 80%的用户只使用20%的功能 , 20%的用户贡献了80%的访问量 , 不同的数据字段可能的数据倾斜一般有两种情况:

一种是唯一值非常少,极少数值有非常多的记录值(唯一值少于几千)

一种是唯一值比较多,这个字段的某些值有远远多于其他值的记录数,但是它的占比也小于百分之一或千分之一

数据倾斜:

数据倾斜在MapReduce编程模型中十分常见,用最通俗易懂的话来说,数据倾斜无非就是大量的相同key被partition分配到一个分区里,造成了'一个人累死,其他人闲死'的情况,这种情况是我们不能接受的,这也违背了并行计算的初衷,首先一个节点要承受着巨大的压力,而其他节点计算完毕后要一直等待这个忙碌的节点,也拖累了整体的计算时间,可以说效率是十分低下的。

解决方案:

1.增加jvm内存,这适用于第一种情况(唯一值非常少,极少数值有非常多的记录值(唯一值少于几千)),这种情况下,往往只能通过硬件的手段来进行调优,增加jvm内存可以显著的提高运行效率。

2.增加reduce的个数,这适用于第二种情况(唯一值比较多,这个字段的某些值有远远多于其他值的记录数,但是它的占比也小于百分之一或千分之一),我们知道,这种情况下,最容易造成的结果就是大量相同key被partition到一个分区,从而一个reduce执行了大量的工作,而如果我们增加了reduce的个数,这种情况相对来说会减轻很多,毕竟计算的节点多了,就算工作量还是不均匀的,那也要小很多。

3.自定义分区,这需要用户自己继承partition类,指定分区策略,这种方式效果比较显著。

4.重新设计key,有一种方案是在map阶段时给key加上一个随机数,有了随机数的key就不会被大量的分配到同一节点(小几率),待到reduce后再把随机数去掉即可。

5.使用combinner合并,combinner是在map阶段,reduce之前的一个中间阶段,在这个阶段可以选择性的把大量的相同key数据先进行一个合并,可以看做是local reduce,然后再交给reduce来处理,这样做的好处很多,即减轻了map端向reduce端发送的数据量(减轻了网络带宽),也减轻了map端和reduce端中间的shuffle阶段的数据拉取数量(本地化磁盘IO速率),推荐使用这种方法。

摘自:http://www.shcpda.com/shujuliliang/1166.html返回搜狐,查看更多

责任编辑:

如何解决mysql数据倾斜_什么是数据倾斜?如何解决数据倾斜?相关推荐

  1. 偏移出来的数据不准_关于AD7616采集后读回来数据不准(有偏移)的问题,求解决...

    本帖最后由 linux-0405209 于 2017-6-7 12:31 编辑 (若发的板块不对,请告知修改) 环境: STM32F407   SPI3   AD7616 程序配置如下: // AD7 ...

  2. 易语言mysql 读取数据类型_易语言教程-数据库-读取相关数据

    本课用的命令 读() 取记录号 () 取记录数() 到首记录 () 到尾记录 () 打开() 关闭() 跳过() 跳到() 本课实现功能 读,上一条,下一条,读首记录,读尾记录,读所有记录 教程源码: ...

  3. python构造icmp数据包_如何在python中构造ICMP数据包

    为了学习,我目前正在尝试创建一个简单的python porgram来向某个设备发送ICMP ping数据包.为了开始,我查看了python模块Pyping:https://github.com/Akh ...

  4. python自动化数据报告_如何:使用Python将实时数据自动化到您的网站

    python自动化数据报告 This tutorial will be helpful for people who have a website that hosts live data on a ...

  5. influxdb数据过期_为什么腾讯QQ的大数据平台选择了InfluxDB数据库?

    导读:本文带你了解一个开源的.高性能的时序型数据库--InfluxDB. 作者:韩健 来源:华章科技 00 为什么QQ要选择InfluxDB? 从2016年起,笔者在腾讯公司负责QQ后台的海量服务分布 ...

  6. python爬虫爬网站数据登录_使用webdriver+urllib爬取网页数据(模拟登陆,过验证码)...

    urilib是python的标准库,当我们使用Python爬取网页数据时,往往用的是urllib模块,通过调用urllib模块的urlopen(url)方法返回网页对象,并使用read()方法获得ur ...

  7. 的数据湖_一文读懂云原生数据湖体系

    导读:如何基于阿里云 OSS .JindoFS 和数据湖构建(Data Lake Formation,DLF)等基础服务,同时结合阿里云上丰富的计算引擎,打造一个全新云原生数据湖体系? 作者 | 吴威 ...

  8. modis数据介绍_【更新90篇】地理数据科学技术文章合集,欢迎大家点赞、在看、转发三连!...

    最近因微信公众号修改了规则, 不将公众号标星可能无法及时收到推送, 还请大家把"走天涯徐小洋地理数据科学"加个星标. 公众号技术文章合集目录,目前已整理以下8个部分,共计90篇文章 ...

  9. datax 持续数据同步_采用DataX实现多表增量数据同步

    这两天验证了一下阿里的DataX数据同步工具,觉得DataX可以用来做管理数据的多级数据同步.DataX用来做批量数据迁移很适合,能够保证数据的一致性,性能也很好,结合时间戳字段,用来实现数据定时增量 ...

  10. 对数据仓库进行数据建模_确定是否可以对您的数据进行建模

    对数据仓库进行数据建模 Some data sets are just not meant to have the geospatial representation that can be clus ...

最新文章

  1. 为什么需要使用到多线程
  2. Android7.0适配方案
  3. Binder学习指南
  4. Linux学习之系统编程篇:与信号捕捉有关的函数(signal / sigaction)
  5. 为人处事的一些小句子。
  6. 分布式监控系统开发【day37】:需求讨论(一)
  7. Vue 教程第四篇—— Vue 实例化时基本属性
  8. 信息学奥赛一本通(1223:An Easy Problem)
  9. JsonView插件
  10. leetcode刷题——415. 字符串相加
  11. 这个机器学习论文大众评审网站,要让每篇arXiv论文都得到讨论
  12. python 的列表遍历删除
  13. 智能算法浅介----模拟退火,遗传算法,禁忌搜索,神经网络等
  14. 7.携程架构实践 --- IaaS & PaaS
  15. 英特尔cpu与主板芯片组对应关系(包含12代)
  16. 【Python】SyntaxError: invalid syntax jedi
  17. FCN分割Pascal VOC 2007
  18. 【Matlab三维路径规划】A_star算法机器人栅格地图三维路径规划【含源码 190期】
  19. windows下DxDiag查看笔记本电脑主板型号信息
  20. C语言使用信号量解决生产者消费者模型的同步问题

热门文章

  1. 浅谈linux中的grub
  2. zabbix 接触这段时间的感悟
  3. ie8 不支持 position:fixed 的简单解决办法
  4. 经典算法——单向链表反转
  5. Web前端开发初学者十问集锦(4)
  6. lock和synchronized的区别
  7. oracle数据库数据表误删后,恢复数据处理方式
  8. 栈、队列(链表实现)
  9. anaconda新建环境在PyCharm执行import ssl失败
  10. docker使用阿里云镜像仓库docker