如何在不使用get merge命令的情况下合并hdfs目录中的文件?

时间:2016-12-13 07:57:14

标签: apache merge mapreduce hdfs

我已经完成了 Hadoop In action 中的程序,用于在运行时从本地FS复制到HDFS.But时合并文件,同时执行代码时,我在运行时获取数组超出绑定的异常在日食。但是当我创建外部jar文件并运行它Hadoop CLI时,创建了空文件。如果代码的逻辑不正确,有没有其他方法可以在不使用get merge命令的情况下合并hdfs目录中的多个文件?

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.FSDataInputStream;

import org.apache.hadoop.fs.FSDataOutputStream;

import org.apache.hadoop.fs.FileStatus;

import org.apache.hadoop.fs.FileSystem;

import org.apache.hadoop.fs.Path;

public class PutMerge {

public static void main(String[] args) throws IOException
{
Configuration conf = new Configuration();

FileSystem hdfs = FileSystem.get(conf);
FileSystem local = FileSystem.getLocal(conf);

Path inputDir = new Path(args[0]);
Path hdfsFile = new Path(args[1]);

try {

FileStatus[] inputFiles = local.listStatus(inputDir);
FSDataOutputStream out = hdfs.create(hdfsFile);

for(`int i=0; i<inputFiles.length;i++)`

System.out.println(inputFiles[i].getPath().getName());

FSDataInputStream in = local.open(inputFiles[i].getPath());

byte buffer[] = new byte[256];

int bytesRead = 0;

while( (bytesRead = in.read(buffer)) > 0) {

out.write(buffer, 0, bytesRead);

}

in.close();

}

out.close();

} catch (IOException e) {

    e.printStackTrace();

}

}

}

1 个答案:

答案 0 :(得分:-1)

sed '/\*filter/,/COMMIT/i\FORWARD -m physdev --physdev-in eth2 -j DROP' file