如何使hadoop mr成为只读文件而不是输入路径中的文件夹

58wvjzkj  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(579)

根据我们的要求,一项工作的输出将成为另一项工作的输入。
通过使用多个输出概念,我们在输出路径中创建一个新文件夹,并将这些记录写入文件夹。它看起来是这样的:

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,只读取文件而不是文件夹。

2uluyalo

2uluyalo1#

实现这一点的一种方法是通过子类化defaultinputformat类来创建自定义输入格式,这样它将允许您重写liststatus方法。在实现liststatus方法时,您只需要忽略输入目录中的目录。
例子:

for (int i = 0; i < len; ++i) {
FileStatus file = files[i];
if (!file.isDir()) {
newFiles.add(file);

希望对你有帮助。

sr4lhrrt

sr4lhrrt2#

您可以使用以下路径,而不是使用根目录作为输入路径: OPFolder1/part-m* ,它基本上是这个目录中的所有文件,其名称以 part-m .

bweufnob

bweufnob3#

mapreduce.input.fileinputformat.input.dir.recursivetrue . 请参阅fileinputformat不在输入路径dir中递归读取文件。

相关问题