整套大数据学习资料(视频+笔记)百度网盘无门槛下载:http://www.edu360.cn/news/content?id=3377

8.2.1. 准备

hadoop 小红牛 7℃ 0评论

下面将按气温字段对天气数据集排序。由于气温字段是有符号整数,所以不能将该字段视为Text对象并以字典顺序排序。反之,我们要用顺序文 件存储数据,其IntWritable键代表气温(并且正确排序),其Text值就是数据行。

有一个常用的方法能解决这个问题(特别是针对基于文本的Streaming应用):首 先,增加偏移量以消除所有负数> 其次,在数字前面增加〇,使所有数字的长度相 等;最后,用字典法排序。8.2.4节要介绍另一种方法。

 

范例8-3中的MapReduce作业只包含map任务,它过滤输入数据并移除包 含有无效气温的记录。各个map创建并输,出一个块压缩的顺序文件。相关 指令如下:

% hadoop jar hadoop-examples.jar SortDataPreprocessor input/ncdc/all \ input/ncdc/all-seq

范例8-3.该MapReduce程序将天气数据转成SequenceFile格式

 

public class SortDataPreprocessor extends Configured implements Tool {
    static class CleanerMapper
    extends Mapper<LongWritable, Text, IntWritable, Text> {
        private NcdcRecordParser parser = new NcdcRecordParser();
        @Override
        protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
            parser.parse(value);
            if (parser.isValidTemperature()) {
                context.write(new IntWritable(parser.getAirTemperature()), value);
            }
        }
        @Override
 public int run(String[] args) throws Exception {
            Job job = JobBuilder.parseInputAndOutput(this, getConf(), args);
            if (job == null) {
                return -1;
            }
            job.setMapperClass(CleanerMapper.class); 
            job.setOutputKeyClass(IntWritable.class);
            job.setOutputValueClass(Text.class);
            job.setNumReduceTasks(0);
            job.setOutputFormatClass(SequenceFileOutputFormat.class);
            SequenceFileOutputFormat?setCompressOutput(job, true);
            SequenceFileOutputFormat.setOutputCompressorClass(job, GzipCodec.class);
            SequencefileOutputFormat.setOutputCompressionType(job,
CompressionType.BLOCK);
            return job.waitForCompletion(true) ? 0 : 1;
        }
        public static void main(String[] args) throws Exception {
            int exitCode = ToolRunner.run(new SortDataPreprocessor(), args);
            System.exit(exitCode);
        }
    }
}

转载请注明:全栈大数据 » 8.2.1. 准备

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址