1

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

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

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

谢谢

4

1 回答 1

1

解决这个问题的最简单方法是查看 hadoop 中包含的示例分区器。在这种情况下,要查看的是TotalOrderPartitioner读取预先生成的文件以帮助直接键。

你可以在这里找到源代码,这里是展示如何使用它的要点。

首先,您需要告诉分区程序在您的 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 对象时调用。此时,您可以读取文件并进行任何您想要的设置。

我认为您可以重用此分区程序中的许多代码。

于 2016-09-20T09:18:28.920 回答