Hadoop(一)

Hadoop数据类型–MapReduce的输入
1、Writable和WritableComparable接口
Writable含write()和readFileds()两方法,当数据在网络上传输或从硬盘读写时,提供数据的序列化和反序列化机制,所有用作mapper/reducer输入输出值的类型都须实现(v1/v2/v3),用作键的k1,k2,k3还需实现Comparable接口

2、wrapper类
(1)原始包装类:Boolean/Byte/Double/Float/Int/Long/VInt/VLong+Writable
(2)数组包装类:Array/TwoDArray+Writable
(3)Map包装类:MapWritable/AbstarctMapWritable/SortedMapWritable
例:

BoolenWritable b1=new BooleanWritable(true);
IntWritable i1=new IntWritable(1);
ArrayWritable a1=new ArrayWritable(IntWritable.class);
NullWritable n1=NullWritable.get();

3、InputFormat和RecordReader
InputFormat类的功能:(1)将输入文件切分成map处理所需的split;
(2)创建RecordReader,从一个split生成键值对。
RecordReader:调用getNextKeyValue()并返回一个布尔值指明下一个键值对是否可用
组合使用InputFormat和RecordReader可以将许多类型的I/O转为MapReduce所需的键值对

4、当输入文件明显小于HDFS的块容量时,会出现小文件问题,可以:
(1)在存储文件和执行作业前,先执行预处理步骤,SequenceFile(序列文件)和TFile格式
(2)使用CombineFileInputFormat将多个小文件合并到一个InputSplit中

public class TestCombineFileInputFormat extends CombineFileInputFormat<LongWritable,Text>{
@Override
public RecordReader<LongWritable,Text> {
createRecordReader(InputSplit inputsplit,TaskAttemptContext taskAttemptContext)throws Exception{
return new (CombineFileSplit)inputsplit,taskAttemptContext,TestCombineFileRecordReader.class);
}
}
}

在驱动程序和mapper中设置InputFormat:job.setInputFormatClass(TestCombineFileInputFormat.class);

5、输入过滤
实现过滤时需要拓展Configured类,实现PathFilter接口,在驱动类中,告诉作业过滤器的存在:

FileInputFormat.setInputPathFilter(job,TestFilter.class);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值