如何使Hadoop MR只读取文件而不是输入路径中的文件夹

时间:2016-02-16 09:53:22

标签: hadoop mapreduce recordreader

根据我们的要求,一份工作的输出将是其他工作的输入。

通过使用多输出概念,我们在输出路径中创建一个新文件夹并将这些记录写入文件夹。这就是它的样子:

OPFolder1/MultipleOP/SplRecords-m-0000*
OPFolder1/part-m-0000* files

当新作业将输入用作OPFolder1时,我面临以下错误

org.apache.hadoop.hdfs.DistributedFileSystem.open(DistributedFileSystem.java:298)
    at org.apache.hadoop.fs.FileSystem.open(FileSystem.java:766)
    at org.apache.hadoop.mapreduce.lib.input.LineRecordReader.initialize(LineRecordReader.java:85)
    at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.initialize(MapTask.java:548)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:786)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:163)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1671)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
    org.apache.hadoop.ipc.RemoteException(java.io.FileNotFoundException): Path is not a file: /user/abhime01/OPFolder1/MultiplOP/

有没有任何方法或属性,制作hadoop,只读文件而不是文件夹。

3 个答案:

答案 0 :(得分:1)

mapreduce.input.fileinputformat.input.dir.recursive设为true。请参阅FileInputFormat doesn't read files recursively in the input path dir

答案 1 :(得分:1)

实现此目的的一种方法是通过继承默认的InputFormat类来创建自定义输入格式,以便它允许您覆盖listStatus方法。在实现liststatus方法时,您只需忽略输入目录中的目录。

示例:

$('#start').click(function(){
var mar = $('#horsewrapper').width() - $('#horse1').width();
$('#horse1').animate({"margin-left": mar},  {"duration":1000,"easing":"linear"});
 });

希望能帮助你。

答案 2 :(得分:1)

您可以使用以下路径:而不是使用InputPath的根目录: OPFolder1/part-m*, 这基本上是该目录中的所有文件,其名称以part-m开头。