Hadoop权威指南学习(六)

收集作业统计信息,可辅助诊断系统故障,Hadoop作业的内置计数器包括map和reduce输入/输出/跳过的记录,溢出记录,文件系统读写的字节以及启动或失败的map或reduce等。用户可自定义计数器,多个计数器由一个Java枚举类型来定义,以便对计数器分组。枚举类型的名称即为组名,字段为计数器名。

相关阅读:

Hadoop权威指南学习(七)——其他

Hadoop权威指南学习(六)——MapReduce的特性

Hadoop权威指南学习(五)——MapReduce的类型和格式

Hadoop权威指南学习(四)——MapReduce工作机制

Hadoop权威指南学习(三)——MapReduce应用开发

Hadoop权威指南学习(二)——HDFS & Hadoop IO

Hadoop权威指南学习(一)——关于Mapreduce

enum Group {       counter   }   reporter.incrCounter(Group.counter, 1)  

 

public void incrCounter(String group, String counter, long amount)<span>  </span>// 动态计数器,不需要枚举类型,更方便  

2. 排序
部分排序
:默认情况下,MapReduce根据输入记录的键对数据集排序,如调用默认的HashPartitioner分区,分区内记录根据键进行排序,由RawComparator控制。【按键执行查找操作,在多文件情况下,基于MapFile具有更高效率,MapFileoutputFormat提供了getReader()和getEntry()方法】

全排序:将数据划分到不同的有序区域,区域内排好序后,合并区域即可得到全局排序结果。如何划分?才能是每个分区所含记录数大致相等?可以对键空间进行采样,获得键的近似分布,由此构建较均匀分区。Hadoop内置了若干采样器:InputSampler类实现了Sampler接口,通过InputSampler的静态方法writePartitionFile调用以创建一个顺序文件来存储定义分区的键。另一个内置采样器是IntervalSample,以一定间隔定期从划分中选择键。

辅助排序:记录在达到reducer前按键排序,但对应值并未排序,可以使用组合键方法:定义包括自然键和自然值的组合键-->键的comparator根据组合键对记录进行排序-->针对组合键的partitioner和分组comparator在进行分区和分组时均只考虑自然键。

void map(key, value, ...) {       ...       output.collect(new IntPair(key, value), NullWritable.get());<span style="white-space:pre">    </span>// 利用IntPair定义组合键    }      class FirstPartitioner ...{<span style="white-space:pre"> </span>// 自定义partitioner        public int getPartition(IntPair key, NullWritable value, int numParatitions) {           // 根据ket.getFirst()决定分区        }   }      class KeyComparator ...{       public int compare(WritableComparable w1, WritableComparable w2) {           // 根据组合键排序        }   }      class GroupCpmparator ... {       public int compare(WritableComparable w1, WritableComparable w2) {           // 根据自然键排序        }   }      public void run() {       ...       conf.setPartitionerClass(FirstPartitioner.class);       conf.setOutputKeyComparatorClass(KeyComparator.class);       conf.setOutputValueGroupingComparator(GroupComparator.class);<span style="white-space:pre">   </span>// 按自然键分组        ...   }  

3. 连接
MapReduce能执行大型数据集间的join操作,其具体实现取决于数据集的规模及分区方式。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/ppfwg.html