4,读和写
MapReduce读取输入数据以及写入数据支持多种数据格式。输入数据通常驻留在较大的文件中(通常是几十或者几百
GB
甚至更大),
MapReduce
处理数据的原理是将其分割成为块,这些块可以在多个计算机上并行处理,在
hadoop
中这样的操作被称为“分片”。每个分片足够小以实现更细粒度的并行,但是也不能太小,否则启动和停止各个分片处理所需的时间开销比较大。
Hadoop读取文件使用
FSDataInputStream
而不是用
DataInputStream
是因为
FSDataInputStream
对
DataInputStream
进行了改进,
FSDataInputStream
可以实现随机读取,这就更加符合
hadoop
处理数据的“分块”策略了。
Hadoop默认将每一行作为一条记录,而键值分别为改行的字节偏移和内容。也许不会所有的数据都如此记录,所以
hadoop
支持多种数据格式,也支持自定义数据格式。
<1>InputFormat
Hadoop分割和读取文件的方式被定义在
InputFormat
接口的一个实现中。
TextInputFormat
是
InputFormat
的一个默认的实现。
常用的InputFormat
的实现类:
TextInputFormat
|
在文本文件中的每一行为一个记录,键为一行的字节偏移,值为一行的内容
Key:
LongWritable
Value:
Text
|
KeyValueText
InputFormat
|
在文本文件中的每一行为一个记录,以每行的第一个分隔符为界,分隔符之前的是键,之后的是值,分离器在属性key,value.separator.in.input.line
中设定,默认为制表符
(\t)
Key:Text
Value:Text
|
SequenceFile
InputFormat<K,V>
|
用于读取序列文件的InputFormat
。键和值由用户定义。序列文件为
Hadoop
专用的压缩二进制文件格式,他专用于一个
MapReduce
作业和其他
MapReduce
作业之间传递数据。
Key,
Value
:用户自定义
|
NLine
InputFormat
|
与TextInputFormat
相同,但每个分片一定有
N
行,
N
在属性
mapred.line.input.format.linespermap
中设定,默认是
1
Key:
LongWritable
Value:Text
|
当Hadoop
分割和读取文件的格式是
KeyValueText
InputFormat时,那么
Mapper
中的
map
方法就必须得有新的实现来符合这个新的键的类型。(因为当分割读取格式为
T
ext
InputFormat时,
key
的类型是
LongWirtable
,而分割读取格式为
KeyValueText
InputFormat时,
key
的类型是
Text
,所以
map
方法的实现要改)
注意:对于MapReduce
的输入的数据不一定都来自于外部,可能这个
MapReduce
的输入数据是其他
MapReduce
的输出数据。并且你还可以按照自己的要求去定义自定义的
InputFormat
。
<2>OutputFormat
当MapReduce
输出数据到文件时,用到的是
OutputFormat
类,输出无需分片,输出文件放在一个公用目录中,通常被命名为
part-nnnnn(
这里的
nnnnn
是
reducer
的分区
ID)
RecordWirter将输出结果进行格式化,为
RecoreReader
对输入格式进行解析。
所有的OutputFormat
都是从
FileOutputFormat
继承来的
所有的InputFormat
都是从
FileInputFormat
继承来的
你可以通过调用JobConf
对象的
setOutputFormat
方法来定制
OutputFormat
。
以下是常用的OutputFormat
的实现类:
TextOutputFormat<K,V>
|
将每个记录写为一行文本,键和值已字符串形式写入,已制表符分割。这个分隔符可以在属性mapred.textoutputformat.sqparator
中修改
|
SequeneceFileOutputFormat<K,V>
|
以Hadoop
专有序列文件格式写入键值对,与
SequenceFileInputFormat
配合使用
|
NullOutputFormat<K,V>
|
无输出
|
SequenceFileOutputFormat是以
序列文件格式输出数据,使其可以通过
SequenceFileInputFormat来读取,有助于通过中间数据结果将
MapReduce
作业串起来。
分享到:
相关推荐
赠送jar包:hadoop-auth-2.5.1.jar; 赠送原API文档:hadoop-auth-2.5.1-javadoc.jar; 赠送源代码:hadoop-auth-2.5.1-sources.jar; 赠送Maven依赖信息文件:hadoop-auth-2.5.1.pom; 包含翻译后的API文档:hadoop...
赠送jar包:hbase-hadoop2-compat-1.2.12.jar; 赠送原API文档:hbase-hadoop2-compat-1.2.12-javadoc.jar; 赠送源代码:hbase-hadoop2-compat-1.2.12-sources.jar; 赠送Maven依赖信息文件:hbase-hadoop2-compat-...
赠送jar包:hadoop-yarn-api-2.7.3.jar; 赠送原API文档:hadoop-yarn-api-2.7.3-javadoc.jar; 赠送源代码:hadoop-yarn-api-2.7.3-sources.jar; 赠送Maven依赖信息文件:hadoop-yarn-api-2.7.3.pom; 包含翻译后...
Hadoop权威指南----读书笔记
赠送jar包:hadoop-annotations-2.7.3.jar; 赠送原API文档:hadoop-annotations-2.7.3-javadoc.jar; 赠送源代码:hadoop-annotations-2.7.3-sources.jar; 赠送Maven依赖信息文件:hadoop-annotations-2.7.3.pom;...
赠送jar包:hadoop-yarn-server-applicationhistoryservice-2.6.0.jar; 赠送原API文档:hadoop-yarn-server-applicationhistoryservice-2.6.0-javadoc.jar; 赠送源代码:hadoop-yarn-server-...
赠送jar包:hbase-hadoop2-compat-1.1.3.jar; 赠送原API文档:hbase-hadoop2-compat-1.1.3-javadoc.jar; 赠送源代码:hbase-hadoop2-compat-1.1.3-sources.jar; 赠送Maven依赖信息文件:hbase-hadoop2-compat-...
赠送jar包:hadoop-hdfs-2.6.5.jar; 赠送原API文档:hadoop-hdfs-2.6.5-javadoc.jar; 赠送源代码:hadoop-hdfs-2.6.5-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-2.6.5.pom; 包含翻译后的API文档:hadoop...
本文将针对"flink-shaded-hadoop-3-uber-3.1.1.7.1.1.0-565-9.0.jar.tar.gz"这一特定压缩包,探讨Flink 1.14.0如何与Hadoop 3.x实现兼容,并深入解析其背后的原理。 Flink 1.14.0是一个强大的流处理引擎,它提供了...
赠送jar包:hbase-hadoop2-compat-1.2.12.jar; 赠送原API文档:hbase-hadoop2-compat-1.2.12-javadoc.jar; 赠送源代码:hbase-hadoop2-compat-1.2.12-sources.jar; 赠送Maven依赖信息文件:hbase-hadoop2-compat-...
Flink-1.11.2与Hadoop3集成JAR包,放到flink安装包的lib目录下,可以避免Caused by: org.apache.flink.core.fs.UnsupportedFileSystemSchemeException: Hadoop is not in the classpath/dependencies.这个报错,实现...
赠送jar包:parquet-hadoop-1.8.2.jar; 赠送原API文档:parquet-hadoop-1.8.2-javadoc.jar; 赠送源代码:parquet-hadoop-1.8.2-sources.jar; 赠送Maven依赖信息文件:parquet-hadoop-1.8.2.pom; 包含翻译后的API...
Hadoop-Eclipse-Plugin 3.1.1是该插件的一个特定版本,可能包含了一些针对Hadoop 3.x版本的优化和修复,以确保与Hadoop集群的兼容性和稳定性。 6. **使用场景**: 这个插件主要适用于大数据开发人员,特别是那些...
标题中的"apache-hadoop-3.1.0-winutils-master.zip"是一个针对Windows用户的Hadoop工具包,它包含了运行Hadoop所需的特定于Windows的工具和配置。`winutils.exe`是这个工具包的关键组件,它是Hadoop在Windows上的一...
赠送jar包:parquet-hadoop-1.10.1.jar 赠送原API文档:parquet-hadoop-1.10.1-javadoc.jar 赠送源代码:parquet-hadoop-1.10.1-sources.jar 包含翻译后的API文档:parquet-hadoop-1.10.1-javadoc-API文档-中文...
在eclipse中搭建hadoop环境,需要安装hadoop-eclipse-pulgin的插件,根据hadoop的版本对应jar包的版本,此为hadoop3.1.2版本的插件。
3. **Hadoop 2.7兼容性**:Hadoop是大数据存储和处理的基础平台,Flink的Hadoop 2.7兼容性意味着它可以无缝集成到Hadoop生态系统中,利用HDFS进行数据存储,并能与其他Hadoop组件(如Hive、Pig等)协同工作。...
hadoop-eclipse-plugin-2.7.4.jar和hadoop-eclipse-plugin-2.7.3.jar还有hadoop-eclipse-plugin-2.6.0.jar的插件都在这打包了,都可以用。
赠送jar包:flink-hadoop-compatibility_2.11-1.10.0.jar; 赠送原API文档:flink-hadoop-compatibility_2.11-1.10.0-javadoc.jar; 赠送源代码:flink-hadoop-compatibility_2.11-1.10.0-sources.jar; 赠送Maven...
3. `hadoop.exp`:这可能是一个导出文件,包含了Hadoop库对外公开的函数和符号信息。 4. `libwinutils.lib`:这是一个静态链接库文件,用于在Windows上编译和链接依赖于`winutils`的程序。 5. `hadoop.lib`:类似地...