千家信息网

【总结】Hadoop中的MultipleOutputs实践

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本例子采用hadoop1.1.2版本,附件中有例子的数据文件采用气象数据作为处理数据1、MultipleOutputs例子,具体解释在代码中有注释package StationPatitioner;i
千家信息网最后更新 2026年11月03日【总结】Hadoop中的MultipleOutputs实践

本例子采用hadoop1.1.2版本,附件中有例子的数据文件

采用气象数据作为处理数据


1、MultipleOutputs例子,具体解释在代码中有注释

package StationPatitioner;import java.io.IOException;import java.util.Iterator;import org.apache.hadoop.conf.Configured;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.NullWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapred.FileInputFormat;import org.apache.hadoop.mapred.FileOutputFormat;import org.apache.hadoop.mapred.JobClient;import org.apache.hadoop.mapred.JobConf;import org.apache.hadoop.mapred.MapReduceBase;import org.apache.hadoop.mapred.Mapper;import org.apache.hadoop.mapred.OutputCollector;import org.apache.hadoop.mapred.Reducer;import org.apache.hadoop.mapred.Reporter;import org.apache.hadoop.mapred.TextOutputFormat;import org.apache.hadoop.mapred.lib.MultipleOutputs;import org.apache.hadoop.mapred.lib.NullOutputFormat;import org.apache.hadoop.util.Tool;import org.apache.hadoop.util.ToolRunner;/** * hadoop Version 1.1.2 * MultipleOutputs例子 * @author 巧克力黑 * */public class PatitionByStationUsingMultipleOutputs extends Configured implements Tool {        enum Counter         {                LINESKIP,       //出错的行        }        static class StationMapper extends MapReduceBase implements Mapper{                private NcdcRecordParser parser = new NcdcRecordParser();                @Override                public void map(LongWritable key, Text value,                                OutputCollector output, Reporter reporter)                                throws IOException {                        try {                                parser.parse(value);                                output.collect(new Text(parser.getStationid()), value);                        } catch (Exception e) {                                reporter.getCounter(Counter.LINESKIP).increment(1);     //出错令计数器+1                        }                                        }        }        static class MultipleOutputReducer extends MapReduceBase implements Reducer{                private MultipleOutputs multipleOutputs;                @Override                public void configure(JobConf jobconf) {                        multipleOutputs = new MultipleOutputs(jobconf);//初始化一个MultipleOutputs                }                                @Override                public void reduce(Text key, Iterator values,                                OutputCollector output, Reporter reporter)                                throws IOException {                        //得到OutputCollector                        OutputCollector collector = multipleOutputs.getCollector("station", key.toString().replace("-", ""), reporter);                        while(values.hasNext()){                                collector.collect(NullWritable.get(), values.next());//MultipleOutputs用OutputCollector输出数据                        }                }                                @Override                public void close() throws IOException {                        multipleOutputs.close();                }        }                @Override        public int run(String[] as) throws Exception {                System.setProperty("HADOOP_USER_NAME", "root");//windows下用户与linux用户不一直,采用此方法避免报Permission相关错误                JobConf conf = new JobConf();                                conf.setMapperClass(StationMapper.class);                conf.setReducerClass(MultipleOutputReducer.class);                conf.setMapOutputKeyClass(Text.class);                conf.setOutputKeyClass(NullWritable.class);                conf.setOutputFormat(NullOutputFormat.class);            FileInputFormat.setInputPaths(conf, new Path("hdfs://ubuntu:9000/sample1.txt"));//input路径            FileOutputFormat.setOutputPath(conf, new Path("hdfs://ubuntu:9000/temperature"));//output路径                                MultipleOutputs.addMultiNamedOutput(conf, "station", TextOutputFormat.class, NullWritable.class, Text.class);                                JobClient.runJob(conf);                return 0;        }                public static void main(String[] args) throws Exception{                int exitCode = ToolRunner.run(new PatitionByStationUsingMultipleOutputs(), args);                System.exit(exitCode);        }        }


2、解析气象数据的类

package StationPatitioner;import org.apache.hadoop.io.Text;public class NcdcRecordParser {        private static final int MISSING_TEMPERATURE = 9999;        private String year;        private int airTemperature;        private String quality;        private String stationid;        public void parse(String record) {                stationid = record.substring(0, 5);                year = record.substring(15, 19);                String airTemperatureString;                // Remove leading plus sign as parseInt doesn't like them                if (record.charAt(87) == '+') {                        airTemperatureString = record.substring(88, 92);                } else {                        airTemperatureString = record.substring(87, 92);                }                airTemperature = Integer.parseInt(airTemperatureString);                quality = record.substring(92, 93);        }                public String getStationid(){                return stationid;        }        public void parse(Text record) {                parse(record.toString());        }        public boolean isValidTemperature() {                return airTemperature != MISSING_TEMPERATURE && quality.matches("[01459]");        }        public String getYear() {                return year;        }        public int getAirTemperature() {                return airTemperature;        }}


数据 例子 气象 用户 路径 代码 巧克力 文件 此方法 注释 版本 计数器 错误 附件 处理 解释 输出 实践 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广东万易互联网科技有限公司惠州分公司 伟宏互联网科技 奇酷互联网络科技 鑫亿盛互联网科技 科技互联网公司logo 广州紫鲸互联网科技 深圳艾佳互联网科技 恒银科技与互联网金融 互联网教育科技公司vipkid 昭通互联网科技选哪家 广州新华互联网科技学校电竞方面 华夏恒生科技与互联网科技 互联网科技公司营业执照怎么办理 华中科技大学互联网的牛人 国大互联网教育科技有限公司薪资 九思连强互联网电子科技有限公司 互联网时代科技型公司的机会 陕西九四连强互联网科技有限公司 科技互联网经济论坛 六子台科技互联网展会 河南云网互联网络科技有限公司 北京互联网科技公司 致骋互联网科技 互联网科技股午盘股票涨跌 重庆威客帮互联网科技 宜昌元轩互联网科技有限公司 乌苏新华互联网科技做什么的 996高科技互联网公司 合肥互联网科技公司公章图片 株洲百竞科技的互联网营销顾问
0