HDFS读和写

hadoop处理的输入数据通常很大,以GB或TB计。hadoop将大文件分割为多个块(分片、Input split),分别存在多个机器上。这样,当需要分析此大文件时,MapReduce程序在多台机器上并行处理。

分片不能太大,如果所有数据在一个分片内,那就无法并行处理;

分片不能太小,启动和停止每个分片也需要消耗时间。

HDFS使用FSDataInputStream读取文件,提供了随机读功能。


Mapper


Reducer


Partitioner

对于指定的Key和Value,选择对应的Reducer。

并不是整个MapReduce程序只有一个Reducer。

Combiner

在Mapper本地进行一次reduce操作


InputFormat

分割和读取文件的方式

HDFS提供的常用的:

TextInputFormat:

KeyValueTextInputFormat:

SequenceFileInputFormat:

NLineInputFormat:

也可以实现自己的InputFormat,只需实现两个方法:

getSplits:分割成多个输入分片,每个map任务分配一个分片。

getRecordReader:顺序读取指定分片中的所有记录,解析出Key和Value。

通常继承自FileInputFormat,已经实现了getSPlits,只需自己实现RecordReader即可。


OutputFormat

当MapReduce处理文件结束后,需要每个reducer把自己的输出写入到各自的文件里。

输出文件放在一个公用目录中,命名为part-nnnnn,nnnnn为reducer的分区ID。

相对应的,由RecordWriter对输出进行格式化。

HDFS提供的常用的:

TextOutputFormat:

SequenceFileOutputFormat:可以再由SequenceFileInputFormat再进行读取,这样可以串联起来,作为中间结果。

NullOutputFormat:








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值