私の目的は、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