郑州网站开发douyanet,对网站建设的考核机制,wordpress 付费内容,软文营销步骤#x1f345; 作者#xff1a;不吃西红柿
#x1f345; 简介#xff1a;CSDN博客专家#x1f3c6;、HDZ核心组成员#x1f4aa;、C站总榜前10名✌ #x1f345; 粉丝专属福利#xff1a;文末公号「信息技术智库」回复「资料」领取 #x1f345; 如觉得文章不错 作者不吃西红柿 简介CSDN博客专家、HDZ核心组成员、C站总榜前10名✌ 粉丝专属福利文末公号「信息技术智库」回复「资料」领取 如觉得文章不错欢迎点赞、收藏、评论 文末下载PDF
拥有本篇PDF意味着你拥有一本完善的书籍本篇文章整理了数据仓库领域几乎所有的知识点文章内容主要来源于以下几个方面
源于「数据仓库交流群」资深数据仓库工程师的交流讨论如《sql行转列的千种写法》。源于群友面试大厂遇到的面试真题整理投稿给我形成《面试题库》。源于笔者在系统学习过程中整理的笔记和一点理解。源于技术网站的优质文章和高赞答案。本篇文章尤其适合初级程序员准备面试以及作为工作中的指导手册对资深程序员来说也可夯实基础。
当然技术学习仅仅依靠一篇文章还是不够的可加入公众号和技术交流群联系方式见文末群里有很多数据仓库领域资深大佬大家经常在群里讨论技术热点问题、互相解决工作难题、安排内推、甚至有部门leader直接发出岗位邀请。「西红柿」也会持续更新优质文章也欢迎热爱学习总结的小伙伴有偿投稿共同推动中国信息技术行业发展让我们一起加油吧 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先将数据随机打散让它的并行度变大再汇聚。数据预处理就是先做一层数据质量处理类似于数据仓库维度建模时底层先处理数据质量。添加公众号「信息技术智库」 硬核资料20G8大类资料关注即可领取PPT模板、简历模板、技术资料 技术互助技术群大佬指点迷津你的问题可能不是问题求资源在群里喊一声。 面试题库由各个技术群小伙伴们共同投稿热乎的大厂面试真题持续更新中。 知识体系含编程语言、算法、大数据生态圈组件Mysql、Hive、Spark、Flink、数据仓库、前端等。 送书抽奖丨技术互助丨粉丝福利