hive中数据倾斜

数据倾斜通常指hive根据key值hash分发到各个节点,相同的key值会分发到一个执行节点中,由于某些key值对应的数据量比其它key值的数据量大很多,导致某些执行节点的运行时间远大于其它节点,从而导致整个job执行时间较长。
在hive中执行的sql会有map和reduce两个阶段,map阶段的数据倾斜主要为数据从磁盘读入内存时、join,reduce阶段数据倾斜主要有join、group by、count distinct,针对于这些操作有不同的处理方式来避免数据倾斜。
一、map阶段
1.由于map读入数据的文件大小分布不均匀,并且小文件特别多,导致某些map读取并处理的数据特别多
这种情况可通过参数调整防止由于小文件过多导致每个map读取的数据量不均匀,mapred.max.split.size=256000000(每个map可以处理的最大文件大小,可调大该值来减少map数)
二、reduce阶段
1.join
数据表在进行join时有两种情况会出现倾斜:
(1)小表和大表join的倾斜
这种情况,可以直接使用hint(如/ + mapjoin(a) /)将小表全部加载到内存中后顺序扫描大表完成join(mapjoin有使用限制,必须是join中的从表较小时才可用,从表主要指left join中的右表,right join中的左表,小表最大为2GB)
(2)大表和大表join的倾斜
这种情况,需要具体原因具体分析:

  • 由某些特殊值引起的数据倾斜
    参数设置方式:hive.optimize.skewjoin=true; 将造成倾斜的特殊值先不处理直接写入hdfs,然后新启一个mapjoin专门处理特殊值;可以通过参数设置数据量超过多少默认为特殊值,如hive.skewjoin.key=10000,表名超过10000条的key会被认定为特殊值;
    特殊值的处理也可以在sql中进行优化,在sql中将特殊值与非特殊值分别处理,然后再通过union all拼接,但这样会增加IO;
  • 由空值引起的数据倾斜
    将空值的key变为一个字符串加上随机数,也可以借鉴特殊值的sql优化方式;
  • 不同数据类型关联产生的数据倾斜
    如int型的用户id与string类型的用户id进行关联,hive默认会将hash按int类型分配,string类型的数据会全部分配到一个reduce中,此时应将int型转化为string再做关联
    2.group by + count distinct
    当sql中出现这种情况时,需预先对group by的字段进行去重处理,然后再进行count

原文地址:https://blog.51cto.com/abezoo/2379042

时间: 2024-10-09 11:22:55

hive中数据倾斜的相关文章

Hive中数据加载失败:root:supergroup:drwxr-xr-x

Hive中数据加载失败:inode=:root:supergroup:drwxr-xr-x 在执行hive,数据加载的时候,遇到了一个错误,如下图: 在执行程序的过程中,遇到权限问题很正常,背后原理也不是很懂,但是通过修改配置,问题已经解决了. 解决方法:hadoop 的hdfs-site文件中添加以下内容,关闭权限检查 ,然后重启Hadoop集群,即解决了上述问题. <property> <name>dfs.permissions</name>         <

hive大数据倾斜总结

在做Shuffle阶段的优化过程中,遇到了数据倾斜的问题,造成了对一些情况下优化效果不明显.主要是因为在Job完成后的所得到的 Counters是整个Job的总和,优化是基于这些Counters得出的平均值,而由于数据倾斜的原因造成map处理数据量的差异过大,使得这些平均 值能代表的价值降低.Hive的执行是分阶段的,map处理数据量的差异取决于上一个stage的reduce输出,所以如何将数据均匀的分配到各个 reduce中,就是解决数据倾斜的根本所在.规避错误来更好的运行比解决错误更高效.在

Hive学习之路 (十九)Hive的数据倾斜

1.什么是数据倾斜? 由于数据分布不均匀,造成数据大量的集中到一点,造成数据热点 2.Hadoop 框架的特性 A.不怕数据大,怕数据倾斜 B.Jobs 数比较多的作业运行效率相对比较低,如子查询比较多 C. sum,count,max,min 等聚集函数,通常不会有数据倾斜问题 3.主要表现 任务进度长时间维持在 99%或者 100%的附近,查看任务监控页面,发现只有少量 reduce 子任务未完成,因为其处理的数据量和其他的 reduce 差异过大. 单一 reduce 处理的记录数和平均记

kettle连接Hive中数据导入导出(6)

1.hive往外写数据 http://wiki.pentaho.com/display/BAD/Extracting+Data+from+Hive+to+Load+an+RDBMS 连接hive 表输入 1)往excel中写数据 2)往文本文件中写数据 注:这里需要填上hive的表名.字段名,不然会报如下错误: 2016/07/27 15:43:01 - 表输入.0 - ERROR (version 3.2.0, build 1 from 2016-07-07 10.46.10 by xnren

Hive中数据的加载和导出

原文:http://blog.javachen.com/2014/06/09/hive-data-manipulation-language.html 关于 Hive DML 语法,你可以参考 apache 官方文档的说明:Hive Data Manipulation Language. apache的hive版本现在应该是 0.13.0,而我使用的 hadoop 版本是 CDH5.0.1,其对应的 hive 版本是 0.12.0.故只能参考apache官方文档来看 cdh5.0.1 实现了哪些

2.11 Hive中数据导入导出Import和Export使用

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ImportExport 一.Export.Import Export 导出,将Hive表中的数据,导出到外部 Import 导入,将外部数据导入Hive表中 二.Export 1.语法 EXPORT TABLE tablename TO 'export_target_path'; 2.用法 #把emp表导出到hdfs上 hive (default)> EXPORT T

浅析 Hadoop 中的数据倾斜

转自:http://my.oschina.net/leejun2005/blog/100922 最近几次被问到关于数据倾斜的问题,这里找了些资料也结合一些自己的理解. 在并行计算中我们总希望分配的每一个task 都能以差不多的粒度来切分并且完成时间相差不大,但是集群中可能硬件不同,应用的类型不同和切分的数据大小不一致总会导致有部分任务极大的拖慢了整个任务的完成时间,硬件不同就不说了,应用的类型不同其中就比如page rank 或者data mining 里面一些计算,它的每条记录消耗的成本不太一

解决spark中遇到的数据倾斜问题

一. 数据倾斜的现象 多数task执行速度较快,少数task执行时间非常长,或者等待很长时间后提示你内存不足,执行失败. 二. 数据倾斜的原因 常见于各种shuffle操作,例如reduceByKey,groupByKey,join等操作. 数据问题 key本身分布不均匀(包括大量的key为空) key的设置不合理 spark使用问题 shuffle时的并发度不够 计算方式有误 三. 数据倾斜的后果 spark中一个stage的执行时间受限于最后那个执行完的task,因此运行缓慢的任务会拖累整个

大数据数据倾斜

什么是数据倾斜     简单的讲,数据倾斜就是我们在计算数据的时候,数据的分散度不够,导致大量的数据集中到了一台或者几台机器上计算,这些数据的计算速度远远低于平均计算速度,导致整个计算过程过慢.     相信大部分做数据的童鞋们都会遇到数据倾斜,数据倾斜会发生在数据开发的各个环节中,比如: 用Hive算数据的时候reduce阶段卡在99.99% 用SparkStreaming做实时算法时候,一直会有executor出现OOM的错误,但是其余的executor内存使用率却很低.     数据倾斜有