hbase导出到平面文件

f0brbegy  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(381)

我是hadoop的新手。。。
我在一个hbase表中有一堆数据,我需要将这些数据导出(通过一些小的转换)到一个平面文件中。为此,我正在构建一个mapreduce作业,该作业扫描表并将数据Map到具有textoutputformat的文本类型。
像这样:

TableMapReduceUtil.initTableMapperJob("tablename",      // input table
    scan,             // Scan instance to control CF and attribute selection
    MyMapper.class,   // mapper class
    Text.class,             // mapper output key
    Text.class,             // mapper output value
    job);

job.setNumReduceTasks(1);
job.setOutputFormatClass(TextOutputFormat.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);

FileOutputFormat.setOutputPath(job, new Path("/tmp/mydirectory"));

我的Map绘制者:

private static class MyMapper extends TableMapper<Text, Text> {
    public void map(ImmutableBytesWritable row, Result result, Context context) throws IOException,
        InterruptedException {
        String json = new String(result.getValue("cf".getBytes(), "qualifier".getBytes()));

        StringBuilder line = new StringBuilder();

        //...builds the line up

        Text k = new Text("filename-20141205.txt");
        Text lineText = new Text(line.toString());
        context.write(k, lineText);
    }
}

然而,我得到的是一个包含密钥和part-r-00000文件中的数据的文件。我想我需要一个减速机来完成这项工作,但我不确定它是什么样子。
身份缩减器能用吗?除了textoutputformat,还有更好的方法解决这个问题吗?

uubf1zoe

uubf1zoe1#

这起作用了:

private static class MyOutputFormat<K, V> extends TextOutputFormat<K, V>{
    @Override
    public Path getDefaultWorkFile(TaskAttemptContext context, String extension) throws IOException {
        FileOutputCommitter committer = 
            (FileOutputCommitter) getOutputCommitter(context);
          return new Path(committer.getWorkPath(), "my-file-name.txt");
    }
}

相关问题