1.MapReduce概述
源自于Google的MapReduce论文,论文发表于2004年12月
Hadoop MapReduce是Google MapReduce的克隆版
MapReduce优点:海量数据离线处理&易开发&易运行
MapReduce缺点:无法实时流式计算
2.MapReduce编程模型
案例:TopN问题
词频统计wordcount
cat.txt内容如下:
hadoop welcome
hadoop hdfs mapreduce
hadoop hdfs
需求:统计每个单词出现的次数

MapReduce编程模型之Map阶段和Reduce阶段
将作业拆分成Map阶段和Reduce阶段
Map阶段:Map Tasks
Reduce阶段:Reduce Tasks
MapReduce编程模型之执行步骤
1,通过InputFormat讲文件读入并拆分成split
2,通过RecordReaders将split中的数据读入,并交给map处理。
3,map处理后的结果按照partitioner进行分区,然后将数据发送到对应的reduce上处理
4,reduce处理完成后,由outputFomat将结果写到文件系统

核心概念
Split:交由MapReduce作业来处理的数据块,是MapReduce中最小的计算单元。
InputFormat:将输入数据进行分片(split):InputSplit[] getSplits(JobConf job)
TextInputFormat:处理文本格式数据
OutputFormat:输出
Combiner
Partitioner

3.MapReduce架构
MapReduce架构之MapReduce1.x

JobTracker:JT
作业的管理者,将作业分解成一堆任务:Task(MapTask和ReduceTask),将任务分派给TaskTracker运行
作业的监控、容错处理(task作业挂了,重启task的机制)
在一定的时间间隔内,JT没有收到TT的心跳信息,TT可能挂了,TT上运行的任务会被指派到其它TT上去执行
TaskTracker:TT
任务的执行者 干活的
在TT上执行我们的Task(MapTask和ReduceTask)
MapTask
自己开发的map任务交给Task
解析每条记录的数据,交个自己的map方法处理
将map的输出结果写到本地磁盘(有些作业仅有map没有reduce====>HDFS)
ReduceTask
将MapTask输出的数据进行读取
按照数据进行分组传给我们自己编写的reduce方法处理
输出结果到HDFS
MapReduce架构之MapReduce2.x

4.MapReduce
编程
实战: 使用Java编程wordcount
使用idea+maven开发wc:
1,开发
2,编译
3,上传到服务器
开发:
1,创建JAVA项目

mvn clean package -DskipTests
将jar包上传到linux服务器
启动hadoop
提交作业:
hadoop jar xx.jar 主类 输入路径 输出路径
hadoop jar xx.jar hdfs://hadoop000:8020/hello.txt hdfs://hadoop000:8020/output.wc/
查看结果

bug:


MapReduce编程之Combiner
本地的reducer
减少Map Tasks输出的数据量及数据网络传输量
Combiner案例开发

改造wordcount案例

使用场景
求和、统计次数
但是求平均值不可以
MapReduce编程之Partitioner
Partitioner决定MapTask输出的数据交由哪个ReduceTask处理
默认实现:key的hash值对ReduceTask个数取模

partitioner.txt内容如下
xiaomi 200
huawei 300
xiaomi 100
huawei 200
iphone8 300
iphne8 500
nokia 20
需求:相同类型的手机放到一个reduce处理并输出。




