【大数据之Hive】二十四、HQL语法优化之任务并行度

news2024/10/6 22:33:42

1 优化说明

  Hive的计算任务由MapReduce完成,并行度调整分为Map端和Reduce端。

1.1 Map端并行度

  Map端的并行度及Map的个数,由输入文件的切片数决定,一般情况下Map端并行度不需要手动调整。
  在特殊情况下(查询的表中存在大量小文件、map端有复杂的查询逻辑)可以考虑手动调整。
1、查询的表中存在大量小文件
  Hadoop默认切片策略,一个小文件会单独启动一个map task负责计算。如果查询表中存在大量小文件,会启动大量map task,造成资源浪费。
解决:
  使用HIve提供的CombineHiveInputFormat,把多个小文件合并为一个切片,控制map task个数。
相关参数:

set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

2、map端有复杂的查询逻辑
  当SQL语句中有正则替换、json解析等复杂耗时的查询逻辑时,map端的计算会相对慢一些。
解决:
  在计算资源充足的情况下,可考虑增大map端的并行度,令map task多一些,每个map task计算的数据少一些。
相关参数:

--一个切片的最大值
set mapreduce.input.fileinputformat.split.maxsize=256000000;

1.2 Reduce端并行度

  Reduce端的并行度即Reduce个数可由用户自己决定,也可由Hive自行根据MR Job输入的文件大小估算。
相关参数:

--指定Reduce端并行度,默认值为-1,表示用户未指定
set mapreduce.job.reduces;

--Reduce端并行度最大值
set hive.exec.reducers.max;

--单个Reduce Task计算的数据量,用于估算Reduce并行度
set hive.exec.reducers.bytes.per.reducer;

Reduce端并行度的确定逻辑如下:
  若指定参数mapreduce.job.reduces的值为一个非负整数,则Reduce并行度为指定值。否则,Hive自行估算Reduce并行度,估算逻辑如下:
  (1)假设Job输入的文件大小为totalInputBytes;
  (2)参数hive.exec.reducers.bytes.per.reducer的值为bytesPerReducer;
  (3)参数hive.exec.reducers.max的值为maxReducers;
  则Reduce端的并行度为:
在这里插入图片描述
  Hive自行估算Reduce并行度时,是以整个MR Job输入的文件大小作为依据的。因此,在某些情况下其估计的并行度很可能并不准确,此时就需要用户根据实际情况来指定Reduce并行度了。

2 案例

1、示例SQL语句

select
    province_id,
    count(*)
fromorder_detail
groupby province_id;

2、优化前
在不指定Reduce并行度时,Hive自行估算并行度的逻辑如下:

totalInputBytes=1136009934
bytesPerReducer=256000000
maxReducers=1009

Reduce并行度为:
在这里插入图片描述
3、优化思路
  在默认情况下,是会进行map-side聚合的,也就是Reduce端接收的数据,实际上是map端完成聚合之后的结果。
  观察yarn中任务的执行过程,会发现,每个map端输出的数据只有34条记录,共有5个map task。也就是说Reduce端实际只会接收170(34*5)条记录,故理论上Reduce端并行度设置为1就足够了。这种情况下,用户可通过以下参数,自行设置Reduce端并行度为1。
在这里插入图片描述

--指定Reduce端并行度,默认值为-1,表示用户未指定
set mapreduce.job.reduces=1;

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

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

相关文章

大数据学习03-Hive分布式集群部部署

系统环境:centos7 软件版本:jdk1.8、zookeeper3.4.8、hadoop2.8.5、hive1.1.0 一、下载安装 下载hive安装包,上传到linux服务器上, 解压安装包 tar -zxvf apache-hive-1.1.0-bin.tar.gz -C /home/local/重命名文件 mv apache-…

手机VPN的连接方法分享

1、首先在手机屏幕左右的滑动,找到手机的设置图标。 2、在打开的小米手机设置页面中点击“更多连接方式”的菜单项。 3、然后在打开的更多连接方式页面中点击VPN的菜单项。 4、在打开的VPN设置页面中点击“添加VPN”的按钮。 5、在打开的添加VPN的页面中输入VPN的信息后点击右…

Element-UI 实现动态增加多个不同类型的输入框并校验(双重v-for表单验证)

文章目录 前言定义表单格式表单渲染和验证扩展 前言 在做复杂的动态表单,实现业务动态变动,比如有一条需要动态添加的el-form-item中包含了多个输入框,并实现表单验证,但在element-ui组件库中给出的表单校验中没有这样的格式&…

简析三相电能预付费控制系统的设计与产品选型

摘要:介绍了一种电能预付费系统,主要用于三相动力用户。采用预付费控制器终端和电能表分离的方式,从原有电表读取相关数据用于比较,在尽量少改动原有接线的情况下安装预付费控制系统。采用安全性和稳定性高的RFID卡,数…

真正的理解WPF中的TemplatedParent

童鞋们在WPF中经常看到 TemplatedParent ,或者经常看到下面的用法: {Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content} 是不是看的一脸蒙圈? 先看官方文档: 意思是 和这个控件的 模板上的 父亲,如果这个控件不是模板创建的,那么这个值就…

Servlet 会话跟踪基础

文章目录 前言Cookie实例Cookie缺点Cookie案例代码 SessionSession的创建与销毁Session的创建Session的销毁 Session和Cookie的区别不同联系 前言 提示:这里可以添加本文要记录的大概内容: 在Web应用程序中,会话跟踪是一种技术,…

vue+element-ui通用后台管理系统(适合新手)

vueelement-ui通用后台管理系统(适合新手) 1、使用到的技术 使用vue2element-uiaxiosjs-cookielessecharts实现的一个简易的通用后台管理系统,具有很强的可扩展性,修改简单,只要有点前端基础就能看懂; 2…

汇编 -20230718

一. 练习: 1. 1-100的和 .text .globl _start_start:mov r0, #0 存放结果mov r1, #0 存放当前数mov r2, #100 结束条件的数addFun:add r1, r1, #1add r0, r0, r1cmp r1, r2bne addFunstop:b stop.end结果展示:

将DAST集成到CI/CD管道中的优势和实施步骤

在当今快速发展的网络环境中,维护Web应用程序的安全更加必要。由于漏洞的出现速度比以往任何时候都要快,将动态应用程序安全测试(DAST)集成到持续集成/持续部署(CI/CD)管道中成为改变游戏规则的因素&#x…

uni-app:单位像素rpx

rpx:响应式单位,长宽可以随着屏幕大小改变,其尺寸根据iPhone 6的标准来参考(750rpx为占满屏幕宽,1334rpx为占满屏幕长。7501334rpx) 例子: 现在展示型号为iPhone 12 pro的型号,这里750px和750…

利用大模型进行法律判决预测

概述 本文研究背景是法律专业人员常用的演绎推理方法,即法律演绎,用于案例分析。 过去的方法主要是通过学习、微调或示例来教授大型语言模型(LLM)进行法律判决预测。这些方法存在的问题是学习样本有限,解释性差。因此…

02 - 如何制定性能调优策略?

1、性能测试攻略 性能测试是提前发现性能瓶颈,保障系统性能稳定的必要措施。下面我先给你介绍两种常用的测试方法,帮助你从点到面地测试系统性能。 1.1、微基准性能测试 微基准性能测试可以精准定位到某个模块或者某个方法的性能问题,特别…

数仓-零基础小白到入土-学习路线

数仓-零基础小白到入土-学习路线 铺垫一下下讲在前面涉及基础技术栈:中级:全部掌握之后👆:去刷面试题: 初级中级高级博主独家面试题:数仓名词:催更我戳戳个人主页:[up自己的网站](ht…

Kafka - 分区中各种偏移量的说明

文章目录 引子名词解释分区中各种偏移量的说明 引子 名词解释 Kafka是一个高性能、高吞吐量的分布式消息系统,被广泛应用于大数据领域。在Kafka中,分区是一个重要的概念,它可以将数据分发到不同的节点上,以实现负载均衡和高可用性…

【PHP面试题73】TCP和UDP的特点和区别是什么?

文章目录 一、前言二、TCP(Transmission Control Protocol)三、UDP(User Datagram Protocol)四、TCP和UDP的区别五、总结 一、前言 本文已收录于PHP全栈系列专栏:PHP面试专区。 计划将全覆盖PHP开发领域所有的面试题&a…

Go速成-常量

1.常量的定义 Go语言常量,定义的值是不能进修修改的,定义常量就是const,常量定义建议全部大写 const PI float32 3.1415946 //显式定义 const (x int 16ys "abc"z)fmt.Print(x,y,s,z) 在定义常量的时候如果没有声明值&#xff…

微信小程序的目录解析--【浅入深出系列001外篇】

浅入深出系列总目录在000集 如何0元学微信小程序–【浅入深出系列000】 文章目录 本系列校训学习资源的选择先说总目录经常碰到的文件(目录)最最常见的目录pages次最常用的就是images 目录 操作起来真正的操作 配套资源 本系列校训 用免费公开视频,卷…

关于Qt编译android时候一个问题

问题提示为 FAILURE: Build failed with an exception.* What went wrong: A problem occurred configuring root project android-build. > Could not resolve all artifacts for configuration :classpath.> Could not resolve com.android.tools.build:gradle:3.2.0.…

3天学会Ascend C编程 | Day1 Ascend C基本概念及常用接口

本文分享自《【2023 CANN训练营第一季】——Ascend C算子开发入门——第一次课》,作者:weixin_54022960 。 Ascend C是华为昇腾面向算子开发场景的编程语言,使用C/C作为前端语言的算子开发工具,通过四层接口抽象、并行编程范式、…

【笔记】SpringBoot 2.7.x Feign超时时间配置问题

【笔记】SpringBoot 2.7.x Feign超时时间配置问题 前言使用的技术Feign超时配置处理过程 前言 从 SpringBoot 2.3升级至SpringBoot 2.7.x后,Feign的配置也发生了变化。本文主要记录Feign调用超时时间配置问题。 在解决问题前,也查阅过相关资料&#xff0…