如何判断数据倾斜及解决方法、TextFile格式、Parquet格式、Orc格式及其优缺点

数据倾斜的表现
MapReduce:reduce阶段卡住,如一直卡在99.9%,查看日志或监控页面显示:有一个多几个reduce卡住,各种container报错OOM,读写的数据量极大,至少远远超过其它正常的reduce,伴随着数据倾斜,还可以通过任务的counter判断,倾斜的task的counter特别大,输出字符数特别多
Spark:Executor lost,OOM,Shuffle过程出错,Driver OOM,单个Executor执行时间特别久,整体任务卡在某个阶段不能结束

可能造成数据倾斜的几个原因
1.数据的key分化严重不均,某一个key的条数比其他key多很多,这条key所在的reduce节点所处理的数据量比其他节点就大很多,造成一部分数据很多,一部分数据很少的局面
2.配置不合理、业务逻辑不合理
3.group by 维度过小,某值的数过多 后果:处理某值的reduce非常耗时
4.count distinct某特殊值过多 后果:处理此特殊值的reduce耗时,distinct会把所有数据shuffle到一个reducer中,group by 会把数据分布到多台机器上执行
5.join,大表与大表,空值过多,结果空值都到一个reducer中进行处理
6.不同数据类型进行关联产生倾斜,一个ID为int,另一个表中ID有的为int,有的为string,进行join时会按int来hash,导致所有的string类型都分到一个reducer中

数据倾斜的解决方法

解决 group by 造成的数据倾斜
1.hive.map.aggr=true:在map中会做部分聚集操作,效率更高但需要更多的内存
2.hive.groupby.skewindata=true:数据倾斜时负载均衡
3.对count distinct,将值为空的情况单独处理,或使用子查询,先group by ,再count*

解决 join 造成的数据倾斜
1.hive.optimize.skewjoin = true
2.如果有小表参与 join 操作,使用 map join
把特殊值select出来单独做join,不特殊的再一起join,最后结果union
4.谓词下推:尽早进行过滤,减少后续处理的数据量
5.把空值改一个随机数,如111,222(可解决大表join大表时的空key倾斜)

TextFile格式

TextFile是Hive中默认的文件格式,存储形式为按行存储。工作中最常见的数据文件格式就是TextFile文件,几乎所有的原始数据生成都是TextFile格式.
建表时不指定存储格式即为textfile,导入数据时把数据文件拷贝至hdfs不进行处理。
优点 
    1.最简单的数据格式,不需要经过处理,可以直接cat查看
    2.可以使用任意的分隔符进行分割
    3.便于和其他工具(Pig, grep, sed, awk)共享数据
    4.可以搭配Gzip、Bzip2、Snappy等压缩一起使用
缺点 
	1.耗费存储空间,I/O性能较低
	2.结合压缩时Hive不进行数据切分合并,不能进行并行操作,查询效率低
	3.按行存储,读取列的性能差
应用场景
	1.适合于小量数据的存储查询
	2.一般用于做第一层数据加载和测试使用

Parquet格式

Parquet是一种支持嵌套结构的列式存储文件格式.是一种支持嵌套数据模型对的列式存储系统,作为大数据系统中OLAP查询的优化方案,它已经被多种查询引擎原生支持,并且部分高性能引擎将其作为默认的文件存储格式。通过数据编码和压缩,以及映射下推和谓词下推功能,Parquet的性能也较之其它文件格式有所提升。
优点 
	1.更高效的压缩和编码可压缩、可分割,优化磁盘利用率和I/O
	2.可用于多种数据处理框架
缺点
	1.不支持update, insert, delete, ACID
应用场景
	1.适用于字段数非常多,无更新,只取部分列的查询

Orc格式

ORC(OptimizedRC File)文件格式也是一种Hadoop生态圈中的列式存储格式.它并不是一个单纯的列式存储格式,是首先根据行组分割整个表,在每一个行组内进行按列存储。.

优缺点

优点
	1.列式存储,存储效率非常高
	2.可压缩,高效的列存取
	3.查询效率较高,支持索引
	4.支持各种复杂的数据类型
	5.支持矢量化查询
缺点
	1.加载时性能消耗较大
	2.需要通过text文件转化生成
	3.读取全量数据时性能较差
应用场景
	适用于Hive中大型的存储、查询
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值