赞
踩
Map 映射函数(后面有案例)
Reduce 规约函数(后面有案例)
hadoop1.x MR1(计算+资源作业调度)
JobTracker————作业调度
TaskTracher:map task reduce task————资源作业计算
hadoop2.x MR2(计算)
资源作业调度-->YARN
-->MR JOB提交到yarn的工作流程
-->yarn的架构设计、yarn的工作流程
这幅图就是MapReduce 1的工作原理。
我们可以看到里面有10个步骤,分别来看看这10个步骤都干了些什么。
这就是经典的MapReduce的工作原理。
名词解释:
Client: 客户端
JobTracker : 主要负责 资源监控管理和作业调度。
a.监控所有TaskTracker 与job的健康状况,一旦发现失败,就将相应的任务转移到其他节点;
b.同时JobTracker会跟踪任务的执行进度、资源使用量等信息,并将这些信息告诉任务调度器,而调度器会在资源出现空闲时,选择合适的任务使用这些资源.
yarn.nodemanager.resource.memory-mb:64*0.8G=50G
yarn.scheduler.minimum-allocation-mb: 1G
yarn.scheduler.maximum-allocation-mb: 1G 50/1=50 数量是多了,并行度大了
TaskTracker是JobTracker与Task之前的桥梁
a.从JobTracker接收并执行各种命令:运行任务、提交任务、Kill任务、重新初始化任务;
b.周期性地通过心跳机制,将节点健康情况和资源使用情况、各个任务的进度和状态等汇报给
JobTracker.
Task Scheduler: 任务调度器(默认 FIFO,先按照作业的优先级高低,再按照到达时间的先后选择被执行的作业)
Map Task: 映射任务
Reduce Task: 归约任务
(1)名词概念
作业=job=application
Container: 容器 ,Yarn组件。将一定的内存(1G cpu 1core)等资源抽象成一个小房间,用以运行任务。
机器的配置不能用满,要留20%给linux系统:
机器的物理配置 64G 16CORES: * 75-85%
Yarn拿到的资源: 64*0.8 16*0.8
总结:
生产上要知道怎么从执行的作业的大小来判断怎么去配置MR2的组件大小(反推)
例子:
假设一个作业200G
Container:
yarn.nodemanager.resource.memory-mb:64*0.8G=50G(总共64G,配置给yarn的资源只有50G)
yarn.scheduler.minimum-allocation-mb: 1G
yarn.scheduler.maximum-allocation-mb: 1G
50/1=50个容器,分配的最大容量小,所以数量是多了,并行度大了,MarTask只需执行4轮(4*50=200),但如果其中某个作业太大,超过最大的容量1G,则有可能会kill线程。
官方文档上yarn的默认配置:
yarn.nodemanager.resource.memory-mb
yarn.scheduler.minimum-allocation-mb 1024
yarn.scheduler.maximum-allocation-mb 8192 (最大是8G,对接收的作业进行判断,超过1G则自动分配多1G
yarn.scheduler.minimum-allocation-vcores 1
yarn.scheduler.maximum-allocation-vcores 4
vcore:虚拟core:物理core = 1 :2
参考资料:
http://blog.itpub.net/30089851/viewspace-2127851/
http://blog.itpub.net/30089851/viewspace-2127850/
(2)MR2工作逻辑图
1、用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster命令、用户程序等。
2、ResourceManager为该应用程序分配第一个Container,并与对应的Node-Manager通信,要求它在这个Container中启动应用
程序的ApplicationMaster。
3、ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManager查看应用程序的运行状态,然后它将各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7.
4、ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。
5、一旦ApplicationMaster申请到资源后,便与对应的nodeManager通信,要求它启动任务。
6、Nodemanager为任务设置好运行环境(包括环境变量,Jar包,二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。
7、各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前状态。
8、应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。
总结:
1、第一个阶段是启动ApplicationMaster
2、第二个阶段是由ApplicationMaster创建应用程序,为它申请资源,并监控它的整个运行过程,直到运行完成。
Wordcount:词频统计
原文件数据:
------------------|
jepson ruoze |
hero yimi xjp |
123 |
a b a |
------------------|
通过mapreduce计算出现的单词个数:
jepson,1
ruoze,1
hero ,1
yimi ,1
xjp,1
123,1
a,2
b,1
(1)直接通过hadoop命令打开mapreduce的jar包(命令不熟的话,敲一下hadoop会弹出提示)
hadoop jar hadoop-mapreduce-examples-2.8.1.jar
(2)直接按照格式输入试试
hadoop jar hadoop-mapreduce-examples-2.8.1.jar wordcount
没有文件输入到mapreduce,因此需要自建文件进行模拟。
(3)在hdfs里创建wordcount/input文件夹用于存放文件
hdfs dfs -mkdir -p /wordcount/input
报错:Namenode在安全模式
离开安全模式:
hdfs dfsadmin -safemode leave
hdfs dfs -mkdir -p /wordcount/input
(4)将文件上传到/input
hdfs dfs -put HBinz.log /wordcount/input
(5)使用mapreduce进行词频计算(巧用反斜杠\进行换行)
hadoop jar \
/opt/software/hadoop-2.8.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.1.jar \
wordcount \
/wordcount/input \
/wordcount/output1
(6)打开截图网址:http://hadoop001:8088/proxy/application_1534860561113_0001/
(7)展开ID的内容
(8)一定要会查看日志文件,找系统问题
(9)查看输出文件
hdfs dfs -ls /wordcount/output1
(10)查看文件
hdfs dfs -cat /wordcount/output1/part-r-00000
Map Task 映射
Reduce Task 规约,合并计算:
shuffle:洗牌
mapreduce.job.maps 2
mapreduce.job.reduces 1
假如我们设定hdfs的块的大小是64mb,
如果我们输入有三个文件,大小分别是3mb、65mb和127mb,
那么mapreduce会把3mb文件分为一个输入分片(input split),
65mb则是两个输入分片(input split)而127mb也是两个输入分片(input split),
那么就会有5个map任务将执行,而且每个map执行的数据大小不均,运行时间不一致,会造成木桶效应,导致有些数据大的任务执行较慢影响整体计算效率。
这个也是mapreduce优化计算的一个关键点。
换句话说我们如果在map计算前,做输入分片调整,例如合并小文件,3mb+65mb+127mb=3.0x==4块
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。