Hadoop 集群小文件归档 HAR、小文件优化 Uber 模式

news/2024/5/20 4:29:28 标签: hadoop, 大数据, 分布式, yarn, hdfs

文章目录

      • 小文件归档 HAR
      • 小文件优化 Uber 模式

小文件归档 HAR

小文件归档是指将大量小文件合并成较大的文件,从而减少存储开销、元数据管理的开销以及处理时的任务调度开销。

这里我们通过 Hadoop Archive (HAR) 来进行实现,它是一种归档格式,可以将多个小文件和目录归档成单个 HAR 文件。

在进行下面的操作前,请先启动集群。

对小文件进行归档

当前,在 /input 目录下存储了 3 个小文件,如下所示:

在这里插入图片描述

现在我们对这三个文件进行归档,命令如下:

hadoop archive -archiveName input.har -p /input /result

这里将目录 /input 下的所有文件都进行归档,并保存在 /result 目录下,取名为 input.har

在这里插入图片描述
进入归档结果目录中,可以发现归档文件的目录结构,其中 part-0 中存储的就是真正的文件内容,它包含了三个文件的所有内容;其余的文件都是归档相关的文件记录信息。

查看已经归档的文件

hadoop fs -ls har:///result/input.har

在这里插入图片描述

解档文件

hadoop fs -cp har:///result/input.har/* /

在这里插入图片描述

注意,解档指定的目录必须提前创建。

小文件优化 Uber 模式

什么是 Uber 模式?

“Uber 模式” 是指在 Hadoop 中运行 MapReduce 任务时,将所有的任务(Mapper 和 Reducer)都运行在一个单独的 JVM 进程中,而不是在集群的不同节点上分别启动多个 JVM 进程来运行任务。

这个模式的名称来自于 Uber 公司,他们在其 Hadoop 集群上采用了这种方式来运行任务。

优点

  • 减少资源开销: Uber 模式可以减少任务启动的开销,因为不需要为每个任务都启动一个单独的 JVM 进程,这样可以节省内存和CPU资源。

  • 提高局部性: 由于所有任务在同一个 JVM 中运行,数据的局部性更高,因为不需要在不同节点之间传输数据。

  • 避免任务调度开销: 在分布式环境中,任务的调度也会带来一定的开销,Uber 模式可以避免这些开销,从而提高任务的执行效率。

缺点

  • 单点故障: 如果运行任务的 JVM 发生故障,所有的任务都会受到影响,而不是像分布式模式下那样只影响一个节点上的任务。

  • 资源限制: 由于所有任务共享一个 JVM,可能会受到 JVM 内存限制的影响,特别是对于需要大量内存的任务。

  • 性能不适用于所有场景: Uber 模式在某些情况下可能会导致性能下降,特别是当任务需要大量的并行计算时,由于共享一个 JVM,可能无法充分利用多核处理器。

当开启 Uber 模式后,Hadoop 会根据一定的规则和条件来自动判断是否使用 Uber 模式运行任务,还是使用分布式模式。

Uber 模式的配置

编辑 Hadoop 中的 mapred-site.xml 配置文件,添加下列内容:

	<!--开启uber模式,默认关闭 -->
	<property>
	  	<name>mapreduce.job.ubertask.enable</name>
	  	<value>true</value>
	</property>
	
	<!-- 限制单个 JVM 中运行的 Map 任务数量,防止资源过度占用,最大 9  --> 
	<property>
	  	<name>mapreduce.job.ubertask.maxmaps</name>
	  	<value>9</value>
	</property>
	
	<!-- 限制单个 JVM 中运行的 Reduce 任务数量,最大 1 -->
	<property>
	  	<name>mapreduce.job.ubertask.maxreduces</name>
	  	<value>1</value>
	</property>
	
	<!-- 设置在 Uber 模式下最大的输入数据量,默认值为 dfs.blocksize 的值(128MB) -->
	<property>
	  	<name>mapreduce.job.ubertask.maxbytes</name>
	  	<value></value>
	</property>

分发文件同步配置到其它机器,无需重启集群。

测试

当前,在 /input 目录下存储了 3 个小文件,如下所示:

在这里插入图片描述

我们来运行 Hadoop 官方案例 wordcount 来测试 Uber 模式是否设置成功。

hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output

如果配置成功,在案例执行过程中会打印提示,正在使用 Uber 模式运行:

在这里插入图片描述

我们进入 Yarn 中查看案例运行记录:

在这里插入图片描述

可以看到只启动了 1 个容器进行处理,并且只花费了 8 秒,读者可以关闭 Uber 模式来对比前后的速度差别。

未开启 Uber 模式执行效率

在这里插入图片描述

启动了 5 个容器进行处理,花费了 15 秒。


http://www.niftyadmin.cn/n/4985304.html

相关文章

多项式乘法(FFT)

https://www.luogu.com.cn/problem/P3803 傅里叶变换(FFT)笔记存档FFT代码上的实现细节 主函数 把长度设为2的整数次幂块 初始进行翻转&#xff08;二进制翻转&#xff09; 对A&#xff0c;B先化为点值&#xff08;DFT&#xff09; 相乘 IDFT FFT函数 进行初始翻转&a…

java八股文面试[数据库]——B树和B+树的区别

B树是一种树状数据结构&#xff0c;它能够存储数据、对其进行排序并允许以O(logn)的时间复杂度进行查找、顺序读取、插入和删除等操作。 1、B树的特性 B树中允许一个结点中包含多个key&#xff0c;可以是3个、4个、5个甚至更多&#xff0c;并不确定&#xff0c;需要看具体的实…

【Linux】centos8安装bison3.8

centos8安装bison3.8的教程&#xff0c;感觉这个软件很小众啊&#xff0c;百度找不到安装教程&#xff0c;最终还是在起脚旮旯里面翻出来了很久之前的文档&#xff0c;好在没有过时&#xff1b; 虽然centos8中你可以使用yum直接安装&#xff0c;但是哪个安装的版本太低了&#…

vue-cli配置proxy代理,操作代理请求和代理响应onProxyReq,onProxyRes

vue.config.js 有时候需要在代理请求中添加一些请求头或者在修改响应,那么可以通过onProxyReq和onProxyRes来修改代理请求,函数签名均为 (proxyReq|proxyRes,req,res)>{}如果要修改响应,那么还应配置proxy.xxx.selfHandleResponse:true 具体配置如下: module.exports {…

记一次特殊的HTTP 500.30

此错误比较常见&#xff0c;网上的解决方式各种各样&#xff0c;今天遇到的情况是&#xff0c;除过配置文件别的程序集都一样&#xff0c;程序部署端口不同&#xff0c;最后检查原因竟然是appsettings配置文件 key值的格式问题&#xff08;中英文字符或者空格导致&#xff0c;粘…

不可错过!一分钟揭秘主品牌的战略价值

主品牌是企业的心脏&#xff0c;主品牌的进化是企业回归增长的关键&#xff0c;而主品牌的老化、弱化或退化则意味着企业面临衰退的风险。主品牌在企业中扮演着核心角色&#xff0c;它代表着企业的价值观和形象&#xff0c;直接影响着市场地位和竞争力&#xff0c;能够充分理解…

【软考】系统集成项目管理工程师(一)信息化基础知识【6分】

一、信息与信息系统 1、信息技术 为解决信息的采集、加工、存储、传输、处理、计算、转换、表现等问题而不断繁荣发展 核心-传输技术&#xff08;通常指通信、网络等&#xff09; 2、信息的质量属性 特点&#xff1a;客观性、普遍性 属性描述精确性对事物状态描述的精准程度…

C++ Primer阅读笔记--对象移动(右值引用、移动迭代器和引用限定符的使用)

目录 1--右值引用 2--std::move 3--移动构造函数 4--移动赋值运算符 5--移动迭代器 6--引用限定符 1--右值引用 右值引用必须绑定到右值的引用&#xff0c;通过 && 获得右值引用&#xff1b; 右值引用只能绑定到临时对象&#xff08;即将被销毁的对象&#xff09…