2011-12-08 13 views
1

私の目的は、Hbaseテーブルからフラット(csvフォーマット)ファイルにデータを移行することです。 私は使用されています TableMapReduceUtil.initTableMapperJob(テーブル名、スキャン、 GetCustomerAccountsMapper.class、Text.class、Result.class、 ジョブ); はHBaseテーブルをスキャンし、MapperはTableMapperを使用します。 Reducerにローカル(またはHdfs)ファイルシステムにRow値(フラット形式で正規化されている)をダンプさせる際に、私の挑戦があります。 私の問題はReducerのログを見ることができず、Reducerで言及したパス上のファイルを見ることができません。HBaseからFileSystemへのデータの移行。 (Reducerの出力をローカルまたはHadoopファイルシステムに書き込む)

これは私の2番目または3番目のMR仕事と最初の深刻なものです。 2日間頑張ってから、私は目標を達成する方法がまだ分かりません。

誰かが正しい方向を示すことができたらうれしいです。減速出力の

public void reduce(Text key, Iterable<Result> rows, Context context) 
      throws IOException, InterruptedException { 
FileSystem fs = LocalFileSystem.getLocal(new Configuration()); 
    Path dir = new Path("/data/HBaseDataMigration/" + tableName+"_Reducer" + "/" +  key.toString()); 

FSDataOutputStream fsOut = fs.create(dir,true); 

for (Result row : rows) { 
try { 
String normRow = NormalizeHBaserow(
Bytes.toString(key.getBytes()), row, tableName); 
fsOut.writeBytes(normRow); 

//context.write(new Text(key.toString()), new Text(normRow)); 
    } catch (BadHTableResultException ex) { 
    throw new IOException(ex); 
} 
} 
fsOut.flush();   
fsOut.close(); 

マイコンフィギュ事前に

Path out = new Path(args[0] + "/" + tableName+"Global"); 
FileOutputFormat.setOutputPath(job, out); 

おかげ - - HDFSに削減し、一度に使用HDFS FSを終えていないのはなぜPanks

答えて

0

ここ

は私の減速コードですファイルをエクスポートする

hadoop fs -get /user/hadoop/file localfile 

reduceフェーズで処理したい場合は、this article on OutputFormat InfoQ

を参照してください。
関連する問題