如何在分区程序 hadoop 中使用分布式缓存?
How to use Distributed cache in partitioner hadoop?
我是 hadoop 和 mapreduce 的新手 partitioner.I 想编写自己的分区程序,我需要在分区程序中读取文件。我搜索了很多次,我知道我应该使用分布式缓存。这是我的问题,我如何在我的 hadoop 分区程序中使用分布式缓存?我应该在我的分区程序中写什么?
public static class CaderPartitioner extends Partitioner<Text,IntWritable> {
@Override
public int getPartition(Text key, IntWritable value, int numReduceTasks) {
return 0;
}
}
谢谢
解决这个问题的最简单方法是查看 hadoop 中包含的示例分区程序。在这种情况下,要查看的是 TotalOrderPartitioner
,它读取预生成的文件以帮助直接键。
您可以找到显示如何使用它的源代码 here, and here's 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对象时会调用该方法。此时您可以阅读该文件并进行任何您想要的设置。
我认为您可以重复使用此分区程序中的大量代码。
我是 hadoop 和 mapreduce 的新手 partitioner.I 想编写自己的分区程序,我需要在分区程序中读取文件。我搜索了很多次,我知道我应该使用分布式缓存。这是我的问题,我如何在我的 hadoop 分区程序中使用分布式缓存?我应该在我的分区程序中写什么?
public static class CaderPartitioner extends Partitioner<Text,IntWritable> {
@Override
public int getPartition(Text key, IntWritable value, int numReduceTasks) {
return 0;
}
}
谢谢
解决这个问题的最简单方法是查看 hadoop 中包含的示例分区程序。在这种情况下,要查看的是 TotalOrderPartitioner
,它读取预生成的文件以帮助直接键。
您可以找到显示如何使用它的源代码 here, and here's 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对象时会调用该方法。此时您可以阅读该文件并进行任何您想要的设置。
我认为您可以重复使用此分区程序中的大量代码。