MapReduce架构设计

1.MapReduce 分布式计算框架

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
企业开发不用jiav代码,很复杂,很累赘,mr job基于磁盘运算,速度太慢
Map:映射(元素的个数)
hadoop001:
x --》(x,1) key,value 键值对
y --》(y,1)
z --》(z,1)
x --》(x,1)

hadoop002:
x --》(x,1)
z --》(z,1)

Reduce: 归约
x,2
y,1
z,1

**

2.MapReduce架构(重要)

当面试的时候问到,MapReduce 架构设计、Yarn架构设计、Yarn的工作流程、MapReduce job 提交到 Yarn的工作流程 (面试题为同一题),其实都是同一个问题。**

1
2
3
on Yarn 运行在Yarn上
容器:container(Yarn的资源的抽象概念)
运行在 Yarn nodemanager节点机器上,是一个虚拟的概念,将内存和cpu(vcore)封装成最小的单元,运行我们计算的任务task。

在这里插入图片描述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
vcore 虚拟core 

YARN中目前的CPU被划分成虚拟CPU(CPU virtual Core),
这里的虚拟CPU是YARN自己引入的概念,
初衷是,考虑到不同节点的CPU性能可能不同,
每个CPU具有的计算能力也是不一样的,
比如某个物理CPU的计算能力可能是另外一个物理CPU的2倍,
这时候,你可以通过为第一个物理CPU多配置几个虚拟CPU弥补这种差异。
用户提交作业时,可以指定每个任务需要的虚拟CPU个数。

物理core
vcore: 虚拟内核

4core--》(生产1:2 默认,1:1)
处理并行度提高

3.task 运行计算任务在 container

1
2
3
4
5
6
Yarn:
job也叫 app也叫 application 也叫作业
ResourceManager:资源作业管理者
它有两个属下(Applications Manager 作业管理
Resource Scheduler 资源调度)
NodeManager:节点管理者

在这里插入图片描述

1
2
3
4
5
6
7
8
9
10
11
12
13
	 1.用户向yarn提交应用程序(job),其中包括application Master程序,启动application Master命令等
2.RM为该job分配了一个容器,并于对应的NM通信,要求它在这个容器中启动job的MR application Master程序
3.启动程序之后,applocation Master首先向ApplicationsManager注册,用户就可以直接在web界面上查看job的整个运行状态和日志
4.applicationMaster向Resource Scheduler采用轮询的方式通过RPC协议去申请和领取资源列表
5.一旦applicationMaster申请到资源后,便与对应的NM节点通信,要求启动任务
6.NM为任务task设置好运行环境(环境变量,jar),将任务的启动命令写在一个脚本文件中,并通过脚本文件【启动任务】
7.各个task通过RPC协议向applicationMaster汇报自己的状态和进度,以让applicationMaster随时掌握各个任务的运行状态,从而可以在任务运行时重新启动任务,则web界面可以实时查看job当前运行状态。
8.job运行完成后,applicationMaster向RM注销自己并关闭自己

一共分为两个阶段:

> 启动applicationMaster
> 由applicationMaster创建job,为它上去资源,并监控它的整个运行过程,知道运行完成

4.shuffle 洗牌

1
2
3
map--> shufle--> reduce

map task默认设置为3个,reduce task默认设为1个,所以结果只有一个文件

祥细看一下博客:http://blog.itpub.net/30089851/viewspace-2095837/
在这里插入图片描述5.常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
[hadoop@hadoop002 bin]$ mapred --help
Usage: mapred [--config confdir] COMMAND
where COMMAND is one of:
pipes run a Pipes job
job manipulate MapReduce jobs
queue get information regarding JobQueues
classpath prints the class path needed for running
mapreduce subcommands
historyserver run job history servers as a standalone daemon
distcp <srcurl> <desturl> copy file or directories recursively
archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive
archive-logs combine aggregated logs into hadoop archives
hsadmin job history server admin interface

Most commands print help when invoked w/o parameters.
[hadoop@hadoop002 bin]$ mapred job
Usage: CLI <command> <args>
[-submit <job-file>]
[-status <job-id>]
[-counter <job-id> <group-name> <counter-name>]
[-kill <job-id>]
[-set-priority <job-id> <priority>]. Valid values for priorities are: VERY_HIGH HIGH NORMAL LOW VERY_LOW
[-events <job-id> <from-event-#> <#-of-events>]
[-history [all] <jobHistoryFile|jobId> [-outfile <file>] [-format <human|json>]]
[-list [all]]
[-list-active-trackers]
[-list-blacklisted-trackers]
[-list-attempt-ids <job-id> <task-type> <task-state>]. Valid values for <task-type> are MAP REDUCE. Valid values for <task-state> are running, completed
[-kill-task <task-attempt-id>]
[-fail-task <task-attempt-id>]
[-logs <job-id> <task-attempt-id>]

Generic options supported are
-conf <configuration file> specify an application configuration file
-D <property=value> use value for given property
-fs <local|namenode:port> specify a namenode
-jt <local|resourcemanager:port> specify a ResourceManager
-files <comma separated list of files> specify comma separated files to be copied to the map reduce cluster
-libjars <comma separated list of jars> specify comma separated jar files to include in the classpath.
-archives <comma separated list of archives> specify comma separated archives to be unarchived on the compute machines.

The general command line syntax is
bin/hadoop command [genericOptions] [commandOptions]

[hadoop@hadoop002 bin]$ mapred job -list
19/02/23 21:39:34 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
19/02/23 21:39:35 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032
Total jobs:1
JobId State StartTime UserName Queue Priority UsedContainers RsvdContainers UsedMem RsvdMem NeededMem AM info
job_1550323870337_1633 PREP 1550928758524 hadoop root.hadoop NORMAL 0 0 0M 0M 0M http://hadoop002:8088/proxy/application_1550323870337_1633/
[hadoop@hadoop002 bin]$ mapred job -kill job_1550323870337_1633
19/02/23 21:39:48 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
19/02/23 21:39:48 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032
19/02/23 21:39:49 INFO impl.YarnClientImpl: Killed application application_1550323870337_1633
Killed job job_1550323870337_1633
[hadoop@hadoop002 bin]$
[hadoop@hadoop002 bin]$

本文标题:MapReduce架构设计

文章作者:skygzx

发布时间:2019年04月07日 - 10:08

最后更新:2019年04月07日 - 19:39

原始链接:http://yoursite.com/2019/04/07/MapReduce架构设计/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------本文结束感谢您的阅读-------------
0%