YARN
一、YARN概述
1). YARN产生背景
- MapReduce1.x ==> MapReduce2.x
- master/slave : JobTracker/TaskTracker
- JobTracker:单点、压力大
- 仅仅只能够支持mapreduce作业
Yarn.png
- 资源利用率: 所有的计算框架运行在一个集群中,共享一个集群的资源,按需分配!-> Yarn
2). Yarn介绍
- Yarn全称:Yet Another Resource Negotiator
- 通用的资源管理系统
- 为上层应用系统提供统一的资源管理和调度
yarn_architecture.gif
3). YARN架构
master/slave架构: RM/NM
-
Client: 向RM提交任务、杀死任务等
-
ResourceManager:集群中同一时刻对外提供服务的【只有1个】,负责资源相关
- 处理来自客户端的请求:提交、杀死
- 启动/监控AM
- 监控NM
- 资源相关
-
NodeManager: 【多个】
- 创建管理容器干活
- 向RM发送心跳信息、任务的执行情况
- 接收来自RM的请求来启动任务
- 处理来自AM的命令
-
ApplicationMaster:每个应用程序对应一个AM,运行在Container中
- AM向RM申请资源用于在NM上启动对应的Task
- 数据切分
- 为每个task向RM申请资源(container)
- NodeManager通信
- 任务的监控
-
container:任务的运行抽象(任务容器,提供memory、cpu....)
- task是运行在container里面的
- 可以运行AM(ApplicationMaster)、也可以运行map/reduce task
4). YARN执行流程
YARN执行流程.png
二、YARN环境部署
本版本参考网站 YARN环境部署;
Ctrl + F
搜索:YARN on Single Node;
在此基础上还需要进行配置(学习伪分布式环境),如下:否则会在运行任务的时候后报错!
- 配置 $HADOOP_HOME/etc/hadoop/mapred-site.xml:
可以参考对应文件夹下相应的模板文件mapred-site.xml.template,复制重命名为mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 下方配置目前还不知道是解决啥问题的,先放在这里
-->
<property>
<name>mapreduce.admin.map.child.java.opts</name>
<value>-Xmx1024m</value>
</property>
<property>
<name>mapreduce.admin.reduce.child.java.opts</name>
<value>-Xmx1536m</value>
</property>
</configuration>
- 配置 $HADOOP_HOME/etc/hadoop/yarn-site.xml:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 以下配置可以解决错误:与同路径下的hdfs-site.xml中对应<name>属性的配置一致
org.apache.hadoop.mapreduce.task.reduce.Shuffle$ShuffleError: error in shuffle in fetcher#4
Caused by: java.io.IOException: Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out.
java.io.FileNotFoundException: File does not exist: hdfs://hadoop000:8020/user/hadoop/QuasiMonteCarlo_1574166578901_1182332421/out/reduce-out
-->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/app/tmp</value>
</property>
</configuration>
- 启动命令
sh $HADOOP_HOME/sbin/start-yarn.sh
- 运行
jps
查看启动的状态,
# 要包含这两个进程说明启动成功
ResourceManager
NodeManager
如果对应进程启动失败,控制台提示的日志查看(注意,控制台的日志说明后缀为.out,实际上只有在.log结尾的日志文件才能查看信息)
- 浏览器访问 hadoop000:8088 查看运行状态
默认8088就是访问的Yarn的界面
Yarn的界面.png
-
Run a MapReduce job or Spark job etc.
-
如果需要停止Yarn
sh $HADOOP_HOME/sbin/stop-yarn.sh
三、提交作业到Yarn上运行
1). 案例测试
- 切换到
$HADOOP_HOME/share/hadoop/mapreduce/
目录 - 命令的格式
hadoop jar jar包 作业名称 参数
- 运行
# 1. 测试pi
hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.15.1.jar
# 按照提示选择一个参数
hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.15.1.jar pi 2 3
# 在前端网站最下一栏查看任务
# 2. 测试word count: 确保hdfs上存在/introduction.txt,不存在/introduction
hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.15.1.jar wordcount /introduction.txt /introduction
2). 提交本地代码到Yarn上运行
提交到Yarn环境的 Job类 中的 Configuration 使用默认即可,不需要额外配置hdfs信息等【等同于在本地运行】
- 打包
mvn clean package -DskipTests
windows/Mac/Linux ==> Maven; 注意使用conf/setting.xml中配置的仓库为hadoop-client对应的的maven;否则可能会尝试重新下载相关jar包依赖
-
把编译出来的jar包(项目根目录/target/...jar)以及测试数据上传到服务器
-
把数据上传到HDFS
hadoop fs -put xxx hdfspath
- 执行作业
hadoop jar xxx.jar 完整的类名(包名+类名) args.....
-
到YARN UI(8088) 上去观察作业的运行情况
-
到输出目录去查看对应的输出结果
网友评论