返回顶部
首页 > 资讯 > 精选 >如何编写YARN应用程序
  • 842
分享到

如何编写YARN应用程序

2023-06-02 22:06:57 842人浏览 泡泡鱼
摘要

本篇内容介绍了“如何编写YARN应用程序”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 概要Drill是Apache旗下的一个开源sql

本篇内容介绍了“如何编写YARN应用程序”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1. 概要

Drill是Apache旗下的一个开源sql查询引擎,可用于探索大数据。它的设计初衷是为了支持对大数据的高性能分析,同时支持行业标准查询语言ANSI SQL。

在Drill 1.13之前,Drill只支持独立集群部署,部署成功后每个节点上会运行一个名为Dirllbit的守护进程。从1.13版本开始,Drill支持与YARN集成来管理资源。使用YARN后,Drill将成为一个运行在YARN上的长进程。当您启动Drill时,YARN会自动将Drill软件部署到每个节点上,避免了在每个节点上安装Drill的繁琐。除此之外,资源管理也会得到简化,因为YARN对于Drill使用的资源是敏感的。

目前所有YARN发行版都提供了内存和CPU(YARN称为“vcores”)的设置,某些发行版还提供磁盘的设置。对于内存,在把Drill部署在YARN上的时候,你会配置Drill要使用的内存,然告知YARN。此外,Drill将使用所有可用的磁盘和CPU,当然可以启用linux cgroup来限制Drill对CPU使用的,以到匹配YARN的vcores分配。

为了方便讲解在YARN下部署Drill,先简单介绍YARN的核心概念。

2. YARN核心概念

YARN全称是Yet Another Resource NeGotiator(另一种资源协调者),是一种新的hadoop资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度。

2.1 核心组件

  1. ResurceManager(RM):一个全局的资源管理器,负责整个系统的资源管理和分配。它主要由两个组件构成:调度器(Scheduler)和应用程序管理器(Applications Manager,ASM)。

  2. ApplicationMaster(AM):用户提交的每个应用程序均包含一个AM,主要功能包括

    • 与RM调度器协商以获取资源(以Container表示)

    • 与NM通信以启动/停止任务

    • 监控所有任务运行状态,并在任务失败时重新为任务申请资源以重启任务

  3. Container :Container是YARN中的资源抽象,它封装了某个节点上的多维资源,如CPU、内存、磁盘、络等。当AM向RM申请资源时,RM向AM返回的资源便是用Container表示的。YARN会为每个任务分配一个Container,且该任务只能使用该Container中描述的资源。Container是一个动态资源划分单位,是根据应用程序的需求自动生成的。

  4. nodeManager(NM) :NM是每个节点上的资源和任务管理器。一方面,它定时地向RM汇报本节点的资源使用情况和Container运行状态;另一方面,它接受并处理来自AM的Container启动/停止等各种请求。

  5. 客户端(Client):是集群中一个能向RM提交应用的实例,并且指定了执行应用所需要的AM类型。

2.2 YARN工作流程

当用户向YARN中提交一个任务后,YARN将分两个阶段运行该任务:第一阶段是启动AM。第二阶段是由AM创建任务,为它申请资源,并监控它的整个运行过程,直到运行完成。具体如下:

  1. 用户向YARN中提交任务,其中包括AM程序、启动AM的命令等。

  2. RM为该应用程序分配第一个Container,通常称为001,并与对应的NM通信,要求它在这个Container中启动应用程序的AM。

  3. AM首先RM注册,这样用户就可以直接通过RM查看任务的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7。

  4. AM采用轮询的方式通过rpc协议向RM申请和领取资源。

  5. 一旦AM申请到资源后,便与对应的NM通信,要求它启动任务。

  6. NM为任务设置好运行环境(包括环境变量、jar包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。

  7. 各个任务通过RPC协议向AM汇报自己的状态和进度,以让AM随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。

  8. 应用程序运行完成后,AM向RM注销并关闭自己。

如何编写YARN应用程序

2.3 如何编写YARN应用程序

  1. 编写客户端

// 初始化并启动一个YarnClientConfiguration yarnConfig = new YarnConfiguration(getConf());YarnClient client = YarnClient.createYarnClient();client.init(yarnConfig);client.start();...// 创建一个应用程序YarnClientApplication app = client.createApplication();GetNewApplicationResponse appResponse = app.getNewApplicationResponse();...// 设置应用程序提交上下文ApplicationSubmissionContext appContext = app.getApplicationSubmissionContext();appContext.setApplicationId(appResponse.getApplicationId());appContext.setApplicationName(config.getProperty("app.name"));appContext.setApplicationType(config.getProperty("app.type"));...// 设置am container启动上下文 ContainerLaunchContext amContainer = Records.newRecord(ContainerLaunchContext.class);amContainer.setLocalResources(amLocalResources);amContainer.setEnvironment(amEnvironment);amContainer.setCommands(Collections.singletonList(amCommand.toString()));...// 提交应用程序client.submitApplication(appContext);
  1. 编写ApplicationMaster(AM)

// 初始化AMRMClientAsyncYarnConfiguration yarnConfig = new YarnConfiguration();AMRMClientAsync amrmClientAsync = AMRMClientAsync.createAMRMClientAsync(5000, new AMRMCallbackHandler());amrmClientAsync.init(yarnConfig);amrmClientAsync.start();// 初始化NMClientAsyncYarnConfiguration yarnConfig = new YarnConfiguration();NMClientAsync nmClientAsync = NMClientAsync.createNMClientAsync(new NMCallbackHandler());nmClientAsync.init(yarnConfig);nmClientAsync.start();// 注册ApplicationMaster(AM)amrmClientAsync.reGISterApplicationMaster(thisHostName, 0, "");...// 添加ContainerRequestamrmClientAsync.addContainerRequest(containerRequest);...// 启动容器nmClientAsync.startContainerAsync(container, containerContext);...// 注销amrmClientAsync.unregisterApplicationMaster(appStatus, appMessage, null);

这里只是简单介绍了YARN的概念,以及如何编写YARN应用程序,详情可以参考Apache Hadoop YARN

3. Drill-on-YARN部署

3.1 Drill-on-YARN组件

  1. Drill发行包: Drill-on-YARN上传此发行包至分布式文件系统(如hdfs)。YARN下载它到每个工作节点(即是Node Manager所在的节点)

  2. Drill site目录: 一个包含Drill配置问和自定义jar包的目录。Drill-on-YARN会拷贝它至每个工作节点

  3. 配置:一个用于告知Drill-on-YARN如何管理Drill集群的配置文件。这个文件和drill本身的配置文件互相独立

  4. Drill-on-YARN client: Drill-on-YARN客户端,提供了启动、停止、监控等命令

  5. Drill Application Master (AM):用于和YARN交互,包括:请求资源、启动Drillbits等。AM还提供了WEB界面用于管理Drill集群

  6. Drillbit: 运行在每个节点的Drill守护进程

3.2. 部署步骤

YARN通过客户端来启动应用程序。对于Drill来说,就是Drill-on-YARN客户端了。客户端可以在任何机器上,只要该机器同时有Drill和Hadoop软件。使用YARN部署Drill时,您只需要在客户端计算机上安装Drill,Drill-on-YARN会自动部署到其它节点。需要注意的是,当你不使用YARN部署Drill时,一般会将其配置文件和自定义代码放在Drill的目录中,但是在YARN下运行时,建议所有配置和自定义代码都会放在一个名为site的目录中,勿改变Drill目录中的任何内容。

接下来详细说明部署步骤:

  1. 部署的环境

    关于jdkZooKeeper、hadoop的部署,不做赘述了,记得设置JAVA_HOME、HADOOP_HOME

    • JDK8+

    • Zookeeper集群

    • Hadoop集群

  2. 创建一个目录,用于放置下载好的Drill发行包

    export DRILL_DIR=/path/to/drillmkdir -p $DRILL_DIRcd $DRILL_DIR

    说明:执行完上面的命令后,所处的目录为/path/to/drill

  3. 下载Drill发行包,这里使用apache-drill-1.14.0.tar.gz,下载完后解压,再次强调,目前所处的目录为/path/to/drill

    export DRILL_NAME=apache-drill-1.14.0tar -xzf $DRILL_NAME.tar.gzexport DRILL_HOME=$DRILL_DIR/$DRILL_NAME

    说明:DRILL_NAME很重要,后面启动的时候和名字有关系

  4. 创建site目录,并把配置文件和自定义代码放置在其中

    export DRILL_SITE=$DRILL_DIR/sitemkdir -p $DRILL_SITEcp $DRILL_HOME/conf/drill-override-example.conf $DRILL_SITE/drill-override.confcp $DRILL_HOME/conf/drill-on-yarn-example.conf $DRILL_SITE/drill-on-yarn.confcp $DRILL_HOME/conf/drillenv.sh $DRILL_SITE

    说明:

    • 对于自定义代码,一般都是打成jar包,放置在DRILLSITE/jars。比如自定义的udf,可以放在DRILLSITE/jars。比如自定义的udf,可以放在DRILL_SITE/jars/3rdparty

    • 不要拷贝drill-override-example.conf整个文件,仅仅拷贝需要的配置,然后进行修改

  5. 修改$DRILL_SITE/drill-override.conf
    一般情况下,可能需要修改的配置有:cluster-id、zk、Http、rpc。此处,我只修改cluster-id和zk

    drill.exec: {  cluster-id: "drillbits1"  zk: {    connect: "11.167.47.76:2181,11.167.57.229:2181,11.167.67.151:2181",    root: "drill",    refresh: 500,    timeout: 5000,      retry: {        count: 7200,        delay: 500      }  }}
  6. 修改$DRILL_SITE/drill-on-yarn.conf

    # Drillbit资源配置drillbit: {    heap: "4G" # Java heap size    max-direct-memory: "8G"    memory-mb: 12288 # 单位MB,container使用的内存,一般来说等于heap+max-direct-memory,但是建议大于这个值    vcores: 4 # cpu个数}# Drillbit集群组配置cluster: [    {        name: "mypool"        type: "basic" # 可选的有basic和labeled,basic表示在YARN集群上任意可用的container上启动drillbits;labeled在一组特定labeled的容器中启动drillbits        count: 1 # 启动的YARN容器个数    }] # 配置drill发行包所在的位置drill-install:  {    client-path: "/path/to/drill/apache-drill-1.14.0.tar.gz"    # dir-name: "drill"}# 设置分布式文件系统位置dfs: {    connection: "hdfs://ip:port/"    dir: "/user/drill"}  # Drill-on-YARN Web界面配置drill.yarn:{    http: {        port: 8048    }}  # Drill-on-YARN Web界面安全配置drill.yarn.http: {    auth-type: "simple"    user-name: "drill" // 注意,drill-on-yan-example.conf默认是user_name,这是错误的,要改成user-name    passWord: "drill"}

    说明:

    附上完整的配置

    drill.yarn: {  app-name: "Drill-on-YARN"  dfs: {    connection: "hdfs://11.162.91.196:9000/"    app-dir: "/users/drill"  }  yarn: {    queue: "default"  }  drill-install: {    client-path: "/home/admin/drill/apache-drill-1.14.0.tar.gz"    # dir-name: "drill"    # library-path: "/opt/libs"  }  am: {    heap: "450M"    memory-mb: 512    # node-label-expr: "drill-am"  }  http: {    port: 8048    # ssl-enabled: true    auth-type: "simple"    user-ame: "drill"    password: "drill"    rest-key=""  }  drillbit: {    heap: "3G"    max-direct-memory: "1G"    code-cache: "1G"    memory-mb: 4096    vcores: 2    # disks: 3    classpath: ""  }  cluster: [    {      name: "drill-group1"      type: "basic"      count: 3    }  ]}
    1. 关于Drillbit资源配置中的heap和max-direct-memory,在非YARN下部署,是修改DRILLHOME/conf/drillenv.sh文件,但是在YARN下部署,是修改DRILLHOME/conf/drillenv.sh文件,但是在YARN下部署,是修改DRILL_SITE/drill-on-yarn.conf。但是,如果你已经在drillenv.sh配置了,则drillenv.sh优先。

    2. Drillbit集群组配置,虽然是个list,但目前只支持配置一个

    3. dir-name特别说明,当你client-path解压出来的文件,目录是apache-drill-1.14.0时,不需要配置dir-name,反之如果不是,请把解压出来的文件目录名配上

    4. Web界面安全配置的auth-type支持simple和drill两种,使用simple,需要指定用户名和密码,使用drill说明用drill的认证系统

  7. 启动

    $DRILL_HOME/bin/drill-on-yarn.sh --site $DRILL_SITE start

    接下来,就会看到启动日志

    Connecting to DFS... Connected.Using existing Drill arcHive in DFS: /users/drill/apache-drill-1.14.0.tar.gzUploading site directory /home/admin/drill/apache-drill-1.14.0/bin/../../site to /users/drill/site.tar.gz ... Uploaded.Loading YARN Config... Loaded.Application ID: application_1533475543014_0005Launching Drill-on-YARN.......................Tracking URL: http://dtshow011162091196.zth:8088/proxy/application_1533475543014_0005/Application Master URL: http://11.163.210.105:8048/

    从上面的命令可以看到,会首先把apache-drill-1.14.0.tar.gz和site目录打成的site.tar.gz上传至HDFS,然后加载YARN的配置,最后启动Drill

    除了启动命令外,drill-on-yarn.sh还提供了status、stop、resize、clean命令,比如status

    Application ID: application_1533475543014_0005Application State: RUNNINGHost: dtshow011163210105.zth/11.163.210.105Queue: defaultUser: adminStart Time: 2018-08-19 20:51:55Application Name: Drill-on-YARNTracking URL: http://dtshow011162091196.zth:8088/proxy/application_1533475543014_0005/AM State: LIVETarget Drillbit Count: 3Live Drillbit Count: 3Unmanaged Drillbit Count: 0Blacklisted Node Count: 0Free Node Count: 0For more infORMation, visit: http://11.163.210.105:8048/

    启动成功后,便可以访问http://11.163.210.105:8048/,效果如下图:

    如何编写YARN应用程序

    用户名和密码就是之前配置的drill、drill,除此之外,此页面提供了如下功能:

    至此,你已经成功的把Drill部署在YARN上面了,同样可以通过访问Drill的Web UI来执行查询测试,效果如下图:

    1. 集群状态总览

    2. 完整的启动配置

    3. 正在运行的Drillbits列表

    4. 简单的操作来调整集群

    5. 一个展示停止的、被kill的、失败的Drillbits历史页面,可以用它来诊断问题

如何编写YARN应用程序

如何编写YARN应用程序

“如何编写YARN应用程序”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 如何编写YARN应用程序

本文链接: https://lsjlt.com/news/231403.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何编写YARN应用程序
    本篇内容介绍了“如何编写YARN应用程序”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 概要Drill是Apache旗下的一个开源SQL...
    99+
    2023-06-02
  • java小应用程序如何编写
    编写Java小应用程序一般需要遵循以下几个步骤:1. 确定应用程序的目标和功能:首先确定应用程序的目标和功能,明确应用程序要解决的问...
    99+
    2023-08-24
    java
  • Python 中如何编写高效的 Spring 应用程序?
    Python 和 Spring 是两个非常流行的编程语言和框架,它们分别在不同的领域中广泛应用。但是,在某些情况下,我们需要将它们结合起来,以创建高效的应用程序。在本文中,我们将探讨如何使用 Python 编写高效的 Spring 应用程序...
    99+
    2023-08-31
    教程 spring numpy
  • 如何在 Linux 上使用 Python 编写 Django 应用程序?
    在本文中,我们将探讨如何在 Linux 上使用 Python 编写 Django 应用程序。Django 是一个流行的Python Web框架,它提供了一个强大的基础架构,使得开发Web应用程序变得更加容易和快速。它具有高度的可扩展性,安全...
    99+
    2023-07-19
    编程算法 linux django
  • 如何在Bash中编写响应式程序?
    Bash是一种流行的Shell脚本语言,广泛应用于Linux和Unix系统中。虽然Bash主要用于编写脚本,但是也可以用它来编写响应式程序。在本文中,我们将介绍如何在Bash中编写响应式程序,并提供一些示例代码。 什么是响应式编程? 响...
    99+
    2023-08-08
    编程算法 bash 响应
  • 如何编写 Python 程序
    如何编写 Python 程序 从今以后,保存和运行 Python 程序的标准步骤如下: 对于 PyCharm 用户 打开 PyCharm。 以给定的文件名创建新文件。 输入案例中给出的代码。 右键并运行当前文件。 注意:每当你需要提供...
    99+
    2023-01-31
    程序 Python
  • pycharm如何编写程序
    在 pycharm 中编写 python 程序只需以下步骤:1. 创建新项目;2. 创建 python 文件;3. 编写 python 代码;4. 运行程序。 PyCharm 中编写程...
    99+
    2024-04-19
    python git pycharm
  • 如何用Node.js编写内存效率高的应用程序
    本篇内容介绍了“如何用Node.js编写内存效率高的应用程序”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2024-04-02
  • 如何用VB.NET编写托盘程序
    这篇文章主要介绍如何用VB.NET编写托盘程序,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!本文程序的设计及运行环境(1)Windows 2000 Service(2)Net Framework SDK 正式版VB....
    99+
    2023-06-17
  • 如何使用scala编写wordcount程序
    本篇内容介绍了“如何使用scala编写wordcount程序”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!直接上程序吧一、公共类<pr...
    99+
    2023-06-03
  • 如何在 ASP 和 JavaScript 中编写分布式应用程序?
    随着互联网的不断发展,越来越多的应用程序需要支持分布式架构,以满足高并发和高可用性的需求。本文将介绍如何在 ASP 和 JavaScript 中编写分布式应用程序,帮助开发人员更好地应对分布式架构的挑战。 一、ASP 中的分布式应用程序 ...
    99+
    2023-06-25
    javascript 学习笔记 分布式
  • 用python编写一个小程序,如何用python编写软件
    大家好,给大家分享一下用python编写一个小程序,很多人还不知道这一点。下面详细解释一下。现在让我们来看看! 1、python可以写手机应用程序吗? 我想有人曲解意思了,人家说用python开发渣蔽一个手机app,不是说用手机敲写py...
    99+
    2023-10-22
    python
  • 如何用Java GUI编写画板程序
    这篇文章将为大家详细讲解有关如何用Java GUI编写画板程序,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。自编代码,java课程设计 实现铅笔,橡皮,功能,可以画直线,矩形,圆等各种形状,...
    99+
    2023-06-17
  • 如何使用PHP编写爬虫程序
    在互联网时代,信息就像一条无休无止的河流,源源不断地涌出来。有时候我们需要从Web上抓取一些数据,以便分析或者做其他用途。这时候,爬虫程序就显得尤为重要。爬虫程序,顾名思义,就是用来自动化地获取Web页面内容的程序。 作为一门广泛应用的编程...
    99+
    2023-09-03
    php 爬虫 开发语言
  • 如何用java编写记事本程序
    要用Java编写记事本程序,可以按照以下步骤进行:1. 创建一个新的Java项目。2. 创建一个主类,命名为"NotePad"或者其...
    99+
    2023-10-07
    java
  • Go编程语言如何用来编写Web应用
    这篇文章主要为大家展示了“Go编程语言如何用来编写Web应用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Go编程语言如何用来编写Web应用”这篇文章吧。Go语...
    99+
    2024-04-02
  • 怎么使用Golang编写MySQL应用程序
    本篇内容介绍了“怎么使用Golang编写MySQL应用程序”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!步骤一:安装和设置MySQL数据库首...
    99+
    2023-07-05
  • 用Go编写金融服务应用程序
    随着金融科技的飞速发展,金融行业对于技术的需求也越来越高。建立高可用、高并发的金融服务系统已经成为了金融企业发展的重要任务之一。而Go语言正好具有高并发、高性能、高可维护性等优势,在金融服务的实现上也有着广泛...
    99+
    2024-01-22
    金融服务 框架 Go语言
  • VB.NET如何编写托盘程序
    小编给大家分享一下VB.NET如何编写托盘程序,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!托盘程序是指这样一类程序:当程序运行后,会在系统的托盘区(也有说是状态...
    99+
    2023-06-17
  • 如何使用Go语言编写高效的Apache响应程序?
    Go语言是一种高效的编程语言,它在编写高性能网络应用程序方面具有出色的表现。Apache是一种流行的Web服务器,使用Go语言编写高效的Apache响应程序可以提高Web服务器的性能和响应速度。在本文中,我们将介绍如何使用Go语言编写高效的...
    99+
    2023-11-09
    linux apache 响应
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作