Моя цель - перенести данные из таблиц Hbase в плоские (скажем, в формате CSV) файлы.
Я привык
TableMapReduceUtil.initTableMapperJob (tableName, scan,
GetCustomerAccountsMapper.class, Text.class, Result.class,
работа);
для сканирования через таблицу HBase и TableMapper for Mapper.
Моя задача заключается в том, что я заставляю Reducer выводить значения строк (которые нормализованы в плоском формате) в локальную (или Hdfs) файловую систему.
Моя проблема не в том, что я не вижу журналы Reducer и не вижу никаких файлов по пути, который я упомянул в Reducer.
Это моя вторая или третья работа по MR, и первая серьезная. После двухдневных попыток я все еще не знаю, как достичь своей цели.
Было бы здорово, если бы кто-то мог показать верное направление.
Вот мой код редуктора -
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);
Заранее спасибо - Панкс