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

Posted

技术标签:

【中文标题】如何在分区器 hadoop 中使用分布式缓存?【英文标题】:How to use Distributed cache in partitioner hadoop? 【发布时间】:2016-09-20 07:00:02 【问题描述】:

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

public static class CaderPartitioner extends Partitioner<Text,IntWritable> 

    @Override
    public int getPartition(Text key, IntWritable value, int numReduceTasks) 
        return 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对象时被调用。此时您可以读取文件并进行任何您想要的设置。

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

【讨论】:

感谢您的回复。我很抱歉,但我在这个领域真的很陌生,我不明白这个分区程序是如何读取文件的。你可以给我一个更简单的例子吗?谢谢 我做了。谢谢 !谢谢:))

以上是关于如何在分区器 hadoop 中使用分布式缓存?的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop分布式缓存通过通用选项-文件

Hadoop中分布式缓存的困惑

读取驱动程序 Hadoop 中的文件

使用自定义分区器解决Spark DataSet数据分区不均匀的问题

Hadoop 2.x 中的分布式缓存

Hadoop 分布式缓存 (Cloudera CH3)