HIVE调优-数据倾斜优化(详细版)

HIVE调优-数据倾斜优化

目录

HIVE调优-数据倾斜优化

1.排序优化

1)order by 

2)distribute by + sort by 

3)cluster by语句:

2.数据倾斜优化

1)原因:

2)表现:

3)创建表格(查看一下具体效果)

4) 如果想展示数据倾斜效果:

5) 解决方法:



1.排序优化


1)order by 


                全局排序操作, 只有一个Reduce任务去对数据进行排序,会造成全部的数据堆积在一个Reduce任务中进行处理
                    经常会出现OOM异常? 一个Reduce任务的内存是有限的,承载不了太多数据

2)distribute by + sort by 


                distribute by:是指我们的分区操作
                sort by: 跟上distribute by 之后可以实现在分区内进行排序,
                如果当前的Reduce数量为1,那么也没有优化的效果,可以通过设置reduce的数量对不同分区中的数据进行拆分排序
                 通过 set mapreduce.job.reduces = N; 设置Reduce数量,默认参数值为-1 即根据资源及查询语句情况进行分配reduce,

3)cluster by语句:


                如果分区字段和排序字段是同一个字段,那么和 distribute by + sort by 效果一致

2.数据倾斜优化


1)原因:


                1.Key分布不均,导致某一些Key在做Reduce端处理时,执行较慢
                2.数据重复,在关联时,会产生笛卡尔积,致使数据膨胀,严重的可能会导致集群挂掉 
            

2)表现:


                任务进度长时间维持在99%(或100%),
                查看任务监控页面,发现只有少量(1个或几个)reduce子任务未完成。因为其处理的数据量和其他reduce差异过大
 

3)创建表格(查看一下具体效果)

1.创建带有部分NULL的学生表和成绩表

1.创建带有部分NULL的学生表和成绩表DROP TABLE learn4.student_null;
CREATE EXTERNAL TABLE IF NOT EXISTS learn4.student_null(
id STRING COMMENT "学生ID",
name STRING COMMENT "学生姓名",
age int COMMENT "年龄",
gender STRING COMMENT "性别",
clazz STRING COMMENT "班级"
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ",";load data local inpath "/usr/local/soft/hive-3.1.2/data/student_null.txt" INTO TABLE learn4.student_null;DROP TABLE learn4.score_null;
CREATE EXTERNAL TABLE IF NOT EXISTS learn4.score_null(
id STRING COMMENT "学生ID",
subject_id STRING COMMENT "科目ID",
score int COMMENT "成绩"
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ",";load data local inpath "/usr/local/soft/hive-3.1.2/data/score_null.txt" INTO TABLE learn4.score_null;select * from learn4.student_null limit 10;
select * from learn4.score_null limit 10;

2.大空表与小空表进行关联
 

设置reduces =5set mapreduce.job.reduces = 5;

SELECT
T1.id
,count(*) as num
FROM learn4.student_null T1 JOIN learn4.score_null T2 ON T1.id = T2.id 
GROUP BY T1.id;

我们打开master:8088  找到我们刚刚执行的命令 点击history 发现是打不开的

所以我们需要去配置一下日志文件

配置文件
vim mapred-site.xml <property><name>mapreduce.jobhistory.done-dir</name><value>${yarn.app.mapreduce.am.staging-dir}/done</value>
</property><property><name>mapreduce.jobhistory.intermediate-done-dir</name><value>${yarn.app.mapreduce.am.staging-dir}/done_intermediate</value>
</property><property><name>yarn.app.mapreduce.am.staging-dir</name><value>/hadoop/yarn/historylog</value>
</property>hdfs dfs -mkdir -p /hadoop/yarn/historylog# 启动历史服务
mr-jobhistory-daemon.sh start historyserver

4) 如果想展示数据倾斜效果:


    1.保证两张表的数据相差不大
    2.可以关闭MapJOIN优化,防止执行MapJOIN流程

--查看具体的偏差的结果可以去 Reduce Tasks for job 历史中查看
-- 可以得到结论:数据倾斜之后 部分Reduce的执行时间明显比其他Reduce任务要长
 


5) 解决方法:


1.对会产生笛卡尔积的数据进行初步过滤

SELECT
T1.id
,count(*) as num
FROM learn4.student_null T1 JOIN learn4.score_null T2 ON T1.id = T2.id  
AND (T1.id != "null_student" or T2.id != "null_student")
GROUP BY T1.id;


2.可以对Key比较集中的数据进行加随机数,然后再进行处理

SELECT
T1.id
,count(*) as num
FROM learn4.student_null T1 JOIN learn4.score_null T2 ON concat(T1.id,floor((rand()*10)%5)) = concat(T2.id,floor((rand()*10)%5)) 
GROUP BY T1.id;SELECT
substring(T.id,1,-1) as id
,sum(T.num) --对打散的ID统计过的结果进行汇总
FROM (
SELECT
T1.id 
,count(*) as num    --对打散的ID进行统计
FROM (
SELECT
concat(T1.id,floor((rand()*10)%5)) as id  --将T1表中的数据进行打散
FROM learn4.student_null) T1
JOIN 
(
SELECT
concat(T1.id,floor((rand()*10)%5)) as id  --将T2表中的数据进行打散
FROM learn4.score_null) T2 ON T1.id =T2.id
)T GROUP BY substring(T.id,1,-1);

3.通过参数进行调整


设置开启Map端的聚合操作

set hive.map.aggr = true

设置groupby的检查点条数

set hive.groupby.mapaggr.checkinterval = 100000


开启GROUP BY 的负载均衡操作

set hive.groupby.skewindata = true 

通过调整该参数,使得有倾斜的数据在Map reduce过程中 被随机的从Map端发送到Reduce端进行处理,

reduce会对随机发送过来的数据进行 初步的处理,之后再进行后续的统计

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/11730.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

css中用于设置光标颜色的属性

caret-color 是一个 CSS 属性&#xff0c;它用于定义输入光标&#xff08;caret&#xff09;的颜色。这里的“插入光标”&#xff08;insertion caret&#xff09;指的是在网页的可编辑器区域内&#xff0c;用来指示用户的输入具体会插入到哪里的那个一闪一闪的形似竖杠 | 的东…

[嵌入式系统-77]:RT-Thread-快速上手:嵌入式系统调测工具大全

目录 1. JTAG 下载调试器&#xff1a; 2. J-Link 仿真器&#xff1a; 3. ICE&#xff08;In-Circuit Emulator&#xff09;&#xff1a; 4. ROM监视器&#xff08;ROM Monitor&#xff09;&#xff1a; 5. 终端仿真工具&#xff1a; 6. 总线抓取工具&#xff1a; 7. 静态…

​​​​【收录 Hello 算法】5.2 队列

目录 5.2 队列 5.2.1 队列常用操作 5.2.2 队列实现 1. 基于链表的实现 2. 基于数组的实现 5.2.3 队列典型应用 5.2 队列 队列&#xff08;queue&#xff09;是一种遵循先入先出规则的线性数据结构。顾名思义&#xff0c;队列模拟了排队现象&#xff0c;即…

Django模型进阶

一.配置MySQL 1.安装mysql 2.mysql驱动 使用mysqlclient pip install mysqlclient 如果上面的命令安装失败&#xff0c;则尝试使用国内豆瓣源安装: pip install -i https://pypi.douban.com/simple mysglclien (Linux Ubuntu下需要先安装:apt install lib…

[C语言知识]return和exit到底有什么区别?

前言 &#x1f496;&#x1f496;&#x1f496;欢迎来到我的博客&#xff0c;我是anmory&#x1f496;&#x1f496;&#x1f496; 又和大家见面了 欢迎来到C语言知识系列 用通俗易懂的语言让编程语言不再困难 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读 如何低成本搭…

Spring @Repository 注解

Spring 的项目严重依赖注解。 Repository 注解 在Spring2.0之前的版本中&#xff0c;Repository注解可以标记在任何的类上&#xff0c;用来表明该类是用来执行与数据库相关的操作(即dao对象)&#xff0c;并支持自动处理数据库操作产生的异常 在Spring2.5版本中&#xff0c;引…

Today At Apple 2024.04.20 ipad 绘画 图片管理

文章目录 recreate 软件 绘画图片管理 官网&#xff1a; https://www.apple.com/today/Apple 亚洲第一大商店&#xff1a;Apple 静安零售店现已在上海开幕如下预约课程&#xff1a;下载 Apple Store&#xff08;不是app store&#xff09;&#xff0c;点击课程预约笔记&#xf…

GEVernova推出GEV新能源平台,引领新能源未来

近日&#xff0c;全球领先的能源设备制造和服务公司 GE Vernova 宣布推出 GEV 新能源平台&#xff0c;这是一个将金融、科技和产业深度融合的全新投资平台。GEV 新能源平台旨在为用户提供一站式可持续新能源投资解决方案&#xff0c;助力全球新能源转型和可持续发展。 新能源已…

基于MetaGPT的智能体理论与实践-Task01

Task01: MetaGPT环境配置 学习教程&#xff1a;https://github.com/datawhalechina/hugging-multi-agent 1 环境准备 1.1 安装python3.9 通过&#xff1a;python3 --version, 查看此python版本为3.10.3 1.2 下载MetaGPT 开始&#xff0c;借用清华镜像&#xff0c;拉取…

acw165. 小猫爬山-DFS剪枝与优化

题目 思路 暴搜顺序&#xff1a;从前往后依次枚举每只小猫&#xff0c;枚举当前这只小猫应该放在哪一辆车上&#xff0c;递归完n层之后&#xff0c;就可以知道所有方案中的最少车辆总数剪枝的情况&#xff1a; 优化搜索顺序&#xff1a;大部分情况下&#xff0c;应该优先搜索分…

交易复盘-20240513

仅用于记录当天的市场情况,用于统计交易策略的适用情况,以便程序回测 短线核心:不参与任何级别的调整,采用龙空龙模式 一支股票 10%的时候可以操作, 90%的时间适合空仓等待 双成药业 (1)|[9:30]|[3566万]|0.34 中通客车 (1)|[9:43]|[7678万]|0.15 嘉华股份 (2)|[9:30]|[36…

李飞飞团队关于2024年人工智能发展报告总结 (Artificial Intelligence Index Report)

目录 1 10大核心信息2 AI研究和发展2.1 核心要点2.2 核心对比信息2.3 模型是否会用尽数据2.4 基础模型发展2.5 训练模型成本 3 技术性能3.1 核心要点3.2 重要模型发布情况3.3 AI表现情况3.4 多学科、高难度评估集 (MMMU & GPQA & ARC)3.5 Agents3.6 RLHF & RLAIF3.…

山西教育杂志山西教育杂志社山西教育编辑部2024年第4期目录

课题研究 小学语文随堂小练笔策略研究 陈立固; 3-4 儿童戏剧工作坊载体下小学语文戏剧课堂的建构 郭黎明; 5-6《山西教育》投稿&#xff1a;cn7kantougao163.com 文化生态视域下小学英语教学的传统文化融入 周慧娟; 7-8 基于“主题语境”的初中英语课堂教学研究…

公式识别软件免费的有哪些?简单好用的有三款

公式识别软件免费的有哪些&#xff1f;在数字化时代&#xff0c;公式识别软件已经成为科研、教育等领域不可或缺的工具。这些软件能够准确地将图像中的公式转化为可编辑的文本格式&#xff0c;极大地提高了工作效率。为了帮助大家轻松应对公式识别的挑战&#xff0c;今天本文就…

想要成为项目经理?先掌握这24条职场生存法则!

以下是项目经理的24条职场经验&#xff0c;这些经验涵盖了项目管理的各个方面&#xff0c;希望能对项目经理或有意成为项目经理的人有所启发。 1、明确目标&#xff1a;项目成功的关键在于明确的目标。在项目启动之初&#xff0c;确保所有利益相关者对项目目标有清晰、共同的…

绘制一个单级放大电路原理图过程,保姆级教程

新手在学习pads的使用最好最快的方法就是实际上手去画原理图&#xff0c;画PCB图&#xff0c;在这个过程中&#xff0c;就能够更快速得掌握PADS软件的使用。 本篇就是对于实际画原理图过程的一个记录&#xff0c;手把手教学&#xff0c;如果有纰漏或者有更好的一些技巧&#xf…

【联合索引】最左匹配原则是什么?

什么是联合索引 联合索引&#xff08;Composite Index&#xff09;是一种索引类型&#xff0c;它由多个列组成。 MySQL的联合索引&#xff08;也称为复合索引&#xff09;是建立在多个字段上的索引。这种索引类型允许数据库在查询时同时考虑多个列的值&#xff0c;从而提高查询…

怎么下载抖音直播视频 怎么解析直播间链接的视频录制保存

尊敬的读者们&#xff0c;你们好&#xff01;今天我们将探讨一个非常实用的技巧——如何下载直播视频。随着网络技术的发展&#xff0c;直播视频已经成为我们日常生活中不可或缺的一部分。无论是观看比赛、欣赏音乐会还是探索新的美食&#xff0c;直播视频都为我们提供了更直观…

嵌入式数据库概念和基本命令的使用

文章目录 前言一、sqlite数据库概念二、sqlite数据库命令分类和使用1.命令分类1. 系统命令&#xff1a;2. SQLite 命令&#xff1a; 2.系统命令的使用3.sqlite命令的使用 三、sqlite C语言函数的使用和编程方法总结 前言 本篇文章将为大家讲解嵌入式数据库的使用&#xff0c;嵌…

非常简单的长期兼职,无脑复制粘贴,每天稳定200-300+

带货这个概念已经不再陌生&#xff0c;许多人对此产生了浓厚的兴趣。今天&#xff0c;我将向大家介绍一个百家号带货项目&#xff0c;这是我一位朋友正在操作的项目。最近与他交流后&#xff0c;我觉得这个项目具有相当的操作性。他并非只运营了一个账号&#xff0c;而是同时管…