zoukankan      html  css  js  c++  java
  • 深入理解hadoop数据倾斜

    深入理解hadoop之数据倾斜


     1、什么是数据倾斜

      我们在用map /reduce程序执行时,有时候会发现reduce节点大部分执行完毕,但是有一个或者几个reduce节点运行很慢,导致整个程序的处理时间很长,这是因为某一个key的条数比其他key多很多(有时是百倍或者千倍之多),这条key所在的reduce节点所处理的数据量比其他节点就大很多,从而导致某几个节点迟迟运行不完。这种现象就是因为key分布不均匀、散度不够导致的,也就是我们所说的数据倾斜。


    2、数据倾斜产生的原因

      在hive上执行join,group by,count distinct等操作的时候可能会发现ruduce阶段卡在99.99%,一直99.99%不能结束,查看任务监控页面,发现只有少量(1个或几个)reduce子任务未完成;这里进一步查看进程日志或者WEBUI会发现:有一个多几个reduce卡住;各种container报错OOM,读写的数据量极大,至少远远超过其它正常的reduce ,伴随着数据倾斜,会出现任务被kill等各种诡异的表现。一般情况下Hive的数据倾斜,都发生在Sql中Group和On上,而且和数据逻辑绑定比较深。


    3、数据倾斜解决的办法

      1)hive.groupby.skewindata变量,这个变量是用于控制负载均衡的。当数据出现倾斜时,如果该变量设置为true,那么Hive会自动进行负载均衡。

      2)mapjoin方式 
            3)count distinct的操作,先转成group,再count 
            4)hive.groupby.skewindata=true 
            5)left semi jioin的使用 
            6)设置map端输出、中间结果压缩

  • 相关阅读:
    NSRunLoop 详解
    Delphi经验总结(2)
    Delphi经验总结(3)
    卸载Windows服务
    Windows 8操作技巧之快捷键大全
    delphi 换行操作 Word
    现在, Delphi 的多线程已经非常易用了!
    XP 之后, Delphi 动注册表不方便了...逼出来一个办法:
    写了一个字符串的二维表: TSta
    现在使用控件, 更喜欢继承
  • 原文地址:https://www.cnblogs.com/bigdata-stone/p/9309153.html
Copyright © 2011-2022 走看看