Hadoop 集群小文件归档 HAR、小文件优化 Uber 模式
文章目录
- 小文件归档 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 秒。
相关文章:
Hadoop 集群小文件归档 HAR、小文件优化 Uber 模式
文章目录 小文件归档 HAR小文件优化 Uber 模式 小文件归档 HAR 小文件归档是指将大量小文件合并成较大的文件,从而减少存储开销、元数据管理的开销以及处理时的任务调度开销。 这里我们通过 Hadoop Archive (HAR) 来进行实现,它是一种归档格式…...
Android OkHttp源码阅读详解一
博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家 👉点击跳转到教程 前言:源码阅读基于okhttp:3.10.0 Android中OkHttp源码阅读二(责任链模式) implementation com.squareup.o…...
UG\NX CAM二次开发 查询工序所在的方法组TAG UF_OPER_ask_method_group
文章作者:代工 来源网站:NX CAM二次开发专栏 简介: UG\NX CAM二次开发 查询工序所在的方法组TAG UF_OPER_ask_method_group 效果: 代码: void MyClass::do_it() { int count=0;tag_t * objects;UF_UI_ONT_ask_selected_nodes(&count, &objects);for (i…...
npm获取函数名称和测试js脚本
这边遇到一个类似于测试的需求,需要从一个js文件里获取函数名,然后尝试执行这些函数和创建实例。这边首先遇到了一个问题是如何动态获取js里的函数名和类名,我这边暂时没找到特别好的方法,已有的方法都是类似于提取语法树那种提取…...
ISO/IEC/ITU标准如何快速查找(三十九)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…...
git私房菜
文章目录 1、公司项目开发Git协作流程2、合并相关的操作3、Git常用命令总结 公司中如何使用Git协同开发的?本文将具体介绍开发模式,以及一些常用命令。 1、公司项目开发Git协作流程 公司一个完整的项目出来,项目的推进是在主分支master上进行…...
docker安装grafana,prometheus,exporter以及springboot整合详细教程(GPE)
springboot项目ip:192.168.168.1 测试服务器ip:192.168.168.81 文章来自互联网,自己略微整理下,更容易上手,方便自己,方便大家 最终效果: node springboot 1.下载镜像 docker pull prom/node-exporter docker pull prom/mysqld-exporter docker pull google/cadvisor dock…...
cka/ckad应试指南 从docker到kubernetes完全攻略
《cka/ckad应试指南 从docker到kubernetes完全攻略》 段超飞 docker 1-安装并配置docker,yum源,docker下载慢 2-基本命令:镜像管理,基本命令,创建容器 3-网络,存储卷,镜像仓库, 4-do…...
js中如何使用可选函数参数
js是网络的核心技术之一。大多数网站都使用它,并且所有现代网络浏览器都支持它,而不需要插件。在本文中,我们将讨论不同的提示和技巧,它们将帮助您进行日常 JavaScript 开发。 在 JavaScript 编码中,您经常需要将函数…...
基于Open3D的点云处理17-Open3d的C++版本
参考: http://www.open3d.org/docs/latest/cpp_api.htmlhttp://www.open3d.org/docs/latest/getting_started.html#chttp://www.open3d.org/docs/release/cpp_project.html#cplusplus-example-projecthttps://github.com/isl-org/open3d-cmake-find-packagehttps:/…...
GIT相关内容总结
Git相关内容总结 Git的功能Git常见命令 Git的功能 Git是版本控制工具。版本控制就是记录你对文件做的所有改动的一个系统,包括改动的内容,改动的时间,改动的备注等,便于你恢复特定的版本。 版本控制系统分为本地版本控制系统&…...
golang清空数组的方法
在Go语言中,数组是固定长度的数据结构,无法直接清空。但是,你可以通过以下两种方法来模拟清空数组的效果: 使用切片(Slicing): 切片是动态长度的,可以用来清空数组。你可以创建一个…...
postgresql并行查询(高级特性)
######################## 并行查询 postgresql和Oracle一样支持并行查询的,比如select、update、delete大事无开启并行功能后,能够利用多核cpu,从而充分发挥硬件性能,提升大事物的处理效率。 pg在9.6的版本之前是不支持的并行查询的,从9.6开始支持并行查询,但是功能非常…...
Python所有方向的学习路线图!!
学习路线图上面写的是某个方向建议学习和掌握的知识点汇总,举个例子,如果你要学习爬虫,那么你就去学Python爬虫学习路线图上面的知识点,这样学下来之后,你的知识体系是比较全面的,比起在网上找到什么就学什…...
2022年03月 C/C++(七级)真题解析#中国电子学会#全国青少年软件编程等级考试
C/C++编程(1~8级)全部真题・点这里 第1题:红与黑 有一间长方形的房子, 地上铺了红色、 黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上, 只能向相邻的黑色瓷砖移动。 请写一个程序, 计算你总共能够到达多少块黑色的瓷砖。 时间限制: 1000 内存限制: 65536 输入…...
使用 Laf 一周内上线美术狮 AI 绘画小程序
“美术狮 AI 绘画”(以下简称“美术狮”),是我们小团队的一次尝试,定位是人人都可以上手的,充满创意的,理解中文和中国文化的图片生成工具。 在完善图像模型和论证核心问题之后,我们开始构建 MV…...
Kubernetes(k8s)当中安装并使用ingress暴露应用
Kubernetes当中安装并使用ingress暴露应用 为什么需要Ingress前期准备集群准备LoadBalancer准备 安装Ingress-Nginx下载地址v1.3.1v1.8.1 修改文件v1.3.1v1.8.1修改ingress服务类型配置 执行安装 部署应用通过ingress-nginx暴露应用部署ingress的yaml文件v1.3.1v1.8.1 为什么需…...
03-Flask-工程配置加载方式
工程配置加载方式 前言配置对象中加载配置文件中加载环境变量中加载三种配置方式优缺点工厂模式创建Flask app 前言 本篇来学习下Flake工程配置加载方式 配置对象中加载 应用场景:作为默认配置写在代码中 # -*- coding: utf-8 -*- # Time : 2023/9/2 # Autho…...
Orangepi安装外设库 wiringPi
注意:mobaXterm传送文件要在SSH登陆环境下才可以。 同时电脑和orangepi都在同一个wifi下。...
[dasctf]misc3 chrchrchr.pcapng
webshell 流量分析 php代码部分没啥看的,主要在标黄的部分,裁剪掉前面的字符可base解码 能看到在向a.txt中写入数据 wp # tshark.exe -r chrchrchr.pcapng -T fields -e urlencoded-form.value -Y "urlencoded-form.keyzd2ebbfb26dd" >…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
嵌入式面试常问问题
以下内容面向嵌入式/系统方向的初学者与面试备考者,全面梳理了以下几大板块,并在每个板块末尾列出常见的面试问答思路,帮助你既能夯实基础,又能应对面试挑战。 一、TCP/IP 协议 1.1 TCP/IP 五层模型概述 链路层(Link Layer) 包括网卡驱动、以太网、Wi‑Fi、PPP 等。负责…...
