我有一个以日期值作为键的数据集。但是,我的数据偏斜,这意味着日期越新,以该日期为键的记录就越多。因此,哈希分区(Hadoop MR中的默认值)不合适,因为它会统一分配密钥,从而使特定的化简器过载。这就是为什么我决定编写一个自定义分区程序的原因。关于如何在Hadoop MR中实现范围分区的任何线索,因为到目前为止我的研究仅涉及研究论文。
答案 0 :(得分:0)
我认为没有太多需要研究的东西。
该类为org.apache.hadoop.mapreduce.Partitioner
,您可以选择实现org.apache.hadoop.conf.Configurable
,作为将参数“传递给分区程序”的一种方式。例如,与键的哈希值相比,BinaryPartitioner允许您设置要在其上分区的字节数组中的左右偏移量。根据您的数据,这甚至可能足够好
然后,通过扩展Partitioner类,必须实现getPartition
方法以根据您自己的输入数据和逻辑返回整数。您已将总分区数作为参数,因此不必担心。
然后,您只需要指定您的作业在JobConf中使用该分区程序即可。
如果尝试使用Spark,Hive,Pig等执行此操作,则需要确保您的班级在工作的YARN类路径上