如何在hadoop map reduce中写avro输出?

舍哈尔

我编写了一个Hadoop字数统计程序,该程序接受TextInputFormat输入并应该以avro格式输出字数统计。

Map-Reduce作业运行良好,但可以使用诸如more或的unix命令读取此作业的输出vi我期望此输出不可读,因为avro输出为二进制格式。

我只使用了mapper,reducer不存在。我只想尝试avro,所以我不担心内存或堆栈溢出。遵循映射器的代码

public class WordCountMapper extends Mapper<LongWritable, Text, AvroKey<String>, AvroValue<Integer>> {

    private Map<String, Integer> wordCountMap = new HashMap<String, Integer>();

    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        String[] keys = value.toString().split("[\\s-*,\":]");
        for (String currentKey : keys) {
            int currentCount = 1;
            String currentToken = currentKey.trim().toLowerCase();
            if(wordCountMap.containsKey(currentToken)) {
                currentCount = wordCountMap.get(currentToken);
                currentCount++;
            }
            wordCountMap.put(currentToken, currentCount);
        }
        System.out.println("DEBUG : total number of unique words = " + wordCountMap.size());
    }

    @Override
    protected void cleanup(Context context) throws IOException, InterruptedException {
        for (Map.Entry<String, Integer> currentKeyValue : wordCountMap.entrySet()) {
            AvroKey<String> currentKey = new AvroKey<String>(currentKeyValue.getKey());
            AvroValue<Integer> currentValue = new AvroValue<Integer>(currentKeyValue.getValue());
            context.write(currentKey, currentValue);
        }
    }
}

驱动代码如下:

public int run(String[] args) throws Exception {

    Job avroJob = new Job(getConf());
    avroJob.setJarByClass(AvroWordCount.class);
    avroJob.setJobName("Avro word count");

    avroJob.setInputFormatClass(TextInputFormat.class);
    avroJob.setMapperClass(WordCountMapper.class);

    AvroJob.setInputKeySchema(avroJob, Schema.create(Type.INT));
    AvroJob.setInputValueSchema(avroJob, Schema.create(Type.STRING));

    AvroJob.setMapOutputKeySchema(avroJob, Schema.create(Type.STRING));
    AvroJob.setMapOutputValueSchema(avroJob, Schema.create(Type.INT));

    AvroJob.setOutputKeySchema(avroJob, Schema.create(Type.STRING));
    AvroJob.setOutputValueSchema(avroJob, Schema.create(Type.INT));


    FileInputFormat.addInputPath(avroJob, new Path(args[0]));
    FileOutputFormat.setOutputPath(avroJob, new Path(args[1]));

    return avroJob.waitForCompletion(true) ? 0 : 1;
}

我想知道avro输出的外观,以及我在此程序中做错了什么。

维亚切斯拉夫·罗迪诺诺夫(Viacheslav Rodionov)

Avro库的最新版本包括其MRv2采用的ColorCount示例的更新示例我建议您看看它,使用与Reduce类中相同的模式,或者只是扩展AvroMapper请注意,对于在Hadoop上运行Avro而言,使用Pair类代替AvroKey + AvroValue也是必不可少的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在scala中编写hadoop map reduce程序

来自分类Dev

hadoop map reduce程序中如何在映射器代码中获取输入文件名

来自分类Dev

Hadoop,成功完成Map Reduce作业,但没有输出

来自分类Dev

hadoop map-reduce:如何部署非jar文件

来自分类Dev

如何为Hadoop的Map-reduce作业设置配置?

来自分类Dev

Hadoop Map Reduce-如何将分组与排序分开?

来自分类Dev

如何在map reduce程序中解析PDF文件?

来自分类Dev

Hadoop Map Reduce哈希程序

来自分类Dev

Hadoop Map-Reduce编程

来自分类Dev

Map / Reduce:完成后如何输出Hashmap?

来自分类Dev

如何在hadoop中以XML格式获取reducer输出

来自分类Dev

如何在hadoop中添加硬盘

来自分类Dev

如何在hadoop中并行解析XML

来自分类Dev

减少Hadoop中的Map Flow

来自分类Dev

如何在Android中解析List <Map>?

来自分类Dev

如何在Scala Map中设置值?

来自分类Dev

如何在Hibernate中获取<map>

来自分类Dev

如何在Resteasy中接收Map参数?

来自分类Dev

如何在VM中更改Map的MapType?

来自分类Dev

map()函数如何在python中工作?

来自分类Dev

如何在.map中返回异步函数?

来自分类Dev

如何在.map中访问Tensor形状?

来自分类Dev

如何在Map中覆盖toString ...?

来自分类Dev

如何在Java中同步Map <-> MySQL?

来自分类Dev

如何在Resteasy中接收Map参数?

来自分类Dev

如何在Scala Map中设置值?

来自分类Dev

如何在Android中解析List <Map>?

来自分类Dev

如何在reactjs的map函数中连接

来自分类Dev

如何在 Dataweave 中调试 MAP 功能?