MapReduce 程序编程框架

gaofei8704

贡献于2013-06-19

字数:2254 关键词: 分布式/云计算/大数据

MapReduce程序编程框架 ——HuangFx 1 MapReduce作业框架 注解: InputFormat:输入格式 OutputFormat:输出格式 Mapper:map阶段工作 Reducer:reduce阶段工作 2 程序员需要实现的类和方法 2.1 InputFormat接口 程序员需要实现该接口以指定输入文件的内容格式 public interface InputFormat { getSplits(); // 将输入数据分块,每一块交给一个map task处理 getRecordReader(); // 每一块每条记录解析成key/value对 } 默认的InputFormat是TextInputFormat,它将文件中的每一行作为value,该行的偏移量为key。 默认的key value分割为‘\t’,想要修改,则使用 conf.set(“key.value.separator.in.input.line”,”,”); 2,2 Mapper接口 程序员需继承Mapper接口实现自己的Mapper Mapper中必须实现的函数是 void map() { k1 key, v1 value, OutputCollector output, Reporter reporter } k1,v1 是通过getRecordReader()得到的处理对象 OutPutCollector获取map的输出结果 Reporter保存了当前task处理进度 2.3 Partitioner接口 程序员需继承该接口实现自己的Partitioner以指定map tast产生的key/value对交给哪个reduce task处理,好的Partitioner能让每个reduce task处理的数据相近,从而达到负载均衡。 getPartition(K2 key, V2 value,int numPartitions); 函数返回对于的reduce task ID 用户也可以不提供Partitioner,这是Hadoop会使用默认的。 2.4 Combiner Combiner使得map task与reduce task之间的数据传输量大大减小,可明显提高性能。 2.5 Reducer接口 程序员需继承Reducer接口实现自己的Mapper void reduce(K2 key, Iterator values,OutputCollector output,Reporter reporter) 2.6 OutputFormat 程序员通过OutputFormat指定输出文件的内容格式 3 分布式缓存 Hadoop自带一个分布式缓存,即DistrobutedCache对象,方便map task或者reduce tesk之间共享信息。 摘自 http://dongxicheng.org/mapreduce/mapreduce/hadoop-streaming-programming/ http://www.open-open.com/lib//view/open1329385847468.html 3 类型参考 TextInputFormat 作为默认的文件输入格式,用于读取纯文本文件,文件被分为一系列以LF或者CR结束的行,key是每一行的位置偏移量,是LongWritable类型的,value是每一行的内容,为Text类型。 KeyValueTextInputFormat 同样用于读取文件,如果行被分隔符(缺省是tab)分割为两部分,第一部分为key,剩下的部分为value;如果没有分隔符,整行作为 key,value为空。 SequenceFileInputFormat 用于读取sequence file。 sequence file是Hadoop用于存储数据自定义格式的binary文件。它有两个子类:SequenceFileAsBinaryInputFormat,将 key和value以BytesWritable的类型读出;SequenceFileAsTextInputFormat,将key和value以Text类型读出。 SequenceFileInputFilter 根据filter从sequence文件中取得部分满足条件的数据,通过 setFilterClass指定Filter,内置了三种 Filter,RegexFilter取key值满足指定的正则表达式的记录;PercentFilter通过指定参数f,取记录行数%f==0的记录;MD5Filter通过指定参数f,取MD5(key)%f==0的记录。 NLineInputFormat 0.18.x新加入,可以将文件以行为单位进行split,比如文件的每一行对应一个map。得到的key是每一行的位置偏移量(LongWritable类型),value是每一行的内容,Text类型。 CompositeInputFormat,用于多个数据源的join。 TextOutputFormat,输出到纯文本文件,格式为 key + " " + value。 NullOutputFormat,hadoop中的/dev/null,将输出送进黑洞。 SequenceFileOutputFormat, 输出到sequence file格式文件。 MultipleSequenceFileOutputFormat, MultipleTextOutputFormat,根据key将记录输出到不同的文件。 DBInputFormat和DBOutputFormat,从DB读取,输出到DB。

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 7 金币 [ 分享文档获得金币 ]
0 人已下载

下载文档

相关文档