热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mapred任务性能优化本质上就是和shuffle搏斗hivehadoopspark

hive中解决数据倾斜的思路1.由key为null值造成的倾斜,将空置变成字符串加随机数2.由groupby造成的倾斜,map端聚合sethive

hive中解决数据倾斜的思路

1.由key为null值造成的倾斜,将空置变成字符串加随机数

2.由group by造成的倾斜,map端聚合

set hive.groupby.skewindata=true;

hive.groupby.mapaggr.checkinterval = 100000 (默认)

hive.map.aggr.hash.min.reduction=0.5(默认)

3.控制reduce节点上的数据规模

set hive.optimize.skewjoin = true;  — 优化歪斜:true

set hive.skewjoin.key = skew_key_threshold (default = 100000)— 歪斜键阈值,数据行数

行数超过阈值的reduce节点上就不再接收新数据,map端发送到其他reduce节点上去

下面是设置单个reduce节点上最大数据规模,也可以设置reduce节点个数,根本目的和上面是一样的,不要让单台reduce上有太多数据

set hive.exec.reducers.bytes.per.reducer = 1000000000(10的9次方字节是1G)— 字节数.单个.reducer

set mapred.reduce.tasks=800;

从这么长时间学习hadoop spark hive来看,性能调优问题的思路都一样

本质上就是和shuffle搏斗,以及解决数据倾斜问题(shuffle涉及到io和网络传输)

都是在reduceByKey或者hive中group by中造成的

解决的思路主要是下面几点:

1.减少shuffle次数

用broadcast+filter或者hive中的mapjoin来代替两个大表直接join

2.减小shuffle数据规模

比如使用reduceByKey代替groupByKey,先在map端聚合一次减小数据规模

比如在join和union之前先去重

比如在reduceByKey之前先用filter把rdd的规模过滤到最小

3.解决数据倾斜问题

map端是各个节点处理自己节点上的数据,不涉及数据倾斜

主要是由于key的集中分布导致过多的局部key被发送到个别的reduce节点上,导致个别节点上的reduceByKey极慢,大家都在等着他

表现也很明显,很多reduce节点都完成了,就他一个完不了

hive上数据倾斜解决思路

首先明确涉及到reduce算子的地方才会有shuflle,才会有数据倾斜,对应的hive算子就是group by/sort by/distinct

下面就是个总体思路,具体的参数调节都在上面写了

(1)map端进行combine

(2)设置单个reduce上的最大数据规模,或者增大reduce任务个数

spark上解决数据倾斜思路

第一种思路

1.先在key上添加随机数,注意这个随机数是介于0-task个数之间的随机整数,不是真的一个32位随机数,那样会导致每个key都成唯一的了,reduceByKey就没有意义了

2.汇总

3.去掉随机数继续汇总

第二种思路

使用自定义partitioner

第三种思路

在map端combine,先合并一次减少数据量

第四种思路

reduceByKey之前进行手动重分区


推荐阅读
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • HashMap的相关问题及其底层数据结构和操作流程
    本文介绍了关于HashMap的相关问题,包括其底层数据结构、JDK1.7和JDK1.8的差异、红黑树的使用、扩容和树化的条件、退化为链表的情况、索引的计算方法、hashcode和hash()方法的作用、数组容量的选择、Put方法的流程以及并发问题下的操作。文章还提到了扩容死链和数据错乱的问题,并探讨了key的设计要求。对于对Java面试中的HashMap问题感兴趣的读者,本文将为您提供一些有用的技术和经验。 ... [详细]
  • 基于分布式锁的防止重复请求解决方案
    一、前言关于重复请求,指的是我们服务端接收到很短的时间内的多个相同内容的重复请求。而这样的重复请求如果是幂等的(每次请求的结果都相同,如查 ... [详细]
  • 你知道Kafka和Redis的各自优缺点吗?一文带你优化选择,不走弯路 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • 从相邻元素对还原数组的解题思路和代码
    本文介绍了从相邻元素对还原数组的解题思路和代码。思路是使用HashMap存放邻接关系,并找出起始点,然后依次取。代码使用了HashMap来存放起始点所在的adjacentPairs中的位置,并对重复的起始点进行处理。 ... [详细]
  • HashMap的扩容知识详解
    本文详细介绍了HashMap的扩容知识,包括扩容的概述、扩容条件以及1.7版本中的扩容方法。通过学习本文,读者可以全面了解HashMap的扩容机制,提升对HashMap的理解和应用能力。 ... [详细]
  • Opencv提供了几种分类器,例程里通过字符识别来进行说明的1、支持向量机(SVM):给定训练样本,支持向量机建立一个超平面作为决策平面,使得正例和反例之间的隔离边缘被最大化。函数原型:训练原型cv ... [详细]
  • 1关于字符串相邻的两个或多个字符串字面值(引号引起来的字符)将会自动连接到一起:str_catpython!str_cat输出:python!把很长 ... [详细]
author-avatar
手机用户2602922857
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有