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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: 该文介绍了Hadoop中两种小文件管理策略。首先,通过Hadoop Archive (HAR)将小文件归档成大文件以减少存储和管理开销。操作包括使用`hadoop archive`命令进行归档和解档。其次,文章讨论了小文件优化的Uber模式,这种模式在同一JVM中运行所有MapReduce任务以提高效率和局部性,但可能引发单点故障和资源限制问题。启用Uber模式需在`mapred-site.xml`配置文件中设置相关参数。文中还提供了使用WordCount例子验证Uber模式配置的步骤。

@[toc]

小文件归档 HAR

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

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

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

对小文件进行归档

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

image.png

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

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

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

image.png

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

查看已经归档的文件

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

image.png

解档文件

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

image.png

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

小文件优化 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 个小文件,如下所示:

image.png

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

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

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

image.png

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

image.png

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

未开启 Uber 模式执行效率

image.png

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

相关文章
|
3月前
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
206 6
|
3月前
|
分布式计算 资源调度 Hadoop
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
91 2
|
2月前
|
分布式计算 资源调度 Hadoop
【赵渝强老师】部署Hadoop的本地模式
本文介绍了Hadoop的目录结构及本地模式部署方法,包括解压安装、设置环境变量、配置Hadoop参数等步骤,并通过一个简单的WordCount程序示例,演示了如何在本地模式下运行MapReduce任务。
|
3月前
|
SQL 分布式计算 Hadoop
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
45 3
|
3月前
|
分布式计算 Hadoop Shell
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
68 3
|
17天前
|
存储 分布式计算 大数据
Flume+Hadoop:打造你的大数据处理流水线
本文介绍了如何使用Apache Flume采集日志数据并上传至Hadoop分布式文件系统(HDFS)。Flume是一个高可用、可靠的分布式系统,适用于大规模日志数据的采集和传输。文章详细描述了Flume的安装、配置及启动过程,并通过具体示例展示了如何将本地日志数据实时传输到HDFS中。同时,还提供了验证步骤,确保数据成功上传。最后,补充说明了使用文件模式作为channel以避免数据丢失的方法。
53 4
|
2月前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第27天】在大数据时代,数据湖技术凭借其灵活性和成本效益成为企业存储和分析大规模异构数据的首选。Hadoop和Spark作为数据湖技术的核心组件,通过HDFS存储数据和Spark进行高效计算,实现了数据处理的优化。本文探讨了Hadoop与Spark的最佳实践,包括数据存储、处理、安全和可视化等方面,展示了它们在实际应用中的协同效应。
138 2
|
2月前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第26天】本文详细探讨了Hadoop与Spark在大数据处理中的协同作用,通过具体案例展示了两者的最佳实践。Hadoop的HDFS和MapReduce负责数据存储和预处理,确保高可靠性和容错性;Spark则凭借其高性能和丰富的API,进行深度分析和机器学习,实现高效的批处理和实时处理。
98 1
|
3月前
|
分布式计算 Hadoop 大数据
大数据体系知识学习(一):PySpark和Hadoop环境的搭建与测试
这篇文章是关于大数据体系知识学习的,主要介绍了Apache Spark的基本概念、特点、组件,以及如何安装配置Java、PySpark和Hadoop环境。文章还提供了详细的安装步骤和测试代码,帮助读者搭建和测试大数据环境。
92 1
|
3月前
|
存储 分布式计算 资源调度
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(一)
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(一)
97 5

相关实验场景

更多