草庐IT

大数据—— YARN

孙中明 2023-03-28 原文
源码见:https://github.com/hiszm/hadoop-train

YARN产生背景

Apache YARN (Yet Another Resource Negotiator) 是 hadoop 2.0 引入的集群资源管理系统。用户可以将各种服务框架部署在 YARN 上,由 YARN 进行统一地管理和资源分配。

The fundamental idea of MRv2 is to split up the two major functionalities of the JobTracker, 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 in the classical sense of Map-Reduce jobs or a DAG of jobs.

YARN架构详解

  1. Client
  • RM提交任务
  • 杀死任务
  1. ResourceManager
  • ResourceManager 通常在独立的机器上以后台进程的形式运行,它是整个 集群资源的主要协调者和管理者
  • 负责给用户提交的所有应用程序分配资源 ,它根据应用程序优先级、队列容量、ACLs、数据位置等信息,做出决策,然后以共享的、安全的、多租户的方式制定分配策略,调度集群资源。
  1. NodeManager
  • NodeManager 是 YARN 集群中的每个具体 节点的管理者

  • 主要 负责该节点内所有容器的生命周期的管理,监视资源和跟踪节点健康 。具体如下:

    • 启动时向 ResourceManager 注册并定时发送心跳消息,等待 ResourceManager 的指令;
    • 维护 Container 的生命周期,监控 Container 的资源使用情况;
    • 管理任务运行时的相关依赖,根据 ApplicationMaster 的需要,在启动 Container 之前将需要的程序及其依赖拷贝到本地。
  1. ApplicationMaster
  • 在用户提交一个应用程序时,YARN 会启动一个轻量级的 进程 ApplicationMaster

  • ApplicationMaster 负责协调来自 ResourceManager 的资源,并通过 NodeManager 监视容器内资源的使用情况,同时还负责任务的监控与容错。具体如下:

    • 根据应用的运行状态来决定动态计算资源需求;
    • ResourceManager 申请资源,监控申请的资源的使用情况;
    • 跟踪任务状态和进度,报告资源的使用情况和应用的进度信息;
    • 负责任务的容错。
  1. Container
  • Container 是 YARN 中的 资源抽象 ,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等。
  • 当 AM 向 RM 申请资源时,RM 为 AM 返回的资源是用 Container 表示的。
  • YARN 会为每个任务分配一个 Container,该任务只能使用该 Container 中描述的资源。ApplicationMaster 可在 Container 内运行任何类型的任务。例如,MapReduce ApplicationMaster 请求一个容器来启动 map reduce 任务

YARN执行流程

  1. 客户端clientyarn集群提交作业 , 首先①向ResourceManager申请分配资源

  2. Resource Manager会为作业分配一个Container(Application manager),Container里面运行这(Application Manager)

  3. Resource Manager会找一个对应的NodeManager通信②,要求NodeManager在这个container上启动应用程序Application Master

  4. Application MasterResource Manager申请资源④(采用轮询的方式通过RPC协议),Resource scheduler将资源封装发给Application master④,

  5. Application Master将获取到的资源分配给各个Node Manager,并监控运行情况⑤

  6. Node Manage得到任务和资源开始执行作业⑥

  7. 再细分作业的话可以分为 先执行Map Task,结束后在执行Reduce Task 最后再将结果返回給Application Master等依次往上层递交⑦

YARN环境部署

http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.15.1/hadoop-project-dist/hadoop-common/SingleCluster.html

  • YARN on Single Node
You can run a MapReduce job on YARN in a pseudo-distributed mode by setting a few parameters and running ResourceManager daemon and NodeManager daemon in addition. The following instructions assume that 1. ~ 4. steps of the above instructions are already executed.

Configure parameters as follows: etc/hadoop/mapred-site.xml:

<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration> etc/hadoop/yarn-site.xml:

<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration> Start ResourceManager daemon and NodeManager daemon: $ sbin/start-yarn.sh Browse the web interface for the ResourceManager; by default it is available at: ResourceManager - http://localhost:8088/ Run a MapReduce job. When you're done, stop the daemons with: $ sbin/stop-yarn.sh

[hadoop@hadoop000 hadoop]$ pwd /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/etc/hadoop [hadoop@hadoop000 hadoop]$ vi mapred-site.xml [hadoop@hadoop000 hadoop]$ vi yarn-site.xml [hadoop@hadoop000 sbin]$ jps 7234 NodeManager 8131 Jps 7588 NameNode 7962 SecondaryNameNode 7116 ResourceManager 7791 DataNode http://192.168.43.200:8088/cluster

[hadoop@hadoop000 hadoop]$ pwd /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/share/hadoop [hadoop@hadoop000 hadoop]$ ls common httpfs mapreduce mapreduce2 yarn hdfs kms mapreduce1 tools [hadoop@hadoop000 hadoop]$ pwd /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/share/hadoop [hadoop@hadoop000 hadoop]$ cd mapreduce [hadoop@hadoop000 mapreduce]$ ls hadoop-mapreduce-client-app-2.6.0-cdh5.15.1.jar hadoop-mapreduce-client-common-2.6.0-cdh5.15.1.jar hadoop-mapreduce-client-core-2.6.0-cdh5.15.1.jar hadoop-mapreduce-client-hs-2.6.0-cdh5.15.1.jar hadoop-mapreduce-client-hs-plugins-2.6.0-cdh5.15.1.jar hadoop-mapreduce-client-jobclient-2.6.0-cdh5.15.1.jar hadoop-mapreduce-client-jobclient-2.6.0-cdh5.15.1-tests.jar hadoop-mapreduce-client-nativetask-2.6.0-cdh5.15.1.jar hadoop-mapreduce-client-shuffle-2.6.0-cdh5.15.1.jar hadoop-mapreduce-examples-2.6.0-cdh5.15.1.jar lib lib-examples sources

提交example案例到YARN上运行

hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.15.1.jar pi 2 3

[hadoop@hadoop000 ~]$ hadoop dfs -cat /wc/input/1.txt DEPRECATED: Use of this script to execute hdfs command is deprecated. Instead use the hdfs command for it. hello world hello hello hello world [hadoop@hadoop000 ~]$ hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.15.1.jar wordcount /wc/input /wc/output [hadoop@hadoop000 ~]$ hadoop dfs -cat /wc/output/part-r-00000 DEPRECATED: Use of this script to execute hdfs command is deprecated. Instead use the hdfs command for it. hello 4 world 2

提交流量统计案例到YARN上运行

  • mvn clean package -DskipTests 注意在当前的项目环境
(base) locahost:untitled5 jacksun$ mvn clean package -DskipTests [INFO] Scanning for projects... [INFO] [INFO] -----------------------< org.example:untitled5 >------------------------ [INFO] Building untitled5 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ untitled5 --- [INFO] Deleting /Users/jacksun/IdeaProjects/untitled5/target [INFO] [INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ untitled5 --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 2 resources [INFO] [INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ untitled5 --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 15 source files to /Users/jacksun/IdeaProjects/untitled5/target/classes [INFO] [INFO] --- maven-resources-plugin:3.0.2:testResources (default-testResources) @ untitled5 --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory /Users/jacksun/IdeaProjects/untitled5/src/test/resources [INFO] [INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ untitled5 --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 2 source files to /Users/jacksun/IdeaProjects/untitled5/target/test-classes [INFO] [INFO] --- maven-surefire-plugin:2.22.1:test (default-test) @ untitled5 --- [INFO] Tests are skipped. [INFO] [INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ untitled5 --- [INFO] Building jar: /Users/jacksun/IdeaProjects/untitled5/target/untitled5-1.0-SNAPSHOT.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 43.078 s [INFO] Finished at: 2020-09-02T10:04:51+08:00 [INFO] ------------------------------------------------------------------------ (base) locahost:untitled5 jacksun$ ls D: access output src Hadoop.iml input pom.xml target (base) locahost:untitled5 jacksun$ cd target/ (base) locahost:target jacksun$ ls classes maven-status generated-sources test-classes generated-test-sources untitled5-1.0-SNAPSHOT.jar maven-archiver (base) locahost:target jacksun$ (base) locahost:target jacksun$ scp untitled5-1.0-SNAPSHOT.jar hadoop@192.168.43.200:~/lib/ hadoop@192.168.43.200's password: untitled5-1.0-SNAPSHOT.jar 100% 18KB 750.6KB/s 00:00 (base) locahost:target jacksun$
  • 到编译后的/target/目录jar包和相关的数据上传到服务器scp xxx hadoop@localhost:dir

  • 再上传到hdfsHadoop fs -put /dir

hadoop jar untitled5-1.0-SNAPSHOT.jar com.bigdata.hadoop.mr.access.AccessYARNApp /access/input/access.log /access/ouput/
  • 执行作业hadoop jar xx.jar完整的类名和包名args参数
20/09/02 10:13:22 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032 20/09/02 10:13:22 WARN mapreduce.JobResourceUploader: Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this. 20/09/02 10:13:23 INFO input.FileInputFormat: Total input paths to process : 1 20/09/02 10:13:24 INFO mapreduce.JobSubmitter: number of splits:1 20/09/02 10:13:24 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1598998523059_0003 20/09/02 10:13:25 INFO impl.YarnClientImpl: Submitted application application_1598998523059_0003 20/09/02 10:13:25 INFO mapreduce.Job: The url to track the job: http://hadoop000:8088/proxy/application_1598998523059_0003/ 20/09/02 10:13:25 INFO mapreduce.Job: Running job: job_1598998523059_0003 20/09/02 10:13:35 INFO mapreduce.Job: Job job_1598998523059_0003 running in uber mode : false 20/09/02 10:13:35 INFO mapreduce.Job: map 0% reduce 0% 20/09/02 10:13:42 INFO mapreduce.Job: map 100% reduce 0% 20/09/02 10:13:51 INFO mapreduce.Job: map 100% reduce 33% 20/09/02 10:13:53 INFO mapreduce.Job: map 100% reduce 67% 20/09/02 10:14:01 INFO mapreduce.Job: map 100% reduce 100% 20/09/02 10:14:03 INFO mapreduce.Job: Job job_1598998523059_0003 completed successfully 20/09/02 10:14:03 INFO mapreduce.Job: Counters: 50 File System Counters FILE: Number of bytes read=1185 FILE: Number of bytes written=575593 FILE: Number of read operations=0 FILE: Number of large read operations=0 FILE: Number of write operations=0 HDFS: Number of bytes read=2444 HDFS: Number of bytes written=552 HDFS: Number of read operations=12 HDFS: Number of large read operations=0 HDFS: Number of write operations=6 Job Counters Killed reduce tasks=1 Launched map tasks=1 Launched reduce tasks=3 Data-local map tasks=1 Total time spent by all maps in occupied slots (ms)=13914 Total time spent by all reduces in occupied slots (ms)=71064 Total time spent by all map tasks (ms)=4638 Total time spent by all reduce tasks (ms)=23688 Total vcore-milliseconds taken by all map tasks=4638 Total vcore-milliseconds taken by all reduce tasks=23688 Total megabyte-milliseconds taken by all map tasks=14247936 Total megabyte-milliseconds taken by all reduce tasks=72769536 Map-Reduce Framework Map input records=23 Map output records=23 Map output bytes=1121 Map output materialized bytes=1185 Input split bytes=110 Combine input records=0 Combine output records=0 Reduce input groups=21 Reduce shuffle bytes=1185 Reduce input records=23 Reduce output records=21 Spilled Records=46 Shuffled Maps =3 Failed Shuffles=0 Merged Map outputs=3 GC time elapsed (ms)=696 CPU time spent (ms)=8510 Physical memory (bytes) snapshot=783241216 Virtual memory (bytes) snapshot=16559239168 Total committed heap usage (bytes)=674758656 Shuffle Errors BAD_ID=0 CONNECTION=0 IO_ERROR=0 WRONG_LENGTH=0 WRONG_MAP=0 WRONG_REDUCE=0 File Input Format Counters Bytes Read=2334 File Output Format Counters Bytes Written=552 [hadoop@hadoop000 lib]$ hadoop fs -ls /access/ouput/ Found 4 items -rw-r--r-- 1 hadoop supergroup 0 2020-09-02 10:14 /access/ouput/_SUCCESS -rw-r--r-- 1 hadoop supergroup 393 2020-09-02 10:13 /access/ouput/part-r-00000 -rw-r--r-- 1 hadoop supergroup 80 2020-09-02 10:13 /access/ouput/part-r-00001 -rw-r--r-- 1 hadoop supergroup 79 2020-09-02 10:13 /access/ouput/part-r-00002 [hadoop@hadoop000 lib]$ hadoop fs -cat /access/ouput/part-r-00000 13480253104,180,180,360 13502468823,7335,110349,117684 13560436666,1116,954,2070 13560439658,2034,5892,7926 13602846565,1938,2910,4848 13660577991,6960,690,7650 13719199419,240,0,240 13726230503,2481,24681,27162 13726238888,12481,44681,57162 13760778710,120,120,240 13826544101,264,0,264 13922314466,3008,3720,6728 13925057413,11058,48243,59301 13926251106,240,0,240 13926435656,132,1512,1644 [hadoop@hadoop000 lib]$

  • http://192.168.43.200:8088/cluster/观察结果

有关大数据—— YARN的更多相关文章

  1. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  2. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  3. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

  4. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  5. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  6. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  7. ruby-on-rails - 创建 ruby​​ 数据库时惰性符号绑定(bind)失败 - 2

    我正在尝试在Rails上安装ruby​​,到目前为止一切都已安装,但是当我尝试使用rakedb:create创建数据库时,我收到一个奇怪的错误:dyld:lazysymbolbindingfailed:Symbolnotfound:_mysql_get_client_infoReferencedfrom:/Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundleExpectedin:flatnamespacedyld:Symbolnotfound:_mysql_get_client_infoReferencedf

  8. STM32读取串口传感器数据(颗粒物传感器,主动上传) - 2

    文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,

  9. SPI接收数据异常问题总结 - 2

    SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手

  10. 微信小程序通过字典表匹配对应数据 - 2

    前言一般来说,前端根据后台返回code码展示对应内容只需要在前台判断code值展示对应的内容即可,但要是匹配的code码比较多或者多个页面用到时,为了便于后期维护,后台就会使用字典表让前端匹配,下面我将在微信小程序中通过wxs的方法实现这个操作。为什么要使用wxs?{{method(a,b)}}可以看到,上述代码是一个调用方法传值的操作,在vue中很常见,多用于数据之间的转换,但由于微信小程序诸多限制的原因,你并不能优雅的这样操作,可能有人会说,为什么不用if判断实现呢?但是if判断的局限性在于如果存在数据量过大时,大量重复性操作和if判断会让你的代码显得异常冗余。wxswxs相当于是一个独立

随机推荐