目录
YARN产生背景
YARN概述
YARN架构详解
YARN执行流程
YARN环境部署
报错
========================附========================
MapReduce1.x
MapReduce1.x架构图
左侧是没有YARN的,有三个集群,可以看到三个集群在不同的时候可能会有空闲,这些资源在多个集群中得不到充分的利用,若可以整合到一个集群,就可以充分利用集群了。
YARN:集群的资源管理,在YARN之上能跑很多不同的作业 ,YARN是在Hadoop2.x采用与生产的,1.x也有一些但还是不能用于生产环境。
YARN: Yet Another Resource Negotiator
========================附========================
The fundamental idea of YARN is to split up the functionalities of resource management and job scheduling/monitoring into separate daemons. The idea is to have a global ResourceManager (RM) and per-application ApplicationMaster (AM). An application is either a single job or a DAG of jobs. YARN的基本思想是将资源管理和作业调度/监视的功能划分为单独的守护进程。拥有一个全局资源管理器(RM)和每个应用程序应用程序管理员(AM)。应用程序可以是单个作业,也可以是DAG作业。
The ResourceManager and the NodeManager form the data-computation framework. The ResourceManager is the ultimate authority that arbitrates resources among all the applications in the system. The NodeManager is the per-machine framework agent who is responsible for containers, monitoring their resource usage (cpu, memory, disk, network) and reporting the same to the ResourceManager/Scheduler. ResourceManager和NodeManager构成了数据计算框架。ResourceManager对所有应用能使用的资源有最终的决定权。NodeManager是每台机器的框架代理,负责容器,监视其资源使用情况(cpu、内存、磁盘、网络),并将其报告给ResourceManager/Scheduler。
The per-application ApplicationMaster is, in effect, a framework specific library and is tasked with negotiating resources from the ResourceManager and working with the NodeManager(s) to execute and monitor the tasks. 每个应用程序ApplicationMaster实际上是一个特定于框架的库,其任务是与ResourceManager协商资源,并与NodeManager协作执行和监视任务。
YARN架构
运行过程中,AM知道task的运行情况。
YARN on Single Node
etc/hadoop/mapred-site.xml,即让我们的MapReduce运行在YARN之上
mapreduce.framework.name
yarn
etc/hadoop/yarn-site.xml,RM和NM相当于一对多的,那么NM配在哪,还是和Hadoop一样,有一个slave,已经配过了。
yarn.nodemanager.aux-services
mapreduce_shuffle
启动前
77219 NameNode
77305 DataNode
16889 Launcher
启动RM和NM
sbin/start-yarn.sh
启动后
77219 NameNode
21414 NodeManager
77305 DataNode
16889 Launcher
21341 ResourceManager
现在可以去浏览器上愉快的访问啦,http://localhost:8088/cluster
提交作业:
hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.15.1.jar(jar包) pi(作业名称)[.....](每个作业需要的参数)
Error: org.apache.hadoop.mapreduce.task.reduce.Shuffle$ShuffleError: error in shuffle in fetcher#1
at org.apache.hadoop.mapreduce.task.reduce.Shuffle.run(Shuffle.java:134)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:376)
解决方法:
hdfs-site.xml中hadoop.tmp.dir配的什么目录,在yarn-site.xml的yarn.nodemanager.local-dirs中就配这个目录加上nm-local-dir
yarn.nodemanager.local-dirs /Users/hh/app/tmp/nm-local-dir
- 打包,在工程所在的目录(hadoop-train-v2)下,运行: mvn clean package -DskipTests,其中-DskipTests表示跳过测试用例
- 这个包在工程目录的target目录下,找到hadoop-train-v2-1.0这个jar文件,上传到服务器scp命令scp hadoop-train-v2-1.0.jar 用户名:服务器地址:~/lib/
- 将所需要的数据也上传服务器,scp access.log 用户名:服务器地址:~/data/
- 将数据从服务器上传到HDFS, hadoop fs -mkdir -p /access/input, hadoop fs -put access.log /access/input
- 运行:hadoop jar hadoop-train-v2-1.0.jar com.imooc.bigdata.hadoop.mr.access.AccessYARNApp(包名+类名) /access/input/access.log /access/output/
- 到YARN UI(8088)上去观察作业的运行情况
- 到输出目录去查看对应的输出结果
用脚本跑的话,写成一个xxx.sh的脚本,脚本内容同上,类似hadoop jar xxx/xxx/hadoop-train-v2-1.0.jar com.imooc.bigdata.hadoop.mr.access.AccessYARNApp(包名+类名) hdfs://xxx.xxx.xxx::8020/access/input/access.log hdfs://xxx.xxx.xxx::8020/access/output/,再给脚本赋一下可执行权限:chmod u+x xxx.sh。运行./xxx.sh 即可。
参考:慕课网 - Hadoop 系统入门+核心精讲
Hadoop官网