Spark SQL 与 Hive 的小文件调优

news2024/11/16 17:57:19

文章目录

    • 小文件危害
    • 表的缓存
    • shuffle 分区数调整
    • Spark SQL 客户端设置合并
    • Hive 客户端处理小文件合并

小文件危害

小文件会造成 nn 处理压力变大,大大降低了读取性能,整个 HDFS 文件系统访问缓慢,大量的小文件还会导致 nn 内存溢出,无法正常使用。

表的缓存

# 缓存某个表
spark.catalog.cacheTable("tableName")

# 释放缓存的表
spark.catalog.uncacheTable("tableName")

shuffle 分区数调整

# 指定在进行 shuffle 操作时的分区数量,默认:200
spark.sql.shuffle.partitions

Spark SQL 客户端设置合并

我的建议是,不如直接调用方法coalesce 来得实在。

那么如何设置 coalesce 参数的个数呢?

可以先查看我们操作的数据量大小,然后用它去除以我们的集群块Block Size 即可。

Hive 客户端处理小文件合并

方法一:

-- 是否开启分区调整功能,默认:false
set spark.sql.adaptive.enabled=true;

-- 开启分区调整后,在 reduce 阶段每个 task 最少处理的数据量,默认:64M,单位:B
-- 一般改成和集群块一样的大小,Hadoop2.7.2版本及之前默认64MB,Hadoop2.7.3版本及之后默认128M
set spark.sql.adaptive.shuffle.targetPostShuffleInputSize=128000000;

-- 开启分区调整后,最小的 reducer 个数,默认:1
set spark.sql.adaptive.minNumPostShufflePartitions=1;

-- 开启分区调整后,最大的 reducer 个数,默认:500
set spark.sql.adaptive.maxNumPostShufflePartitions=500;

-- 开启分区调整后,在 reduce 阶段每个 task 最少处理的条数,默认:20000000
set spark.sql.adaptive.shuffle.targetPostShuffleRowCount=20000000;

一般情况数据量小的话,只需要设置前面两个参数就可以了。

参数调整前:

在这里插入图片描述

参数调整后:

新建了一个和其结构一样 test 表,然后导入数据,成功的合并了小文件:

在这里插入图片描述


方法二:

-- 执行 Map 前进行小文件合并,默认开启
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

-- 合并为一个 split 的最大值(单位byte),当超过该值时新建一个split,256MB
set mapreduce.input.fileinputformat.split.maxsize=268435456;

-- 在第一步合并后每个节点剩余的文件,如果大于该值(单位byte),单独创建一个split,256MB
set mapreduce.input.fileinputformat.split.minsize.per.node=268435456;

-- 在第二步处理完,每个机架上剩余的文件,如果大于该值(单位byte),单独创建一个split,256MB
set mapreduce.input.fileinputformat.split.minsize.per.rack=268435456;

参数调整前:

在这里插入图片描述

参数调整后:

新建了一个和其结构一样 test 表,然后导入数据,成功的合并了小文件:

在这里插入图片描述

以上参数调优都是临时调优,仅限于本次会话,如果想要永久设置的话只需要将参数配置到 hive-site.xml 文件中即可。

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

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

相关文章

DataX使用、同步MySQL数据到HDFS案例

文章目录4. DataX使用4.1 DataX使用概述4.1.1 DataX任务提交命令4.1.2 DataX配置文件格式4.2 同步MySQL数据到HDFS案例4.2.1 MySQLReader之TableMode4.2.1.1 编写配置文件4.2.1.1.1 创建配置文件base_province.json4.2.1.1.2 配置文件内容如下4.2.1.2 配置文件说明4.2.1.2.1 Re…

jdk 11 自带的HttpClient

jdk 11 自带的HttpClient 文章目录jdk 11 自带的HttpClient步骤1:创建jdk HttpClient 对象步骤2:创建请求步骤3:使用client.sent()发送同步请求步骤4:处理响应下面是发送post请求,请求类型是json,使用clien…

汇智动力《软件测试课程V8.0版本》正式发布!

今年是汇智动力建校的第八个年头,这一路走来,我们始终抓住时代的机遇与发展同辉、与时代俱兴,助力千万学子圆梦互联网。时代在飞速发展,社会在不断进步,为了使汇智学子适应科技变化的需要,汇智动力《软件测…

限量版Spring实战笔记与其在收藏里吃灰,不如大家一起学习,欸 大家一起卷!

写在前面 作为一个java程序员,spring应该都不会陌生了吧? 对于大部分程序员来说,spring的入门,估计跑起一个框架,熟悉一下开发的流程,基本上就掌握spring框架的开发了。 随着开发年限的变大,我…

解决Netty那些事儿之Reactor在Netty中的实现(创建篇)-下

接上文解决Netty那些事儿之Reactor在Netty中的实现(创建篇)-上 Netty对JDK NIO 原生Selector的优化 首先在NioEventLoop中有一个Selector优化开关DISABLE_KEY_SET_OPTIMIZATION,通过系统变量-D io.netty.noKeySetOptimization指定,默认是开启的,表示需…

[附源码]计算机毕业设计疫情防控平台Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【OpenCV-Python】教程:3-14 Hough 圆变换

OpenCV Python Hough 圆变换 【目标】 学习用 Hough 变换检测圆cv2.HoughCircles() 【理论】 圆的数学表达式是 (x−xcenter)2(y−ycenter)2r2(x-x_{center})^2 (y-y_{center})^2 r^2 (x−xcenter​)2(y−ycenter​)2r2 其中 (xcenter,ycenter)(x_{center}, y_{center})…

[附源码]计算机毕业设计志愿者服务平台Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

matlab测量计算信号的相似度

本示例说明如何测量信号相似度。最近我们被客户要求撰写关于计算信号的相似度的研究报告,包括一些图形和统计输出。 将回答以下问题:如何比较具有不同长度或不同采样率的信号?如何确定测量中是否存在信号或仅有噪声?有两个信号…

校园论坛(Java)—— 考研学习模块

校园论坛(Java)—— 考研学习模块 文章目录校园论坛(Java)—— 考研学习模块1、写在前面2、系统结构设计2.1 各个页面之间的调用关系2.2. 登录注册模块各层的设计3、考研学习模块设计3.1 浏览和查看帖子3.2 发表帖子3.3 删除帖子3…

GJB 5000B二级-CM配置管理

主要变化情况 继承3条、修订3条 一、修订的主要内容 CM2.2 建立并维护配置管理系统(SP1.2:建立配置管理系统). 实践陈述:建立并维护配置管理系统和管理规程,建立多级控制机制,实现对已标识配置项的存储、检索、访问控制、变更控制、备份和恢复; CM2.4:跟踪和控制变更…

数据结构-难点突破(C++实现图的基本操作(邻接矩阵,邻接表,十字链表法储存代码))

关于图的数据结构,我曾经自己学过一部分,图论专栏,但是学习本就是重复的过程,这里打算系统的学习一下图。第一步当然是图的储存和基本操作的实现。 要用C实现图的基本操作 Adjacent(x,y):判断图是否存在边…

[附源码]Python计算机毕业设计Django健康医疗体检

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

[附源码]计算机毕业设计JAVA校园闲置物品交易

[附源码]计算机毕业设计JAVA校园闲置物品交易 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybati…

第十五章 如何编写README文档

README 文档对于开源项目的重要性甚至会超过代码本身。你试想一下,你打开一个 Github 项目,第一时间就会看到 README 文档,而这时候同一类的项目你可能有很多选择,如果这个README不正规,无法快速上手,你可能…

4.springboot中整合Mybatis

Springboot整合mybatis 在 SpringSpringMVC 中整合 MyBatis 步骤需要在配置文件里配置多个 Bean,比如MapperScannerConfigurer,SqlSessionFactoryBean 等,步骤还是比较复杂的,Spring Boot 中对此做了进一步的简化,使 …

GIS工具maptalks开发手册(三)03——官网示例之添加图层和移除图层

GIS工具maptalks开发手册(三)03——官网示例之添加图层和移除图层 效果 代码 index.html <!DOCTYPE html> <html> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1"> <ti…

Android系统启动流程

Android系统完整的启动过程&#xff0c;从系统层次角度可分为 Linux 系统层、Android 系统服务层、Zygote进程模型三个阶段&#xff1b;从开机到启动 Home Launcher 完成具体的任务细节可分为七个步骤&#xff0c;下面就从具体的细节来解读 Android 系统完整的初始化过程。 Lo…

java计算机毕业设计基于springboot电商项目(附源码讲解)

目录 1. 用户端 1.1 主页&#xff08;未登录时可以查看商品但是不可以购买&#xff09; 1.2 登录&#xff08;账号密码登录) 1.3 登录&#xff08;手机验证码登录&#xff09; 1.4 注册 1.5 查看商品详情 1.6 将商品加入购物车 1.7 在商品购物车中选中商品购买 1.8 …

Jenkins用户权限配置 (三)

平时开发会分为测试环境、生产环境&#xff0c;多个开发人员需要区分不同的权限。例如普通开发人员只能看到测试视图和发布测试环境&#xff0c;生产环境的发布则由负责把控的人员进行统一发布&#xff0c;所以需要在新建用户的同时也分配好权限 (一) 安装Role-based Authoriz…