如何在PartitionerHadoop中使用分布式缓存?

isr3a4wc  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(363)

我是hadoop和mapreduce分区器的新手。我想写我自己的分区器,我需要在分区器中读取一个文件。我已经搜索了很多次,我知道我应该使用分布式缓存。我的问题是如何在hadoop分区器中使用分布式缓存?我应该在我的分区中写什么?

public static class CaderPartitioner extends Partitioner<Text,IntWritable> {

    @Override
    public int getPartition(Text key, IntWritable value, int numReduceTasks) {
        return 0; 
    }
}

谢谢

nnt7mjpx

nnt7mjpx1#

解决这个问题的最简单方法是查看hadoop附带的示例分区器。在这种情况下,要看的是 TotalOrderPartitioner 它读入一个预先生成的文件来帮助引导密钥。
您可以在这里找到源代码,下面是演示如何使用它的要点。
首先,您需要告诉分区程序在mapreduce jobs驱动程序(在hdfs上)中可以找到文件的位置:

// Define partition file path.
Path partitionPath = new Path(outputDir + "-part.lst");
// Use Total Order Partitioner.
job.setPartitionerClass(TotalOrderPartitioner.class);
// Generate partition file from map-only job's output.
TotalOrderPartitioner.setPartitionFile(job.getConfiguration(), partitionPath);

TotalOrderPartitioner 你会明白的 implements Configurable 这样它就可以访问配置,从而获得hdfs上文件的路径。
文件在 public void setConf(Configuration conf) 方法,创建分区器对象时将调用该方法。此时,您可以读取文件并执行任何设置。
我认为您可以重用这个分区器中的大量代码。

相关问题