Hadoop学习(四)— MapReduce入门
来源:互联网 发布:一年级拼音教学软件 编辑:程序博客网 时间:2024/05/02 01:23
MapReduce是由Google提出的一种分布式计算模型,主要用于搜索领域,解决海量数据的计算问题。它实现了把简单的运算逻辑扩展到海量数据的场景中,进行分布式运行,对于普通程序员来说只需要编写业务逻辑来实现海量数据的处理,而不需要过多的去关注分布式实现细节.
Mapreduce分为map阶段与reduce阶段,开发者只需要实现map()和reduce()两个函数,即可实现分布式计算。
一、 mapreduce的执行步骤
1. 作业配置2.提交作业3.作业初始化4.任务分配5.任务执行6.进度与状态更新7.作业完成
map任务处理(局部处理)
读取输入文件内容,解析成key、value对。对输入文件的每一行,解析成key、value对。每一个键值对调用一次ma
p函数。
编写业务逻辑,对输入的key、value处理,转换成新的key、value输出。
reduce任务处理(汇总)
在reduce之前,有一个shuffle的过程对多个map任务的输出进行合并、排序。
编写业务逻辑,对map输入的key、value处理,转换成新的key、value输出。
把reduce的输出保存到文件中。
Hadoop 2.0引入YARN,大大提高了集群的资源利用率并降低了集群管理成本。
yarn处理的逻辑图
ResourceManager是yarn框架里的主节点,编写好mr程序后,调用hadoop jar xxx.jarxxx.xxxxx.xxxxxxRunner
1.当执行Runner中的job.waitforcompletion()就会启动一个Runjar,Runnjar负责与集群通信
2.Runjar启动后,就会向ResourceManager申请执行一个job,ResourceManager应答,返回job相关资源(staging-dir)和本次job的id
3.Runjar得到应答后,就会提交资源到HDFS下的/tmp/…
4.Runjar向ResourceManager汇报提交结果
5.ResourceManager将本次的job相关信息(比如,分配到哪些NodeManager上运行)加入任务队列
6.NodeManager会通过心跳通信机制去检查任务队列
7.当发现有自己的任务的时候,就向ResourceManager领取任务,领取到任务后,就会分配一个容器Container,容器中包含运行本次job任务的相关资源(CPU,IO,内存…),还会将与job相关的配置与jar包,取到Container中。
8.而具体的mr运行,yarn是无法管理的,mr的运行是由mapreduce框架来管理的,yarn通过启动MRAppMaster(动态产生)来管理整个mr程序。
9.MRAppMaster启动后向ResourceManager注册,然后请求被分配的资源的信息(nodemanager的分配情况)。MRAppMaster获取到信息后,找到相应的节点,在Container中启动mr任务。(在相应节点上可以查看到进程名yarnChild)
10.job完成后向ResourceManager注销,ResourceManager回收资源。
Yarn并不负责管理mr程序,只是负责资源的调度,使的yarn的通用性得到增强,不仅仅是mr程序,其他程序比如strom,但是必须实现yarn的APPMaster接口,有yarn来启动xxAppMaster,xxAppMaster来管理相应的程序。
二、MapReduce实例代码
public class WordCountMapper extendsMapper<LongWritable, Text, Text, LongWritable> { protected void map(LongWritable key, Text value, Context context) throws java.io.IOException, InterruptedException {String line = value.toString();String[] fields = line.split("\t");for (String k : fields) { context.write(new Text(k), new LongWritable(1));} };}
import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Reducer;public class WordCountReducer extendsReducer<Text, LongWritable, Text, LongWritable> { protected void reduce(Text key, Iterable<LongWritable> values, Context context) throws java.io.IOException, InterruptedException {long count = 0;for (LongWritable v : values) { count += v.get();}context.write(key,new LongWritable(count)); };}
package cn.hadoop.mr.wc;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;public class WordCountRunner { public static void main(String[] args)throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf);job.setJarByClass(WordCountRunner.class);job.setMapperClass(WordCountMapper.class);job.setReducerClass(WordCountReducer.class);job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(LongWritable.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(LongWritable.class);FileInputFormat.setInputPaths(job, new Path("hdfs://Wang-HP:9000/wc/src"));FileOutputFormat.setOutputPath(job, new Path("hdfs://Wang-HP:9000/wc/output2"));job.waitForCompletion(true); }}
- Hadoop学习(四)— MapReduce入门
- Hadoop学习之MapReduce(四)
- Hadoop学习之MapReduce(四)
- hadoop mapreduce 学习(-)
- Hadoop权威指南学习(四)——MapReduce工作机制
- 一步两步,学习大数据(四)——IDEA 搭建hadoop mapreduce程序
- 知识学习——Hadoop MapReduce开发入门
- Hadoop(四)——编程核心MapReduce(上)
- Hadoop(四)——编程核心MapReduce(上)
- Hadoop(四)——编程核心MapReduce(上)
- Hadoop(四)组合式MapReduce任务
- 【Hadoop】MapReduce笔记(四):MapReduce优化策略总结
- 【Hadoop入门学习系列之四】MapReduce 2.0应用场景和原理、基本架构和编程模型
- Hadoop教程(四):理解MapReduce、MapReduce计数器和连接、MapReduce Hadoop程序连接数据
- hadoop入门(五)MapReduce简介
- Hadoop MapReduce入门
- Hadoop入门之MapReduce
- hadoop MapReduce 入门
- OC下载网页
- 进程与线程
- php 字符串
- Hibernate data validator in spring integration
- 第10、11周-项目3(1)
- Hadoop学习(四)— MapReduce入门
- python之urllib2使用总结
- UVa 378 - Intersecting Lines
- 必不可少的Firefox插件
- PCA的数学原理
- Python学习笔记(二)列表统计词频
- ++
- JAVA实现过滤掉文本中的表情
- socket通信