您现在的位置是:首页 >技术教程 >Spark数据倾斜解决方案一:源数据预处理和过滤倾斜key网站首页技术教程
Spark数据倾斜解决方案一:源数据预处理和过滤倾斜key
简介Spark数据倾斜解决方案一:源数据预处理和过滤倾斜key
前言
为什么把源数据预处理和过滤掉倾斜的key两种处理倾斜的方式写到一起?
因为这两种方式在实际的项目中场景较少而且单一,对于数据源预处理,比如原本要在spark中进行聚合或join的操作,提前到hive中去做,这种方式虽然解决了spark中数据倾斜的问题,但是hive中依然也会存在;而过滤倾斜的key的场景就更加少了。
不过虽然少见,也需要有这样的解决问题思维。
使用Hive ETL预处理数据
- 适用场景
导致数据倾斜的是Hive表。如果该Hive表中的数据本身很不均匀(比如某个key对应了100万数据,其他key才对应了10条数据),而且业务场景需要频繁使用Spark对Hive表执行某个分析操作,那么比较适合使用这种技术方案。 - 实现思路
此时可以评估一下,是否可以通过Hive来进行数据预处理(即通过Hive ETL预先对数据按照key进行聚合,或者是预先和其他表进行join),然后在Spark作业中针对的数据源就不是原来的Hive表了,而是预处理后的Hive表。此时由于数据已经预先进行过聚合或join操作了,那么在Spark作业中也就不需要使用原先的shuffle类算子执行这类操作了。 - 实现原理
这种方案从根源上解决了数据倾斜,因为彻底避免了在Spark中执行shuffle类算子,那么肯定就不会有数据倾斜的问题了。但是这里也要提醒一下大家,这种方式属于治标不治本。因为毕竟数据本身就存在分布不均匀的问题,所以Hive ETL中进行gr
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。