MapReduce(一):FileInputFormat源码解析

2023-11-01

来源:https://www.bilibili.com/video/av36033875?from=search&seid=12700632591522714293

FileInputFormat切片机制

1 job提交流程源码详解

在这里插入图片描述
主要代码流程:

waitForCompletion()
submit();
	// 1建立和集群的连接,将相关信息交给集群,使用了动态代理 
	connect();	
		// 1)创建提交job的代理
		new Cluster(getConfiguration());
			// (1)判断是本地yarn还是远程
			initialize(jobTrackAddr, conf); 
	// 2 提交job
	submitter.submitJobInternal(Job.this, cluster)
	// 1)创建给集群提交数据的Stag路径
	Path jobStagingArea = JobSubmissionFiles.getStagingDir(cluster, conf);
	// 2)获取jobid ,并创建job路径
	JobID jobId = submitClient.getNewJobID();
	// 3)拷贝jar包到集群
	copyAndConfigureFiles(job, submitJobDir);	
		rUploader.uploadFiles(job, jobSubmitDir);
	// 4)计算切片,生成切片规划文件
	writeSplits(job, submitJobDir);
		maps = writeNewSplits(job, jobSubmitDir);
			input.getSplits(job);
	// 5)向Stag路径写xml配置文件
	writeConf(conf, submitJobFile);
		conf.writeXml(out);
	// 6)提交job,返回提交状态
	status = submitClient.submitJob(jobId, submitJobDir.toString(), job.getCredentials());

2 FileInputFormat原理解析(input.getSplits(job))

  • 找到你数据存储的目录。
  • 开始遍历处理(规划切片)目录下的每一个文件
  • 遍历第一个文件ss.txt

a)获取文件大小fs.sizeOf(ss.txt);
b)计算切片大小computeSliteSize(Math.max(minSize,Math.max(maxSize,blocksize)))=blocksize=128M
c)默认情况下,切片大小=blocksize
d)开始切,形成第1个切片:ss.txt—0:128M;第2个切片ss.txt—128:256M;第3个切片ss.txt—256M:300M(每次切片时,都要判断切完剩下的部分是否大于块的1.1倍,不大于1.1倍就划分一块切片,如剩下129,129/128=1.00x,不分切片,要为140.8,则需要两个块来存储)
e)将切片信息写到一个切片规划文件中
f)整个切片的核心过程在getSplit()方法中完成。
g)数据切片只是在逻辑上对输入数据进行分片,并不会再磁盘上将其切分成分片进行存储。InputSplit只记录了分片的元数据信息,比如起始位置、长度以及所在的节点列表等。

注意:block是HDFS上物理上存储的存储的数据,切片是对数据逻辑上的划分。

  • 提交切片规划文件到yarn上,yarn上的MrAppMaster就可以根据切片规划文件计算开启maptask个数。

3 FileInputFormat中默认的切片机制:

(1)简单地按照文件的内容长度进行切片
(2)切片大小,默认等于block大小
(3)切片时不考虑数据集整体,而是逐个针对每一个文件单独切片
比如待处理数据有两个文件:

file1.txt 320M
file2.txt 10M

经过FileInputFormat的切片机制运算后,形成的切片信息如下:

file1.txt.split1-- 0~128
file1.txt.split2-- 128~256
file1.txt.split3-- 256~320
file2.txt.split1-- 0~10M

4 FileInputFormat切片大小的参数配置

(1)通过分析源码,在FileInputFormat中,计算切片大小的逻辑:
Math.max(minSize, Math.min(maxSize, blockSize));
切片主要由这几个值来运算决定
mapreduce.input.fileinputformat.split.minsize=1 默认值为1
mapreduce.input.fileinputformat.split.maxsize= Long.MAXValue 默认值Long.MAXValue
因此,默认情况下,切片大小=blocksize。
maxsize(切片最大值):参数如果调得比blocksize小,则会让切片变小,而且就等于配置的这个参数的值。
minsize (切片最小值):参数调的比blockSize大,则可以让切片变得比blocksize还大。

5 获取切片信息API

// 根据文件类型获取切片信息
FileSplit inputSplit = (FileSplit) context.getInputSplit();
// 获取切片的文件名称
String name = inputSplit.getPath().getName();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MapReduce(一):FileInputFormat源码解析 的相关文章

  • 我如何调试 Hadoop MapReduce [重复]

    这个问题在这里已经有答案了 我正在尝试构建一个地图缩减作业 它运行完成 但最后呈现奇怪的数据 当我尝试使用 system out println debug data 调试它时 它没有显示在屏幕上 使用 java API 生成外部日志文件
  • 在 Hadoop 作业中找不到类

    我有一个地图缩减作业 它从 DocumentDB 获取输入 我已将 jar 文件添加到源代码中的 lib 目录下 并在运行作业时使用 libjars 但我仍然收到 jar 文件中的类未找到类错误 这是我的驱动程序的一部分 public cl
  • MongoDB 从两个数组计算值、排序和限制

    我有一个存储浮点数组的 MongoDB 数据库 假设以下格式的文档集合 id 0 vals 0 8 0 2 0 5 有一个查询数组 例如 带有值 0 1 0 3 0 4 我想计算集合中所有元素的距离 例如 差异之和 对于给定的文档和查询 它
  • Hive 左外连接长期运行

    Hortonworks HDP 2 3 0 Hive 0 14 Table T1 partition on col1 no bucket ORC 应用程序 1 2 亿行和 6GB 数据大小Table T2 partition on col2
  • 仅使用一个映射器的 Hadoop gzip 输入文件[重复]

    这个问题在这里已经有答案了 可能的重复 为什么 hadoop 不能分割一个大文本文件 然后使用 gzip 压缩分割的内容 https stackoverflow com questions 6511255 why cant hadoop s
  • CouchDB“加入”两个文档

    我有两个看起来有点像这样的文档 Doc id AAA creator id data DataKey id credits left 500 times used 0 data id AAA 我想要做的是创建一个视图 它允许我传递 Data
  • Hadoop 性能

    我安装了hadoop 1 0 0并尝试了字数统计示例 单节点集群 完成时间为 2 分 48 秒 然后我尝试了标准的 Linux 字数统计程序 该程序在同一组 180 kB 数据 上运行只需 10 毫秒 是我做错了什么 还是 Hadoop 非
  • hadoop map reduce 中的错误处理

    根据文档 有几种方法可以在 MapReduce 中执行错误处理 以下是一些 A 使用枚举的自定义计数器 每个失败记录的增量 b 记录错误并稍后分析 计数器给出失败记录的数量 然而 为了获取失败记录的标识符 可能是其唯一键 以及发生异常的详细
  • Hadoop YARN 作业陷入映射 0% 并减少 0%

    我正在尝试运行一个非常简单的作业来测试我的 hadoop 设置 所以我尝试使用 Word Count Example 它陷入了 0 所以我尝试了一些其他简单的作业 并且每个作业都陷入了困境 52191 0003 14 07 14 23 55
  • Hive 上的自定义 MapReduce 程序,规则是什么?输入和输出怎么样?

    我被困了几天 因为我想根据我在 hive 上的查询创建一个自定义的地图缩减程序 在谷歌搜索后我发现没有太多例子 而且我仍然对规则感到困惑 创建自定义 MapReduce 程序的规则是什么 映射器和减速器类怎么样 任何人都可以提供任何解决方案
  • 如何在hadoop/map reduce中创建固定行数的输出文件?

    假设我们有 N 个具有不同行数的输入文件 我们需要生成输出文件 使得每个输出文件恰好有 K 行 最后一个输出文件可以有 是否可以使用单个 MR 作业来完成此操作 我们应该打开文件以便在reducer中显式写入 输出中的记录应该被打乱 tha
  • 远程执行hadoop作业时出现异常

    我正在尝试在远程 hadoop 集群上执行 Hadoop 作业 下面是我的代码 Configuration conf new Configuration conf set fs default name hdfs server 9000 c
  • 将多个前缀行过滤器设置为扫描仪 hbase java

    我想创建一台扫描仪 它可以为我提供带有 2 个前缀过滤器的结果例如 我想要其键以字符串 x 开头或以字符串 y 开头的所有行 目前我知道只能使用一个前缀 方法如下 scan setRowPrefixFilter prefixFiltet 在
  • hadoop中reducer的数量

    我正在学习hadoop 我发现减速器的数量非常令人困惑 1 reducer的数量与partition的数量相同 2 reducer 的数量是 0 95 或 1 75 乘以 节点数 每个节点的最大容器数 3 减速机数量设定为mapred re
  • 如何在 MapReduce 作业中导入自定义模块?

    我有一个 MapReduce 作业定义在main py 它导入了lib模块来自lib py 我使用 Hadoop Streaming 将此作业提交到 Hadoop 集群 如下所示 hadoop jar usr lib hadoop mapr
  • Java8:使用 Stream / Map-Reduce / Collector 将 HashMap 转换为 HashMap

    我知道如何 改造 一个简单的JavaList from Y gt Z i e List
  • 更改 Hadoop 中的数据节点数量

    如何改变数据节点的数量 即禁用和启用某些数据节点来测试可扩展性 说得更清楚一点 我有4个数据节点 我想一一实验1 2 3 4个数据节点的性能 是否可以只更新名称节点中的从属文件 临时停用节点的正确方法 创建一个 排除文件 这列出了您想要删除
  • 为什么 CouchDB 归约函数接收“键”作为参数

    使用 CouchDB 减少功能 function keys values rereduce 这被称为这样 reduce key1 id1 key2 id2 key3 id3 value1 value2 value3 false 问题1 将键
  • 使用mongodb聚合框架按数组长度分组

    我有一个看起来像这样的集合 id id0 name saved things id id1 name saved things id id2 name saved things etc 我想使用 mongodb 的聚合框架来得出一个直方图结
  • 是否可以通过编写单独的mapreduce程序并行执行Hive查询?

    我问了一些关于提高 Hive 查询性能的问题 一些答案与映射器和减速器的数量有关 我尝试使用多个映射器和减速器 但在执行中没有看到任何差异 不知道为什么 可能是我没有以正确的方式做 或者我错过了其他东西 我想知道是否可以并行执行 Hive

随机推荐

  • Java+spring+springmvc 基于ssm的校园快领服务系统#毕业设计

    开发环境 项目编号 Java spring springmvc ssm439校园快领服务系统 毕业设计 开发语言 Java 开发工具 IDEA Eclipse 数据库 MYSQL5 7 应用服务 Tomcat7 Tomcat8 使用框架 s
  • 反激拓扑中初级侧MOS管Vds波形分析

    1 反激拓扑电路的基本线路如下 DC IN 市电经过整流滤波后的直流输入 Drive 控制芯片的驱动信号 控制Q1进行ON OFF CS 控制芯片对Q1电流的采样 AGND 初级侧的地 DC OUT 输出 GND 次级侧的地 2 两种工作模
  • MATLAB学习_函数自定义与调用

    另一个博客地址 konosuba xyz 自定义函数 MATLAB可以在单独的 m文件中定义函数 比如有一文件myadd m 文件中内容为 function y myadd a b 这里可以写函数的使用说明 前面以 开头 在工作区中 hel
  • mac idea快捷键

    1 环绕try catch if等语句 选中想被try catch包围的语句 同时按下option command t 2 control O 重写父类方法 3 control I 实现接口方法 4 Command N Control En
  • OpenHarmony(鸿蒙)操作系统

    一 OpenHarmony操作系统概述 OpenHarmony是由开放原子开源基金会 OpenAtom Foundation 孵化及运营的开源项目 目标是面向全场景 全连接 全智能时代 搭建一个智能终端设备操作系统的框架和平台 促进万物互联
  • DNS详解

    什么是DNS 把域名翻译成IP地址的软件称为域名系统 即DNS DNS 是计算机域名系统 Domain Name System 或 Domain Name Service 的缩写 它是由域名解析器和域名服务器组成的 通过它可以把你需要访问的
  • python栅格地图上路径规划作图

    工具 spyder python3 7 matplotlib库 在进行路径规划仿真的时候 我们希望最后得到的结果不仅仅是一个 填满数字的数组 而是将它变为更加直观的图片 spyder数组自带染色 很赞 这是我的A 算法得到的最后的结果 数字
  • oracle负载均衡方案,Oracle负载均衡配置代码

    对于专业的数据处理存储的Oracle ARC而言 负载均衡的设置就更为重要了 那么如何对Oracle负载均衡进行配置呢 就让我们一起看看本文来学习一下吧 我们将从客户端和服务器端来进行解说 Oracle负载均衡主要是指新会话连接到RAC数据
  • 两个Java项目之间的通信

    两个java项目 他们之间进行信息的通信 前提 必须知道要通信的java项目 接收请求方 的服务器的IP地址和访问路径 其实两个java项目之间的通信还是使用HTTP的请求 主要有两种方式 使用apache的HttpClient方式 使用J
  • 程序员和设计师从此再也不会因“标注”影响感情了

    程序猿小哥哥 你好 我是蓝湖 一款产品设计协作工具 美团 滴滴 联想 Tower 快服务 面包旅行 钱方 好近等众多知名团队都在用的产品设计团队必备神器 设计师妹子们用过都说好 你家设计师也应该有一个 日常工作中 设计师和程序员的工作看似独
  • 获取某值的具体某位

    获取某值的具体某位 函数 unsigned char get bit unsigned char temp int bit 获取某值的具体某位 参数 temp为传入的值 bit是要获取temp的值具体某一位的值 返回值 函数返回 传入参数t
  • xuperchain源码分析-智能合约

    XuperBridge XuperBridge为所有合约提供统一的合约接口 从抽象方式上类似于linux内核对应于应用程序 内核代码是一份 应用程序可以用各种语言实现 比如go c 类比到合约上就是各种合约的功能 如KV访问 QueryBl
  • SQLMAP的使用详情

    SQLMAP的使用详情 这里对dvwa 进行测试 1 安装sqlmap 由于sqlmap不支持python3 所以在安装之前需要安装Python2 这里使用的是python2 7 14 在官网下载安装包一键安装 安装完成以后紧接着安装sql
  • Adaboost算法和MATLAB实现

    一 AdaBoost简介 Boosting 也称为增强学习或提升法 是一种重要的集成学习技术 能够将预测精度仅比随机猜度略高的弱学习器增强为预测精度高的强学习器 这在直接构造强学习器非常困难的情况下 为学习算法的设计提供了一种有效的新思路和
  • IT职场难以“老有所终” 谁之过

    还有谁可能在一家企业 从一而终 吗 有资料显示 以往各大公司的裁员 辞退员工行为中 老员工都是更大的受害者 只是 现在华为的 万人辞职 行动公开 直接地把 矛头 指向了老员工 再次触及到了IT职场上老员工的去从难题 一位在华为工作11年的老
  • 英语词汇表

    A a an art 一 个 件 abandon v 放弃 抛弃 ability n 能力 才能 able a 能够 有能力的 abnormal a 不正常的 aboard prep 在 或上 船 飞机 火车等 abolish v 废除 a
  • 自连接表 ——《二级关注者》LeetCode Plus 会员专享题【详细解析】Hive / MySQL

    大家早上好 本人姓吴 如果觉得文章写得还行的话也可以叫我吴老师 欢迎大家跟我一起走进数据分析的世界 一起学习 感兴趣的朋友可以关注我的数据分析专栏 里面有许多优质的文章跟大家分享哦 另外也欢迎大家关注我的SQL刷题专栏 里面有我分享的高质量
  • windows环境python2.7安装pyinstaller

    作者环境 windows10 python2 7 直接使用pip install pyinstaller安装会报错 一开始是报pip版本过低 按照提示命令升级pip版本后又提示以下错误 到这里请跳到下面第5点尝试操作 如果不行 再回到这里阅
  • 正确实现 IDisposable 接口

    正确实现 IDisposable NET中用于释放对象资源的接口是IDisposable 但是这个接口的实现还是比较有讲究的 此外还有Finalize和Close两个函数 MSDN建议按照下面的模式实现IDisposable接口 NET的对
  • MapReduce(一):FileInputFormat源码解析

    来源 https www bilibili com video av36033875 from search seid 12700632591522714293 FileInputFormat切片机制 1 job提交流程源码详解 主要代码流