设为首页 收藏本站
查看: 1409|回复: 0

[经验分享] Hadoop MapReduce编程 API入门系列之挖掘气象数据版本3(九)

[复制链接]

尚未签到

发表于 2017-12-18 13:16:34 | 显示全部楼层 |阅读模式
package zhouls.bigdata.myMapReduce.weather;  

  

  
import java.io.IOException;
  
import java.text.ParseException;
  
import java.text.SimpleDateFormat;
  
import java.util.Calendar;
  
import java.util.Date;
  

  
import org.apache.hadoop.conf.Configuration;
  
import org.apache.hadoop.fs.FileSystem;
  
import org.apache.hadoop.fs.Path;
  
import org.apache.hadoop.io.DoubleWritable;
  
import org.apache.hadoop.io.NullWritable;
  
import org.apache.hadoop.io.Text;
  
import org.apache.hadoop.mapreduce.Job;
  
import org.apache.hadoop.mapreduce.Mapper;
  
import org.apache.hadoop.mapreduce.Reducer;
  
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  
import org.apache.hadoop.mapreduce.lib.input.KeyValueTextInputFormat;
  
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  

  

public>
  

  

//    1949-10-01 14:21:02    34c WeatherMapper  

//    1949-10-02 14:01:02    36c  

//    1950-01-01 11:21:02    32c    分区在MyPartitioner.java  

//    1950-10-01 12:21:02    37c  

//    1951-12-01 12:21:02    23c    排序在MySort.java  

//    1950-10-02 12:21:02    41c  

//    1950-10-03 12:21:02    27c    分组在MyGroup.java  

//    1951-07-01 12:21:02    45c  

//    1951-07-02 12:21:02    46c    再,WeatherReducer  

//    1951-07-03 12:21:03    47c  

  

//key:每行第一个隔开符(制表符)左边为key,右边为value    自定义类型MyKey,洗牌,
  
static>  
SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  
NullWritable v =NullWritable.get();
  
//    1949-10-01 14:21:02是自定义类型MyKey,即key
  
//    34c是DoubleWritable,即value
  

  
protected void map(Text key, Text value,Context context) throws IOException, InterruptedException {
  
try {
  
Date date =sdf.parse(key.toString());
  
Calendar c =Calendar.getInstance();
  
//Calendar 类是一个抽象类,可以通过调用 getInstance() 静态方法获取一个 Calendar 对象,
  
//此对象已由当前日期时间初始化,即默认代表当前时间,如 Calendar c = Calendar.getInstance();   
  
        c.setTime(date);
  
int year =c.get(Calendar.YEAR);
  
int month =c.get(Calendar.MONTH);
  

  
double hot =Double.parseDouble(value.toString().substring(0, value.toString().lastIndexOf("c")));
  
MyKey k =new MyKey();
  
k.setYear(year);
  
k.setMonth(month);
  
k.setHot(hot);
  
context.write(k, new DoubleWritable(hot));
  
} catch (Exception e) {
  
e.printStackTrace();
  
}
  
}
  
}
  


  
static>  
protected void reduce(MyKey arg0, Iterable<DoubleWritable> arg1,Context arg2)throws IOException, InterruptedException {
  
int i=0;
  
for(DoubleWritable v :arg1){
  
i++;
  
String msg =arg0.getYear()+"\t"+arg0.getMonth()+"\t"+v.get();//"\t"是制表符
  
arg2.write(new Text(msg), NullWritable.get());
  
if(i==3){
  
break;
  
}
  
}
  
}
  
}
  

  
public static void main(String[] args) {
  
Configuration config =new Configuration();
  
//    config.set("fs.defaultFS", "hdfs://HadoopMaster:9000");
  
//    config.set("yarn.resourcemanager.hostname", "HadoopMaster");
  
//    config.set("mapred.jar", "C:\\Users\\Administrator\\Desktop\\wc.jar");
  
//    config.set("mapreduce.input.keyvaluelinerecordreader.key.value.separator", ",");//默认分隔符是制表符"\t",这里自定义,如","
  
try {
  
FileSystem fs =FileSystem.get(config);
  

  
Job job =Job.getInstance(config);
  
job.setJarByClass(RunJob.class);
  

  
job.setJobName("weather");
  

  
job.setMapperClass(WeatherMapper.class);
  
job.setReducerClass(WeatherReducer.class);
  
job.setMapOutputKeyClass(MyKey.class);
  
job.setMapOutputValueClass(DoubleWritable.class);
  

  
job.setPartitionerClass(MyPartitioner.class);
  
job.setSortComparatorClass(MySort.class);
  
job.setGroupingComparatorClass(MyGroup.class);
  

  
job.setNumReduceTasks(3);
  

  
job.setInputFormatClass(KeyValueTextInputFormat.class);
  

  
//    FileInputFormat.addInputPath(job, new Path("hdfs://HadoopMaster:9000/weather.txt"));//输入路径,下有weather.txt
  
//   
  
//    Path outpath =new Path("hdfs://HadoopMaster:9000/out/weather");
  

  
FileInputFormat.addInputPath(job, new Path("./data/weather.txt"));//输入路径,下有weather.txt
  

  
Path outpath =new Path("./out/weather");
  

  
if(fs.exists(outpath)){
  
fs.delete(outpath, true);
  
}
  
FileOutputFormat.setOutputPath(job, outpath);
  

  
boolean f= job.waitForCompletion(true);
  
if(f){
  
}
  
} catch (Exception e) {
  
e.printStackTrace();
  
}
  
}
  

  
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-425375-1-1.html 上篇帖子: Hadoop MapReduce编程 API入门系列之分区和合并(十四) 下篇帖子: Hadoop MapReduce编程 API入门系列之MapReduce多种输入格式(十七)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表