2016-09-20 58 views
1

我是hadoop和mapreduce分區程序中的新成員。我想寫自己的分區程序,並且需要在分區程序中讀取文件。我搜索了很多次,我知道我應該使用分佈式緩存。這是我的問題,我該如何在我的hadoop分區器中使用分佈式緩存?我應該在分區器中寫什麼?如何在分區器hadoop中使用分佈式緩存?

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

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

感謝

回答

1

工作了這一點,最簡單的方法是看Partitioners包括使用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)方法中讀取,該方法將在創建分區程序對象時調用。在這一點上,你可以閱讀文件並做任何你想要的設置。

我想你可以重新使用這個分區器的很多代碼。

+0

感謝您的回覆。我很抱歉,但我真的很新,在這方面,我不明白這個分區器如何讀取文件。你有可能給我一個更簡單的例子嗎?謝謝 – saeednasehi

+0

我didi它。謝謝 !謝謝 :)) – saeednasehi