2012-10-16 38 views
1

对于我的地图减少工作,我正在读取输入文件中的行以获取外部文件路径。所以我的文件,我用作输入看起来像:从地图上的hadoop dfs引用文件减少

/user/local/myfiles/temp1.png 

/user/local/myfiles/temp2.jpg 

/user/local/myfiles/temp3.txt 

/user/local/myfiles/temp4.txt 

.... 

而且我想对这些文件执行一些操作。我需要从我在map函数中读取的字符串路径中获取文件对象。我的问题是:我在哪里放置这些文件的实际副本,以便我可以抓住它们?我把它们放在hadoop dfs上吗?当我把它们放在本地系统上时,我得到了一个没有找到文件的错误,但是当我把它们放在hadoop文件系统上时,我得到了同样的错误(所以输入文件中的每一行都像“/ user/hadoop/input/temp1.txt“)。我可以获取文件名,但我需要能够从输入文件中列出的路径获取图像对象或文本文件对象。有没有什么方法可以从我的map函数访问dfs(或本地系统)上的文件,只需要一个字符串路径?

回答

1

您需要将它们添加到HDFS,以便它们可以从所有映射器访问。对我来说,以下工作(在0.20):

 FileSystem fs = FileSystem.get(context.getConfiguration()); 
     FSDataInputStream in = null; 
     BufferedReader br = null; 
     String line = null; 

     String file = context.getConfiguration().get(Constants.INFILE); 
     in = fs.open(new Path(file)); 
     br = new BufferedReader(new InputStreamReader(in)); 
     while((line=br.readLine())!=null) 

,我添加Constants.INFILE在驱动程序,为了不硬编码的文件名到代码。

+0

谢谢你这个工作! – user1482350