如何在分区器hadoop中使用分布式缓存?

时间:2016-09-20 07:00:03

标签: hadoop mapreduce partitioner

我是hadoop和mapreduce分区器的新手。我想编写自己的分区器,我需要在分区器中读取文件。我已经搜索了很多次,我得到了我应该使用分布式缓存。这是我的问题,我怎么能在我的hadoop分区器中使用分布式缓存?我应该在我的分区中写什么?

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

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

由于

1 个答案:

答案 0 :(得分:1)

最简单的方法是查看hadoop附带的示例分区程序。在这种情况下,要查看的是TotalOrderPartitioner,它会读取预生成的文件以帮助定位键。

您可以找到源代码here,此处gist显示如何使用它。

首先,您需要告诉分区程序可以在mapreduce作业驱动程序中找到该文件(在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)方法中读取,该方法将在创建Partitioner对象时调用。此时,您可以读取文件并执行任何您想要的设置。

我认为您可以重复使用此分区程序中的大量代码。