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



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

public static class CaderPartitioner extends Partitioner<Text,IntWritable> {
    @Override
    public int getPartition(Text key, IntWritable value, int numReduceTasks) {
        return 0; 
    }
}

谢谢

解决这个问题的最简单方法是查看hadoop附带的示例partitioner。在本例中,要查看的是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对象时调用。此时,您可以读取文件并进行所需的任何设置。

我认为你可以重用这个分区中的很多代码。

相关内容

  • 没有找到相关文章