[MapReduce架构设计]

1.MapReduce 分布式计算框架

	 企业开发不用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的工作流程 (面试题为同一题),其实都是同一个问题。

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

在这里插入图片描述

	 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

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

在这里插入图片描述

	 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 洗牌

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

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

[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]$ 

猜你喜欢

转载自blog.csdn.net/qq_42585142/article/details/88403874