好程序员大数据学习路线分享MAPREDUCE

  好程序员大数据学习路线分享 MAPREDUCE 需求:统计大量的文本文件中的单词出现的次数

- 1 )整个运算需要分阶段

- 阶段一:并行局部运算

- 阶段二 :汇总处理,不同的阶段需要开发不同的程序

- 2 )阶段之间的调用

- 3 )业务程序( task 程序)如何并发到集群并启动程序

- 4 )如何监控 task 程序的运行状态,如何处理异常

- :: 这些问题是开发分布式程序都会面临的问题,完全可以封装成框架 ::

MR 的结构

- 一个完整的 MapReduce 运行时有三类实例进程:

- 1 MRAppMaster : 负责整个程序的过程调度和状态调度

- 2 mapTask :负责 map 阶段的整个数据处理流程

- 3 ReduceTask :负责 reduce 阶段的整个数据处理流程

 MR 设计框架

::MAPERDUCE 详细框架 ::

- 1 )资源如何分发? :: 放到 HDFS::: 中不能由客户端发送,如果配置 1000 台机器,也不能做 pipeline ,所以,可以把 jar 放在 HDFS 中的一个目录下。

- 2 )虽然有上千台机器,现在 job 只需要 20 台机器即可完成,由谁决定是哪 20 台机器? ::ResourceManager:: 作为 master

- 3)worker--NODEMANAGER, 执行应用程序,监控应用程序的资源使用情况( cpu ,磁盘,网络,硬盘)并且向调度器 ResourceManager 汇报

![](MAPREDUCE/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-09-19%20%E4%B8%8B%E5%8D%889.27.42.png)

:: 作业提交流程 ::

- 1 )客户端提交作业给 resourcemanager

- 2 resourcemanager 返回 jobid ,存储路径 path 信息

- 3 )客户端将 job.jar   job.split (确定需要运行多少 task )、 job.splitinfo 等资源上传到 HDFS 的存储路径

- 4 )上传到 hdfs 完成后,客户端通知 resourcemanager 启动 job

- 5 resourcemanager job 加入到 job* 等待队列 * ,然后 nodemanager 启动 container ,将资源下载到 container 内,向客户端发出请求启动 master

- 6)Appmaster resourcemanager 请求 maptask 的资

- 7 resourcemanager 分配资源,从 hdfs 下载 jar container 中, master 启动 maptask ,通过心跳机制,检查 job.split

- 8 maptask 执行完成,通知 Appmaster ,释放 maptask 资源。

 

## 分片机制

:: 如何确定需要运行多少 task (并行度) ::

 

![](MAPREDUCE/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-09-20%20%E4%B8%8A%E5%8D%882.30.10.png)

- 决定需要多大的并行度

- map 阶段并行度:客户端首先查看一下待处理数据目录下的数据量

   /data/a.txt 1G

/data/b.txt  800M

-   循环遍历:对每个文件看文件有多少个 block ,将 block 数量累加到计数器    

- 返回一任务规划描述文件: job.split

- [ ] split0: /data/a.txt   0-128M

- [ ] split1: /data/a.txtx 128-256M

..

- [ ] split8: /data/b.txt   0-128M

写入HDFS

- 分片和分块不同:

- 分片是逻辑概念,给 task 一个数据处理的范围

- 存在冗余( 10% ),偏移量和数据大小

- 特性:移动计算( jar 包中封装的计算)而不是移动数据

 

编写MR 程序的步骤:

1 、用户编写程序分为三个部分: Mapper Reducer Driver

2 Mapper 的输入数据是 kv 对的形式(数据类型可自定义)

3 Mapper 的输出数据是 kv 对的形式(数据类型可自定义)

4 Mapper 中的业务逻辑写在 map ()方法中

5 Map ()方法对每一对 kv 值调用一次

6 Reducer 的输入数据是 kv 对的形式(数据类型可自定义)

7 Reducer 的输出数据是 kv 对的形式(数据类型可自定义)

8 Reducer 中的业务逻辑写在 reduce ()方法中

9 ReduceTask 进程对每一组相同的 key <k,v> 调用一次 reduce ()方法

10 、用户自定义的 Mapper Reducer 类都要继承各自的父类

11 、整个程序需要一个 Driver 来进行提交,提交是一个描述了各种必要信息的 job 对象

- 案例: wordcount

- 需求:有一批数据文件( TB 或者 PB 级别的数据),如何统计这些文件中的单词出现次数


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69913892/viewspace-2654615/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/69913892/viewspace-2654615/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值