邯郸市建设局网站2017,内蒙古网站开发公司,企业网站产品分类多怎么做seo,网站广告的优势1、数据倾斜表现
1.1 hadoop中的数据倾斜表现
有一个多几个Reduce卡住#xff0c;卡在99.99%#xff0c;一直不能结束。各种container报错OOM异常的Reducer读写的数据量极大#xff0c;至少远远超过其它正常的Reducer伴随着数据倾斜#xff0c;会出现任务被kill等各种诡异… 1、数据倾斜表现
1.1 hadoop中的数据倾斜表现
有一个多几个Reduce卡住卡在99.99%一直不能结束。各种container报错OOM异常的Reducer读写的数据量极大至少远远超过其它正常的Reducer伴随着数据倾斜会出现任务被kill等各种诡异的表现。 1.2 hive中数据倾斜
一般都发生在Sql中group by和join on上而且和数据逻辑绑定比较深。 1.3 Spark中的数据倾斜
Spark中的数据倾斜包括Spark Streaming和Spark Sql表现主要有下面几种
Executor lostOOMShuffle过程出错Driver OOM单个Executor执行时间特别久整体任务卡在某个阶段不能结束正常运行的任务突然失败 2、数据倾斜产生原因
我们以Spark和Hive的使用场景为例。 在做数据运算的时候会涉及到count distinct、group by、join on等操作这些都会触发Shuffle动作。一旦触发Shuffle所有相同key的值就会被拉到一个或几个Reducer节点上容易发生单点计算问题导致数据倾斜。 一般来说数据倾斜原因有以下几方面
1key分布不均匀 2建表时考虑不周
举一个例子就说数据默认值的设计吧假设我们有两张表 user用户信息表useridregister_ip ipIP表ipregister_user_cnt 这可能是两个不同的人开发的数据表。如果我们的数据规范不太完善的话会出现一种情况
user表中的register_ip字段如果获取不到这个信息我们默认为null
但是在ip表中我们在统计这个值的时候为了方便我们把获取不到ip的用户统一认为他们的ip为0。 两边其实都没有错的但是一旦我们做关联了这个任务会在做关联的阶段也就是sql的on的阶段卡死。 3业务数据激增
比如订单场景我们在某一天在北京和上海两个城市多了强力的推广结果可能是这两个城市的订单量增长了10000%其余城市的数据量不变。 然后我们要统计不同城市的订单情况这样一做group操作可能直接就数据倾斜了。 3、解决数据倾斜思路
很多数据倾斜的问题都可以用和平台无关的方式解决比如更好的数据预处理异常值的过滤等。因此解决数据倾斜的重点在于对数据设计和业务的理解这两个搞清楚了数据倾斜就解决了大部分了。 1业务逻辑
我们从业务逻辑的层面上来优化数据倾斜比如上面的两个城市做推广活动导致那两个城市数据量激增的例子我们可以单独对这两个城市来做count单独做时可用两次MR第一次打散计算第二次再最终聚合计算。完成后和其它城市做整合。 2程序层面
比如说在Hive中经常遇到count(distinct)操作这样会导致最终只有一个Reduce任务。
我们可以先group by再在外面包一层count就可以了。比如计算按用户名去重后的总用户量 1优化前
只有一个reduce先去重再count负担比较大
select name,count(distinct name)from user; 2优化后
// 设置该任务的每个job的reducer个数为3个。Hive默认-1自动推断。
set mapred.reduce.tasks3;
// 启动两个job一个负责子查询(可以有多个reduce)另一个负责count(1)
select count(1) from (select name from user group by name) tmp; 3调参方面
Hadoop和Spark都自带了很多的参数和机制来调节数据倾斜合理利用它们就能解决大部分问题。 4从业务和数据上解决数据倾斜
很多数据倾斜都是在数据的使用上造成的。我们举几个场景并分别给出它们的解决方案。 一个原则尽早过滤每个阶段的数据量。 数据有损的方法找到异常数据比如ip为0的数据过滤掉。数据无损的方法对分布不均匀的数据单独计算。hash法先对key做一层hash先将数据随机打散让它的并行度变大再汇聚。数据预处理就是先做一层数据质量处理类似于数据仓库维度建模时底层先处理数据质量。