2016-12-13 3 views
0

Hadoopプログラムを実行しました。で、ローカルFSからHDFSにコピー中にファイルをマージしました。コードを実行中に、Eclipseから実行中に配列外の配列を取得しています。しかし、私は外部のjarファイルを作成し、HadoopのCLIを実行すると、空のファイルが作成されました。コードのロジックが正しくない場合、get mergeコマンドを使用せずにhdfsのディレクトリにある複数のファイルをマージする方法がありますか?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(); 

} 

} 

} 

答えて

0
hadoop fs -cat [dir]/* | hadoop fs -put - [destination file] 
+0

このコードスニペットは、(http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)[説明を含む]の質問は、本当に助け解決するかもしれないがあなたの投稿の質を向上させる。将来読者の質問に答えていることを覚えておいてください。そうした人々はあなたのコード提案の理由を知らないかもしれません。 – DimaSan

関連する問題