当前位置: 首页 > 编程日记 > 正文

大数据数据倾斜

什么是数据倾斜 
    简单的讲,数据倾斜就是我们在计算数据的时候,数据的分散度不够,导致大量的数据集中到了一台或者几台机器上计算,这些数据的计算速度远远低于平均计算速度,导致整个计算过程过慢。 
    相信大部分做数据的童鞋们都会遇到数据倾斜,数据倾斜会发生在数据开发的各个环节中,比如:

  • 用Hive算数据的时候reduce阶段卡在99.99%
  • 用SparkStreaming做实时算法时候,一直会有executor出现OOM的错误,但是其余的executor内存使用率却很低。 
        数据倾斜有一个关键因素是数据量大,可以达到千亿级。

    数据倾斜长的表现

以Hadoop和Spark是最常见的两个计算平台,下面就以这两个平台说明:

1、Hadoop中的数据倾斜

Hadoop中直接贴近用户使用使用的时Mapreduce程序和Hive程序,虽说Hive最后也是用MR来执行(至少目前Hive内存计算并不普及),但是毕竟写的内容逻辑区别很大,一个是程序,一个是Sql,因此这里稍作区分。

Hadoop中的数据倾斜主要表现在ruduce阶段卡在99.99%,一直99.99%不能结束。 
这里如果详细的看日志或者和监控界面的话会发现:

  • 有一个多几个reduce卡住
  • 各种container报错OOM
  • 读写的数据量极大,至少远远超过其它正常的reduce 
    伴随着数据倾斜,会出现任务被kill等各种诡异的表现。

经验: Hive的数据倾斜,一般都发生在Sql中Group和On上,而且和数据逻辑绑定比较深。

2、Spark中的数据倾斜

Spark中的数据倾斜也很常见,这里包括Spark Streaming和Spark Sql,表现主要有下面几种:

  • Executor lost,OOM,Shuffle过程出错
  • Driver OOM
  • 单个Executor执行时间特别久,整体任务卡在某个阶段不能结束
  • 正常运行的任务突然失败

补充一下,在Spark streaming程序中,数据倾斜更容易出现,特别是在程序中包含一些类似sql的join、group这种操作的时候。 因为Spark Streaming程序在运行的时候,我们一般不会分配特别多的内存,因此一旦在这个过程中出现一些数据倾斜,就十分容易造成OOM。

数据倾斜的原理

1、数据倾斜产生的原因 
        我们以Spark和Hive的使用场景为例。他们在做数据运算的时候会设计到,countdistinct、group by、join等操作,这些都会触发Shuffle动作,一旦触发,所有相同key的值就会拉到一个或几个节点上,就容易发生单点问题。

2、万恶的shuffle 
        Shuffle是一个能产生奇迹的地方,不管是在Spark还是Hadoop中,它们的作用都是至关重要的。那么在Shuffle如何产生了数据倾斜?

Hadoop和Spark在Shuffle过程中产生数据倾斜的原理基本类似。如下图。

这里写图片描述


        大部分数据倾斜的原理就类似于下图,很明了,因为数据分布不均匀,导致大量的数据分配到了一个节点。

3、从业务计角度来理解数据倾斜

数据往往和业务是强相关的,业务的场景直接影响到了数据的分布。再举一个例子,比如就说订单场景吧,我们在某一天在北京和上海两个城市多了强力的推广,结果可能是这两个城市的订单量增长了10000%,其余城市的数据量不变。然后我们要统计不同城市的订单情况,这样,一做group操作,可能直接就数据倾斜了。

如何解决

数据倾斜的产生是有一些讨论的,解决它们也是有一些讨论的,本章会先给出几个解决数据倾斜的思路,然后对Hadoop和Spark分别给出一些解决数据倾斜的方案。 
一、几个思路 
    解决数据倾斜有这几个思路: 
        1.业务逻辑,我们从业务逻辑的层面上来优化数据倾斜,比如上面的例子,我们单独对这两个城市来做count,最后和其它城市做整合。 
        2.程序层面,比如说在Hive中,经常遇到count(distinct)操作,这样会导致最终只有一个reduce,我们可以先group 再在外面包一层count,就可以了。 
        3.调参方面,Hadoop和Spark都自带了很多的参数和机制来调节数据倾斜,合理利用它们就能解决大部分问题。

二、从业务和数据上解决数据倾斜

很多数据倾斜都是在数据的使用上造成的。我们举几个场景,并分别给出它们的解决方案。 
数据分布不均匀: 
前面提到的“从数据角度来理解数据倾斜”和“从业务计角度来理解数据倾斜”中的例子,其实都是数据分布不均匀的类型,这种情况和计算平台无关,我们能通过设计的角度尝试解决它。

  • 有损的方法: 
                找到异常数据,比如ip为0的数据,过滤掉
  • 无损的方法: 
                对分布不均匀的数据,单独计算 
                先对key做一层hash,先将数据打散让它的并行度变大,再汇集 
    •数据预处理

三、Hadoop平台的优化方法

列出来一些方法和思路,具体的参数和用法在官网看就行了。

1.mapjoin方式 
        2.count distinct的操作,先转成group,再count 
        3.hive.groupby.skewindata=true 
        4.left semi jioin的使用 
        5.设置map端输出、中间结果压缩。(不完全是解决数据倾斜的问题,但是减少了IO读写和网络传输,能提高很多效率)

四、Spark平台的优化方法 
    列出来一些方法和思路,具体的参数和用法在官网看就行了。 
        1.mapjoin方式 
        2.设置rdd压缩 
        3.合理设置driver的内存 
        4.Spark Sql中的优化和Hive类似,可以参考Hive

总结

数据倾斜的坑还是很大的,如何处理数据倾斜是一个长期的过程,希望本文的一些思路能提供帮助。文中一些内容没有细讲,比如Hive Sql的优化,数据清洗中的各种坑,这些留待后面单独的分享,会有很多的内容。另外千亿级别的数据还会有更多的难点,不仅仅是数据倾斜的问题,这一点在后面也会有专门的分享。

转载于:https://www.cnblogs.com/gala1021/p/8552302.html

相关文章:

【leetcode75】Intersection of Two Arrays(数组的交集)

题目描述: 给定两个数组求他们的公共部分,输出形式是数组,相同的元素只是输出一次 例如: nums1 [1, 2, 2, 1], nums2 [2, 2], return [2]. 原文描述: Given two arrays, write a function to compute their intersec…

qprocess start怎么判断是否结束_面试结束后,如何判断自己是否有戏?看有无这8大信号!...

关注“职场沉浮宝典”,每天get一个职场小技巧面试结束后,在等待最终结果的过程中,我们常常会惴惴不安,喜欢在脑海里回放全部面试细节,多角度去判断自己通过面试的可能性。毕竟,面试就如同相亲,如…

智能合约语言Solidity 类型介绍

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 智能合约语言Solidity 类型介绍11 Solidity是以太坊智能合约编程语言,阅读本文前,你应该对以太坊、智能合约有所了解&#…

怎样快速学习React

react简单学习路线(实用版) 学习一门新的技术之前有必要了解一下该技术在专业领域的评价,使用的领域,以及整体的学习路线,总之尽可能多的在入坑之前了解相关方面的信息。不要什么都不去查就直接学了,这个是…

Poj_1274 The Perfect Stall -二分图裸题

题目:给牛找棚,每个棚只能容一只牛,牛在对应的棚才能产奶,问最多能让几只牛产奶。 /************************************************ Author :DarkTong Created Time :2016/7/31 10:51:05 File Name :Poj_1274.cpp…

青少年软件编程python考试-青岛全国青少年软件编程等级考试—Python

卓优特机器简介 卓优特机器人是集教育机器人设备研发、生产、销售及课程研发、教育机器人课程教育及竞赛技术服务、机器人实验室方案策划及配置、智能技术支持的高新技术集成服务商, 公司由多所知名大学的多位智能技术专家及教授提供技术指导。 卓优特机器人是集教育机器人设备…

区块链基础--工作量证明

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 区块链基础(6)–工作量证明1 我认为技术和共识构建了区块链,那么就由几个问题需要去解决,第一&…

pat乙级1049

浮点型乘整型和整型乘浮点型结果不同&#xff0c;不知为什么。 1 double sum 0.0; 2 for (int i 0; i < n; i) 3 { 4 cin >> a[i]; 5 sum a[i] * (i 1) * (n - i); 6 } 7 printf("%.2f", sum); 提交结果正确。 1 double sum 0.0; 2 for (int i…

hdu-5778 abs(暴力枚举)

题目链接: abs Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Problem DescriptionGiven a number x, ask positive integer y≥2, that satisfy the following conditions:1. The absolute value of y - x is minimal2. To prime f…

bugku 杂项 就五层你能解开吗_你能解开这个和数字有关的逻辑解谜游戏吗? | 每日一考...

今天是一道和数字有关的逻辑解谜游戏看看你能用多长时间得到答案这道题的目标是&#xff0c;把网格根据数字划分成很多个方形小块。每个数字都代表它所在的小块面积&#xff0c;也就是包含了几个小格子&#xff0c;要求如下图&#xff0c;每个小块里必须有&#xff0c;而且只能…

区块链技术术语表

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 区块链技术包含了常见的区块链基本概念和进阶阅读的参考文章&#xff0c;用自己的思考方式去优化理解。 比特币&#xff1a;一种分布式网络的数字货…

『TensorFlow』数据读取类_data.Dataset

一、资料 参考原文&#xff1a; TensorFlow全新的数据读取方式&#xff1a;Dataset API入门教程 API接口简介&#xff1a; TensorFlow的数据集 二、背景 注意&#xff0c;在TensorFlow 1.3中&#xff0c;Dataset API是放在contrib包中的&#xff1a; tf.contrib.data 而在Tenso…

出入口控制系统工程设计规范_[问答]连载77-控制系统之间如何时钟同步?

仪表小猪在控制系统中&#xff0c;趋势、报警、事件记录等都与时间相关&#xff0c;因此整个系统始终保持一个统一的时钟很关键。如果操作站和控制站时间不同步&#xff0c;操作员站上面显示的事件、趋势等也不能真正的反应出现场实际变化的时间&#xff0c;不能作为真实的历史…

分布式账本(Distributed ledger)

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 是一种在网络成员之间共享、复制和同步的数据库。分布式账本记录网络参与者之间的交易&#xff0c;比如资产或数据的交换。这种共享账本消除了调解不…

手动删除木马程序

1 ??? 2 这个蠢货竟然用360? (360杀毒太流氓&#xff0c;插件不可控&#xff0c;就是第一个要杀的木马) 一些基本的命令往往可以在保护网络安全上起到很大的作用,下面几条命令的作用就非常突出。 一、检测网络连接 如果你怀疑自己的计算机上被别人安装了木马,或者是中…

phpstorm如何同时打开两个文件夹_2分钟学会文件夹共享,化身办公室电脑大神

点击上方蓝色字体&#xff0c;关注我们身在职场或学校的你&#xff0c;还在用微信或QQ给办公室的小伙伴传文件吗&#xff1f;那你可真就out了&#xff0c;总结一下&#xff0c;微信或QQ传文件存在以下3个缺点。1、传输文件大小存在限制微信不能发送100MB以上的文件&#xff0c;…

Hdu_2063 过山车 -最大匹配(邻接表版)

题目&#xff1a;就是最大匹配了 /************************************************ Author :DarkTong Created Time :2016/8/1 12:53:27 File Name :Hdu2063.cpp *************************************************/#include <cstdio> #include <cstr…

“去中心化”为何意义重大?

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 互联网的前两个时代 在互联网的第一个时代–从20世纪80年代到21世纪初–互联网服务建立在由互联网社区控制的开放协议之上。这意味着&#xff0c;人…

一阶微分算子锐化图像_【动手学计算机视觉】第三讲:图像预处理之图像分割...

本讲完整代码>>前言图像分割是一种把图像分成若干个独立子区域的技术和过程。在图像的研究和应用中&#xff0c;很多时候我们关注的仅是图像中的目标或前景(其他部分称为背景)&#xff0c;它们对应图像中特定的、具有独特性质的区域。为了分割目标&#xff0c;需要将这些…

visual studio code 里调试运行 Python代码

最近对微软的visual studio code 挺感兴趣的&#xff0c;微软的跨平台开发工具。轻量简洁。 版本迭代的也挺快的&#xff0c;截止16年8月2日已经1.3.1版本了&#xff0c;功能也愈加完善。&#xff08;16年12月18日 已经&#xff0c;发到1.10.1版本了&#xff0c;更新非常频繁&a…

GridView单元格取值显示为nbsp;

在通过GridView取一个单元格&#xff08;cell&#xff09;的值时&#xff0c;数据库中为NULL&#xff0c;而页面上显示为空格。发现通过gridview.cell[i].text取出来的值为 &#xff0c;导致获取数据出现问题。 解决方法&#xff1a; 一、利用Server.HtmlDecode(string)进行转换…

什么是比特币?

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 比特币就是所谓的“加密货币”&#xff0c;这是一种完全以数据形式存在的数字资产。你存在银行的钱可能也是一堆数字&#xff0c;但这些数字等效于…

C程序设计-----第1次作业

一、 PTA作业。 在完成PTA作业的时候我没有认真读题。每次都是提交完整代码 6-1&#xff08;1&#xff09; 1 #include <stdio.h>2 3 //P等价于&#xff08;p&#xff09;还是等价于*&#xff08;p&#xff09;&#xff1f;4 5 int main(){6 int *p, a 3;7 p…

python画散点图对散点阴影扩充_Python金融应用之图表制作(三)

​NO.602020.04.06工欲善其事&#xff0c;必先利其器//- 前言 - 今天&#xff0c;小咖带大家使用Python制作申万行业PE和ROE的散点图&#xff1f;最终将得到以下效果&#xff1a;

List集合的去除重复性练习

package com.java.b.listdmeo.www; import java.util.ArrayList;import java.util.Iterator; import com.java.Student.www.Student; public class listtest { public static void main(String[] args) { //创建一个集合&#xff0c;该集合为List 集合 ArrayList listnew Arr…

区块链的安全软肋是什么?

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 今天我们来谈谈区块链的安全软肋。 作为比特币中的核心技术&#xff0c;在无法建立信任关系的互联网上&#xff0c;区块链技术依靠密码学和巧妙的分…

web service 项目 和 普通 web项目 的 区别

web service 面向的是开发者&#xff08;需要再次开发&#xff09; 普通web 面向的是用户&#xff08;直接使用&#xff09;转载于:https://www.cnblogs.com/zno2/p/5612024.html

selenium:学习资源

selenium中文版文档 http://www.selenium.org.cn/1203.html selenium 搜索功能&#xff1a; http://blog.csdn.net/qq_878799579/article/details/73321015 selenium 详细教程&#xff1a; http://www.cnblogs.com/yoyoketang/p/6123938.html 转载于:https://www.cnblogs.com/f…

node.js 验证路径有效性_怎样识别光伏谐波路径?试试这个算法

国网吉林省电力有限公司四平供电公司的研究人员韩绍禹、李新辉&#xff0c;在2019年第5期《电气技术》杂志上撰文指出(论文标题为“基于信息熵和节点导纳矩阵的光伏谐波路径初探”)&#xff0c;光伏电站的接入给电网注入一定谐波&#xff0c;同时也增加了电网谐波线损。本文针对…

区块链研发与运营

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 传统行业之所以会存在着每况愈下的情况发生&#xff0c;主要的原因还是在于运营方式的墨守成规&#xff0c;造成消费者缺乏了购买欲望和关注度&am…