当前位置: 首页 > news >正文

源码阅读笔记 InputFormat、FileInputFormat、CombineTextInputFormat

1. InputFormat

InputFormat是MapReduce框架提供的用来处理job输入的基类
它主要定义了三个功能:
          1.验证job输入是否合法
          2.对输入文件进行逻辑切片(InputSplit),然后将每个切片分发给单独的MapTask
          3.提供切片读取器(RecordReader),用来读取切片中的数据

InputFormat作为抽象父类,只是定义了核心方法,根据具体的数据源类型和切片规则 MapReduce框架提供了很多功能子类

核心子类:
        DBInputFormat:将数据库中的数据作为MR程序的输入数据
        FileInputFormat:将hdfs或本地文件作为MR程序的输入数据

源码阅读:

package org.apache.hadoop.mapred;// InputFormat对象
public abstract class InputFormat<K, V> {TODO:1.将Mr程序输入的文件进行逻辑切分,并返回切片对象集合注意:1.这里的分割是逻辑分割,不是物理分割哦!!!public abstract List<InputSplit> getSplits(JobContext context) throws IOException, InterruptedException;TODO:1.为指定的切片对象,创建记录阅读器
public abstract RecordReader<K,V> createRecordReader(InputSplit split,TaskAttemptContext context) throws IOException, InterruptedException;
}// 切片对象
public class FileSplit extends InputSplit implements Writable {// 该切片 所属文件的路径private Path file;// 切片起始位置(文件偏移量)private long start;// 切片长度private long length;// 存储切片的hostsprivate String[] hosts;private SplitLocationInfo[] hostInfos;
}

2. FileInputFormat

FileInputFormat是当MR程序为hdfs或本地文件时,处理数据源的基类
它实现了很多具体方法,比如切片方法(getSplits)和isSplitable判断文件是否可切片

2.1 getSplits-切片规则

1.对job输入路径中的每个文件单独切片
2.判断每个文件是否支持切片
         true : 按照指定切片大小对文件切片
         false: 文件整体作为一个切片

2.2 怎样设置切片大小

// 切片大小计算规则
splitSize = Math.max(minSize, Math.min(maxSize, blockSize))// 切片大小设置参数
set mapreduce.input.fileinputformat.split.minsize=256000000 或 
set mapred.min.split.size=256000000set mapreduce.input.fileinputformat.split.maxsize=256000000 或 
set mapred.min.split.size=256000000//场景1: 没有设置minsize、maxsize参数
maxSize=Long.MAX_VALUE
minSize=1L
blockSize=本地目录32M|HDFS目录128M或256M(看hdfs文件块具体配置)splitSize=blockSize(32M|128M|256M)//场景2: 设置minsize、maxsize参数
maxSize=mapreduce.input.fileinputformat.split.maxSize
minSize=mapreduce.input.fileinputformat.split.minsize
blockSize=本地目录32M|HDFS目录128M或256M(看hdfs文件块具体配置)需求1: splitSize > blockSize
set mapreduce.input.fileinputformat.split.minSize=大于blockSize值需求2: splitSize < blockSize
set mapreduce.input.fileinputformat.split.maxSize=小于blockSize值

2.3 源码阅读

可以看之前写的例子 🌰


3. CombineFileInputFormat

转载1:  https://blog.csdn.net/hummingbird0/article/details/115084843

转载2:  https://blog.csdn.net/qq_35241080/article/details/106065442
 

相关文章:

源码阅读笔记 InputFormat、FileInputFormat、CombineTextInputFormat

1. InputFormat InputFormat是MapReduce框架提供的用来处理job输入的基类 它主要定义了三个功能&#xff1a; 1.验证job输入是否合法 2.对输入文件进行逻辑切片(InputSplit)&#xff0c;然后将每个切片分发给单独的MapTask 3.提供切片读取器(Re…...

二值图像骨架线提取

二值图像骨架线提取HilditchThin算法Rosenfeld算法OpenCV_Contrib中的算法示例其他细化算法查表法HilditchThin的另一种算法参考二值图像骨架线提取算法&#xff1a;HilditchThin算法、Rosenfeld算法、OpenCV_Contrib中的算法 HilditchThin算法 1、使用的8邻域标记为&#xff…...

规划数据指标体系方法(上)——OSM 模型

之前我已经有写过文章讲了数据指标体系的搭建思路&#xff0c;但有同学还是不太清楚要从何入手&#xff0c;今天我就来跟大家讲一讲搭建数据指标体系之前第一步要先做的事情——规划数据指标体系。 规划数据指标体系&#xff0c;在业内有三种比较常见的方法&#xff0c;分别是&…...

做程序界中的死神,继续提升灵力上限

标题解读&#xff1a;标题中的死神&#xff0c;是源自《死神》动漫里面的角色&#xff0c;斩魂刀是死神的武器&#xff0c;始解是斩魂刀的初始解放形态&#xff0c;卐解是斩魂刀的觉醒解放形态&#xff0c;也是死神的大招。意旨做程序界中程序员的佼佼者&#xff0c;一步一步最…...

[数据结构]:11-冒泡排序(顺序表指针实现形式)(C语言实现)

目录 前言 已完成内容 冒泡排序实现 01-开发环境 02-文件布局 03-代码 01-主函数 02-头文件 03-PSeqListFunction.cpp 04-SortCommon.cpp 05-SortFunction.cpp 结语 前言 此专栏包含408考研数据结构全部内容&#xff0c;除其中使用到C引用外&#xff0c;全为C语言代…...

Java实验报告经验总结

每一段是每一次实验报告写的经验总结&#xff0c;一共是一学期的内容 文章目录一二三四五六一 ~~~~~分析&#xff1a;这次做程序中也出了不少问题&#xff0c;究其根本还是没有理解清楚各语句功能和其应用。 ~~~~~比如说&#xff1a;当我们在定义浮点数时&#xff0c;数字的后面…...

ESP32使用TCP HTTP访问API接口JSON解析获取数据

ESP32使用TCP HTTP访问API接口JSON解析获取数据API接口代码解析获取时间代码烧录效果总结API接口 单片机常用的API接口基本都是返回的一串JSON格式的数据&#xff0c;这里以ESP32联网获取时间信息作为获取API数据的示例&#xff0c;以便后续移植使用。 很多功能性的API接…...

spring security 实现自定义认证和登录(4):使用token进行验证

前面我们实现了给客户端下发token&#xff0c;虽然客户端拿到了token&#xff0c;但我们还没处理客户端下一次携带token请求时如何验证&#xff0c;我们想要实现拿得到token之后&#xff0c;只需要验证token&#xff0c;不需要用户再携带用户名和密码了。 1. 禁用 UsernamePass…...

戴眼镜检测和识别2:Pytorch实现戴眼镜检测和识别(含戴眼镜数据集和训练代码)

Pytorch实现戴眼镜检测和识别(含戴眼镜数据集和训练代码) 目录 Pytorch实现戴眼镜检测和识别(含戴眼镜数据集和训练代码) 1.戴眼镜检测和识别方法 2.戴眼镜数据集 3.人脸检测模型 4.戴眼镜分类模型训练 &#xff08;1&#xff09;项目安装 &#xff08;2&#xff09;准…...

信息收集之Google Hacking

Google HackingGoogleHacking作为常用且方便的信息收集搜索引擎工具&#xff0c;它是利用谷歌搜索强大&#xff0c;可以搜出不想被看到的后台、泄露的信息、未授权访问&#xff0c;甚至还有一些网站配置密码和网站漏洞等。掌握了Google Hacking基本使用方法&#xff0c;或许下一…...

【面试题】如何避免使用过多的 if else?

大厂面试题分享 面试题库前后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★地址&#xff1a;前端面试题库一、引言相信大家听说过回调地狱——回调函数层层嵌套&#xff0c;极大降低代码可读性。其实&#xff0c;if-else层层嵌套&#xff0c;如下图…...

oneblog_justauth_三方登录配置【Gitee】

文章目录oneblog添加第三方平台gitee中创建三方应用完善信息oneblog添加第三方平台 1.oneblog管理端&#xff0c;点击左侧菜单 网站管理——>社会化登录配置管理 ,添加一个社会化登录 2.编辑信息如下&#xff0c;选择gitee平台后复制redirectUri,然后去gitee获取clientId和…...

33- PyTorch实现分类和线性回归 (PyTorch系列) (深度学习)

知识要点 pytorch最常见的创建模型的方式, 子类 读取数据: data pd.read_csv(./dataset/credit-a.csv, headerNone) 数据转换为tensor: X torch.from_numpy(X.values).type(torch.FloatTensor) 创建简单模型: from torch import nn model nn.Sequential(nn.Linear(15, 1…...

C++基础——Ubuntu下编写C++环境配置总结(C++基本简介、Ubuntu环境配置、编写简单C++例程)

【系列专栏】&#xff1a;博主结合工作实践输出的&#xff0c;解决实际问题的专栏&#xff0c;朋友们看过来&#xff01; 《QT开发实战》 《嵌入式通用开发实战》 《从0到1学习嵌入式Linux开发》 《Android开发实战》 《实用硬件方案设计》 长期持续带来更多案例与技术文章分享…...

项目管理中,导致进度失控的五种错误

项目管理中对工期的控制主要是进度控制&#xff0c;在项目进行中中&#xff0c;由于项目时间跨度长&#xff0c;人员繁杂&#xff0c;如果管理不规范&#xff0c;就容易导致项目进度滞后&#xff0c;如何管理好施工进度是管理者需要解决的问题之一。 1、项目计划缺乏执行力 安…...

C# 中的abstract和virtual

重新理解了下关键字abstract,做出以下总结&#xff1a; 1.标记为abstract的类不能实例化&#xff0c;但是依然可以有构造函数&#xff0c;也可以重载构造函数&#xff0c;在子类中调用 2.abstract类中可以有abstract标记的方法和属性&#xff0c;也可以没有&#xff0c;被标记…...

第六十周总结——React数据管理

React数据管理 代码仓库 React批量更新 React中的批量更新就是将多次更新合并处理&#xff0c;最终只渲染一次&#xff0c;来获得更好的性能。 React18版本之前的批量更新 // react 17 react-dom 17 react-scripts 4.0.3 import * as ReactDOM from "react-dom"…...

Springboot之@Async异步指定自定义线程池使用

开发中会碰到一些耗时较长或者不需要立即得到执行结果的逻辑&#xff0c;比如消息推送、商品同步等都可以使用异步方法&#xff0c;这时我们可以用到Async。但是直接使用 Async 会有风险&#xff0c;当我们没有指定线程池时&#xff0c;他会默认使用其Spring自带的 SimpleAsync…...

视频知识点(23)- TS格式详解指南

*《音视频开发》系列-总览*(点我) 一、格式简介 TS视频封装格式,是一种被广泛应用的多媒体文件格式。它的全称是MPEG2-TS,其中TS是“Transport Stream”的缩写。TS(Transport Stream)流是一种传输流,它由固定长度(188 字节)的 TS 包组成,TS 包是对PES包的一种封装方式…...

linux篇【16】:传输层协议<后序>

目录 六.滑动窗口 &#xff08;1&#xff09;发送缓冲区结构 &#xff08;2&#xff09;滑动窗口介绍 &#xff08;3&#xff09;滑动窗口不一定只会向右移动。滑动窗口可以变大也可以变小。 &#xff08;4&#xff09;那么如果出现了丢包, 如何进行重传? 这里分两种情况…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用&#xff0c;用户可以通过网页界面上传黑白视频&#xff0c;系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观&#xff0c;不需要了解技术细节。 效果图 ​二、实现思路 总体思路&#xff1a; 用户通过Gradio界面上…...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面&#xff0c;接口成功记录日志&#xff0c;失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...