Apache Slider

Apache Slider 是一个 Yarn 应用,它可以用来在 Yarn 上部署并监控分布式应用。Slider 可以在应用运行期随意扩展或者收缩应用。目前它是 Apache 的孵化项目。

Yarn 上的应用在停止之后可以重新被启动,并且 Yarn 上的应用的分布是持久化的,重启之后的位置会尽量接近之前的位置,借助该特性,应用可以记住数据存放位置,所以启动时间也会加快。

Yarn可以监控“Yarn容器”的健康状态,当容器挂掉时,它会通知Slider。同时,Slider会请求Yarn创建一个新容器,Slider会创建一个失败容器的替代组件。Slider可以保证配置文件中指定数量的应用正常运行。

Yarn的特性包括:

  • 支持用户在Yarn集群中创建随需应变的应用

  • 支持不同的用户/应用运行不同版本的应用

  • 支持用户配置不同的应用实例

  • 按需停止/暂停/恢复应用实例

  • 按需扩展/收缩应用实例

Slider工具是一个Java的命令行应用,它会把信息持久化为JSON文档并存储到HDFS。当集群启动后,我们可以使用命令扩展或者收缩集群。集群也可以被停止或者重启。对Slider感兴趣的朋友可以看看Yu Liu在一个Meetup上的演讲PPT

Apache Slider编译安装

简介

Apache Slider目前是Apache二级孵化项目,主要用途是在YARN上部署用户已有的服务或者组件,如:hbase,storm,kafka.

下载地址:Apache Slider Download,目前最新0.91.0版本

系统要求

需要安装软件

  • Apache Hadoop Hadoop 2.6+
  • Apache Zookeeper 3.4+
  • Oracle JDK 1.7 (64-bit)
  • Python 2.6+
  • openssl

需要启动服务

Zookeeper

提供slider应用所需的zookeeper数据存放目录,如hbase的zookeeper.znode.parent

/services/slider/users/{username}/{application_name}
#for example:
/services/slider/users/hadoop/cl1

将在slider中启动的应用所用container信息注册在此位置

/registry/users/{username}/services/org-apache-slider/{application_name}
#for example:
/registry/users/hadoop/services/org-apache-slider/cl1/components/container-1473130308719-0016-01-000002
HDFS

提供slider应用包所需的hdfs数据存放目录

 /user/{username}/.slider/package/{package_name}/slider-{package_name}-app-package-{version}.zip
 #for example:
 /user/hadoop/.slider/package/HBASE/slider-hbase-app-package-0.98.21-hadoop2.zip

提供slider应用所需的hdfs数据存放目录,包括一些配置以及hdfs数据

 /user/{username}/.slider/cluster/{application_name}/*
 #for example:
 /user/hadoop/.slider/cluster/cl1/app_config.json
 /user/hadoop/.slider/cluster/cl1/confdir
 /user/hadoop/.slider/cluster/cl1/database
 /user/hadoop/.slider/cluster/cl1/generated
 /user/hadoop/.slider/cluster/cl1/history
 /user/hadoop/.slider/cluster/cl1/internal.json
 /user/hadoop/.slider/cluster/cl1/resources.json
 /user/hadoop/.slider/cluster/cl1/snapshot
 /user/hadoop/.slider/cluster/cl1/tmp

slider应用的全局配置文件app_config.json,可以通过修改进行相关服务配置的修改

 /user/{username}/.slider/cluster/{application_name}/app_config.json
 #for example:
 /user/hadoop/.slider/cluster/cl1/app_config.json
Yarn

提供Slider启动时所需要的container.yarn-site.xml需要修改以下配置

<property>
  <name>yarn.scheduler.minimum-allocation-mb</name>
  <value>256</value>
  <description>more than 256 (ensure that YARN can allocate sufficient number of containers),general set to more than 1000 for production environment</description>
</property>
<property>
  <name>yarn.nodemanager.delete.debug-delay-sec</name>
  <value>3600</value>
  <description>Number of seconds after an application finishes before the nodemanager's DeletionService will delete the application's localized file directory and log directory. To diagnose Yarn application problems, set this property's value large enough (for example, to 600 = 10 minutes) to permit examination of these directories. After changing the property's value, you must restart the nodemanager in order for it to have an effect. The roots of Yarn applications' work directories is configurable with the yarn.nodemanager.local-dirs property (see below), and the roots of the Yarn applications' log directories is configurable with the yarn.nodemanager.log-dirs property (see also below).</description>
</property>

##编译

下载源码包解压至某目录${BUILD_DIR},maven项目,编译命令

mvn clean site:site site:stage package -DskipTests

执行包生成在

${BUILD_DIR}/apache-slider-0.91.0-incubating/slider-assembly/target/

压缩包为tar.gz和zip格式,任选其一

slider-0.91.0-incubating-all.tar.gz
slider-0.91.0-incubating-all.zip

##安装

选择安装目录${SLIDER_INSTALL_DIR}

cp slider-0.91.0-incubating-all.zip ${SLIDER_INSTALL_DIR}
cd ${SLIDER_INSTALL_DIR}
unzip slider-0.91.0-incubating-all.zip
ln -s slider-0.91.0-incubating slider

设置环境变量,根据你自己的需要修改/etc/profile或者~/.bash_profile

export SLIDER_HOME=${SLIDER_INSTALL_DIR}/slider
export PATH=$SLIDER_HOME/bin:$PATH

修改配置文件$SLIDER_HOME/conf/slider-env.sh: export JAVA_HOME=${JAVA_HOME} export HADOOP_HOME=${HADOOP_HOME} export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop

##测试 通过slider命令验证一些基本功能。 ###slider help 测试slider help命令查看是否正常,正常说明PATH等环境变量是没有问题的。

[hadoop[@breath](http://my.oschina.net/liu1994) ~]$ slider help
2016-09-08 14:29:58,200 [main] INFO  client.SliderClient - 
Usage: slider COMMAND [options]
where COMMAND is one of
	am-suicideTell the Slider Application Master to simulate a process failure by terminating itself
	build Build a Slider cluster specification, but do not start it
	clientInstall the application client in the specified directory or obtain a client keystore or truststore
	createCreate a live Slider application
	dependencySlider AM and agent dependency (libraries) management
	destroy   Destroy a stopped Slider application
	diagnostics   Diagnose the configuration of the running slider application and slider client
	existsProbe for an application running
	flex  Flex a Slider application
	stop  Stop a running application
	help  Print help information
	install-keytabInstall the Kerberos keytab. Deprecated, use 'keytab --install'.
	install-package   Install application package. Deprecated, use 'package --install'.
	kdiag Diagnose Kerberos problems
	keytabManage a Kerberos keytab file (install, delete, list) in the sub-folder 'keytabs' of the user's Slider base directory
	kill-containerKill a container in the application
	list  List running Slider applications
	lookuplook up a YARN application
	nodes List the node information for the YARN cluster or a running application
	package   Install/list/delete application packages and list app instances that use the packages
	registry  Query the registry of a YARN application
	resolve   Query the registry of a YARN application
	statusGet the status of an application
	start Start a stopped application
	tokenssave tokens to a file or list tokens in a file
	updateUpdate template for a Slider application
	upgrade   Rolling upgrade/downgrade the application to a newer/previous version
	version   Print the Slider version information
Most commands print help when invoked without parameters or with --help
2016-09-08 14:29:58,244 [main] INFO  util.ExitUtil - Exiting with status 0

###slider package --list 测试slider package --list命令查看是否正常,正常说明HDFS、YARN等服务配置是正常的。我这里上传了一个HBASE的app包,所以显示HBASE。

[hadoop[@breath](http://my.oschina.net/liu1994) conf]$ slider package --list
2016-09-08 14:28:49,187 [main] INFO  client.RMProxy - Connecting to ResourceManager at breath/192.168.246.136:23140
2016-09-08 14:28:50,102 [main] INFO  client.SliderClient - Package install path : hdfs://breath:9000/user/hadoop/.slider/package
List of installed packages:
	HBASE

2016-09-08 14:28:51,068 [main] INFO  util.ExitUtil - Exiting with status 0

###slider list 测试slider package --list命令查看是否正常,正常说明HDFS、YARN等服务配置是正常的。我这里已经通过HBASE已经启动了一个cluster名为cl1,所以显示cl1状态为RUNNING.

[hadoop[@breath](http://my.oschina.net/liu1994) conf]$ slider list
2016-09-08 14:28:24,088 [main] INFO  client.RMProxy - Connecting to ResourceManager at breath/192.168.246.136:23140
cl1RUNNING  application_1473130308719_0016  http://breath:23188/proxy/application_1473130308719_0016/
2016-09-08 14:28:26,187 [main] INFO  util.ExitUtil - Exiting with status 0

#Apache Slider + Hbase

##系统环境

安装如下组件,部署可用环境

Apache Hbase配置相关目录及环境变量,不启动服务,主要作用为client连接slider hbase需要使用

Apache Slider部署参照Apache Slider编译安装

##Hbase App Package编译

###下载Hbase可执行包 Apache Hbase 0.98.21-hadoop Apache Hbase Download 下载软件包hbase-0.98.21-hadoop2-bin.tar.g至/home/hadoop/Downloads目录下,重命名为hbase-0.98.21-hadoop2.tar.gz。

cd /home/hadoop/Downloads
mv hbase-0.98.21-hadoop2-bin.tar.gz hbase-0.98.21-hadoop2.tar.gz

###编译环境

Slider编译环境参照Apache Slider编译安装

Hbase编译命令

mvn clean package -DskipTests -Phbase-app-package -Dhbase.version=0.98.21-hadoop2 -Dpkg.version=0.98.21-hadoop2 -Dpkg.name=hbase-0.98.21-hadoop2.tar.gz -Dpkg.src=/home/hadoop/Downloads

生成Slider-hbase-app-package-${version}.zip。

${BUILD_DIR}/apache-slider-0.91.0-incubating/app-packages/hbase/target/slider-hbase-app-package-0.98.21-hadoop2.zip

##创建package 创建package

slider package --install --name HBASE --package slider-hbase-app-package-0.98.21-hadoop2.zip

查看package是否已经上传

hadoop fs -ls /user/hadoop/.slider/package/HBASE/slider-hbase-app-package-0.98.21-hadoop2.zip

替换新的package

slider package --install  --name HBASE --package slider-hbase-app-package-0.98.21-hadoop2.zip --relpacepkg

删除package

slider package --delete --name HBASE 

##创建slider app ###slider app配置文件 需要配置如下两个配置文件

${BUILD_DIR}/apache-slider-0.91.0-incubating1/app-packages/hbase/appConfig-default.json
${BUILD_DIR}/apache-slider-0.91.0-incubating1/app-packages/hbase/resources-default.json

拷贝以供修改使用

cd ${BUILD_DIR}/apache-slider-0.91.0-incubating1/app-packages/hbase
cp appConfig-default.json appConfig.json
cp resources-default.json resources.json

####appConfig.json appConfig.json配置为Hbase相关服务的参数配置,可以理解为通过此文件生成服务启动时的hbase-site.xml和hbase-env.sh

#####默认配置如下

{
    "schema": "http://example.org/specification/v2.0.0",
    "metadata": {
    },
    "global": {
        "application.def": ".slider/package/HBASE/slider-hbase-app-package-${pkg.version}.zip",
        "create.default.zookeeper.node": "true",
        "java_home": "/usr/jdk64/jdk1.7.0_67",
        "system_configs": "core-site",

        "site.global.app_user": "yarn",
        "site.global.app_version": "${hbase.version}",
        "site.global.app_root": "${AGENT_WORK_ROOT}/app/install/hbase-${hbase.version}",

        "site.global.metric_collector_host": "${NN_HOST}",
        "site.global.metric_collector_port": "6188",
        "site.global.metric_collector_lib": "",

        "site.global.hbase_instance_name": "instancename",
        "site.global.hbase_root_password": "secret",
        "site.global.user_group": "hadoop",
        "site.global.monitor_protocol": "http",
        "site.global.hbase_thrift_port": "${HBASE_THRIFT.ALLOCATED_PORT}",
        "site.global.hbase_thrift2_port": "${HBASE_THRIFT2.ALLOCATED_PORT}",
        "site.global.hbase_rest_port": "${HBASE_REST.ALLOCATED_PORT}",

        "site.hbase-env.hbase_master_heapsize": "1024m",
        "site.hbase-env.hbase_regionserver_heapsize": "1024m",

        "site.hbase-site.hbase.rootdir": "${DEFAULT_DATA_DIR}/data",
        "site.hbase-site.hbase.superuser": "${USER_NAME}",
        "site.hbase-site.hbase.tmp.dir": "${AGENT_WORK_ROOT}/work/app/tmp",
        "site.hbase-site.hbase.local.dir": "${hbase.tmp.dir}/local",
        "site.hbase-site.hbase.zookeeper.quorum": "${ZK_HOST}",
        "site.hbase-site.zookeeper.znode.parent": "${DEFAULT_ZK_PATH}",
        "site.hbase-site.hbase.regionserver.info.port": "0",
        "site.hbase-site.hbase.bulkload.staging.dir": "/user/${USER_NAME}/hbase-staging",
        "site.hbase-site.hbase.coprocessor.region.classes": "org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint",
        "site.hbase-site.hbase.master.info.port": "${HBASE_MASTER.ALLOCATED_PORT}",
        "site.hbase-site.hbase.regionserver.port": "0",
        "site.hbase-site.hbase.master.port": "0"
    },
    "components": {
        "slider-appmaster": {
            "jvm.heapsize": "1024M"
        }
    }
}

#####根据测试集群调整配置如下

{
    "schema": "http://example.org/specification/v2.0.0",
    "metadata": {
    },
    "global": {
        "application.def": ".slider/package/HBASE/slider-hbase-app-package-${pkg.version}.zip",
        "create.default.zookeeper.node": "true",
        "java_home": "/opt/beh/core/jdk",
        "system_configs": "core-site",

        "site.global.app_user": "hadoop",
        "site.global.app_version": "${pkg.version}",
        "site.global.app_root": "${AGENT_WORK_ROOT}/app/install/hbase-${pkg.version}",

        "site.global.metric_collector_host": "${NN_HOST}",
        "site.global.metric_collector_port": "6188",
        "site.global.metric_collector_lib": "",

        "site.global.hbase_instance_name": "instancename",
        "site.global.hbase_root_password": "secret",
        "site.global.user_group": "hadoop",
        "site.global.monitor_protocol": "http",
        "site.global.hbase_thrift_port": "${HBASE_THRIFT.ALLOCATED_PORT}",
        "site.global.hbase_thrift2_port": "${HBASE_THRIFT2.ALLOCATED_PORT}",
        "site.global.hbase_rest_port": "${HBASE_REST.ALLOCATED_PORT}",

        "site.hbase-env.hbase_master_heapsize": "1024m",
        "site.hbase-env.hbase_regionserver_heapsize": "1024m",

        "site.hbase-site.hbase.rootdir": "${DEFAULT_DATA_DIR}/data",
        "site.hbase-site.hbase.superuser": "hadoop",
        "site.hbase-site.hbase.tmp.dir": "${AGENT_WORK_ROOT}/work/app/tmp",
        "site.hbase-site.hbase.local.dir": "/opt/beh/data/hbase/local",
        "site.hbase-site.hbase.zookeeper.quorum": "breath",
        "site.hbase-site.zookeeper.znode.parent": "${DEFAULT_ZK_PATH}",
        "site.hbase-site.hbase.regionserver.info.port": "0",
        "site.hbase-site.hbase.bulkload.staging.dir": "/user/${USER_NAME}/hbase-staging",
        "site.hbase-site.hbase.coprocessor.region.classes": "org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint",
        "site.hbase-site.hbase.master.info.port": "${HBASE_MASTER.ALLOCATED_PORT}",
        "site.hbase-site.hbase.regionserver.port": "0",
        "site.hbase-site.hbase.master.port": "0",
        "site.hbase-site.hbase.cluster.distributed": "true"
    },
    "components": {
        "slider-appmaster": {
            "jvm.heapsize": "1024M"
        }
    }
}

其中测试时如下几项修改比较重要:

  • JAVA_HOME
    "java_home": "/opt/beh/core/jdk",

  • Zookeeper集群主机列表,主机名逗号隔开
    "site.hbase-site.hbase.zookeeper.quorum": "breath",

  • hbase.local.dir参数设置,默认参数若不能使用导致服务不能启动 "site.hbase-site.hbase.local.dir": "/opt/beh/data/hbase/local"

  • hbase.cluster.distributed必须设置为true,表示为分布式,否则local模式导致hbase启动minizookeepercluster,与目前的zookeeper集群端口产生冲突。
    "site.hbase-site.hbase.cluster.distributed": "true"

####resource.json resource.json的配置主要是设置Hbase中不同服务启动时的container相关参数

#####默认配置如下

{
  "schema": "http://breath/specification/v2.0.0",
  "metadata": {
  },
  "global": {
    "yarn.log.include.patterns": "",
    "yarn.log.exclude.patterns": "",
    "yarn.component.instances": "1",
    "yarn.vcores": "1"
  },
  "components": {
    "slider-appmaster": {
      "yarn.memory": "1024"
    },
    "HBASE_MASTER": {
      "yarn.role.priority": "1",
      "yarn.component.instances": "1",
      "yarn.placement.escalate.seconds": "10",
      "yarn.memory": "1500"
    },
    "HBASE_REGIONSERVER": {
      "yarn.role.priority": "2",
      "yarn.component.instances": "2",
      "yarn.memory": "1500",
      "yarn.container.failure.threshold": "15",
      "yarn.placement.escalate.seconds": "60"
    },
    "HBASE_REST": {
      "yarn.role.priority": "3",
      "yarn.component.instances": "1",
      "yarn.component.placement.policy": "1",
      "yarn.memory": "556"
    },
    "HBASE_THRIFT": {
      "yarn.role.priority": "4",
      "yarn.component.instances": "1",
      "yarn.component.placement.policy": "1",
      "yarn.memory": "556"
    },
    "HBASE_THRIFT2": {
      "yarn.role.priority": "5",
      "yarn.component.instances": "1",
      "yarn.component.placement.policy": "1",
      "yarn.memory": "556"
    }
  }
}

###通过slider启动hbase 此处cl1为为启动的slider-hbase的一个实例名称。后文用${slider_application_name}表示

  • 创建

    slider create cl1 --template appConfig.json --resources resources.json

  • 启动

    slider start cl1

  • 关闭

    slider stop cl1

  • 摧毁

    slider destroy --force cl1

###通过YARN WEB端页面查看应用是否正常启动

输入图片说明

输入图片说明

输入图片说明

###登录Slider Hbase ####客户端程序 解压slider-hbase-app-package-0.98.21-hadoop2.zip包含两个python脚本,可以将这两个脚本放置在$HBASE_HOME/bin或者$SLIDER_HOME/bin

hbase-slider.py
hbase-slider

#####client端配置 配置默认加载为${USER_HOME}/{slider_application_name}/conf 将$HBASE_HOME/conf拷贝至此.

输入图片说明

输入图片说明

将此配置文件覆盖${USER_HOME}/{slider_application_name}/conf/hbase-site.xml

[hadoop[@ breath] ~]$ tree $HOME/cl1
/home/hadoop/cl1
└── conf
    ├── hadoop-metrics2-hbase.properties
    ├── hbase-env.cmd
    ├── hbase-env.sh
    ├── hbase-policy.xml
    ├── hbase-site.xml
    ├── log4j.properties
    └── regionservers

1 directory, 7 files

#####hbase-slider测试

[hadoop[@ breath] ~]$ hbase-slider cl1
/home/hadoop/cl1/conf/hbase-site.xml is -0.0106352635887 hours old
Running: hbase --config /home/hadoop/cl1/conf shell
16/09/08 16:23:41 INFO Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 0.98.14-hadoop2, r4e4aabb93b52f1b0fef6b66edd06ec8923014dec, Tue Aug 25 22:35:44 PDT 2015

hbase(main):001:0> list
TABLE                                                                                                                                                                            
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/beh/core/hbase/lib/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/beh/core/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
0 row(s) in 5.8140 seconds

=> []
hbase(main):002:0> create 'testtable','info'
0 row(s) in 1.0310 seconds

hbase(main):004:0> put 'testtable','1','info:name','zyl'
0 row(s) in 0.6850 seconds

hbase(main):006:0> scan 'testtable'
ROW                                           COLUMN+CELL                                                                                                                        
 1                                            column=info:name, timestamp=1473323556298, value=zyl                                                                               
1 row(s) in 0.0760 seconds

Slider技术内幕—深入解析Slider架构设计与实现原理

http://mp.weixin.qq.com/s?__biz=MzI0NTMzMjcyNw==&mid=2247483677&idx=1&sn=c008b7dc4ab1aaf4ae22fad8d0738236&mpshare=1&scene=23&srcid=1206a41dPTiZ0ILkc4YYB7d5#rd

Slider设计理念与基本架构

http://mp.weixin.qq.com/s?__biz=MzI0NTMzMjcyNw==&mid=2247483727&idx=1&sn=edfe4e2d66c215df1082815f0b86c0bc&mpshare=1&scene=23&srcid=1206Ls2I1MQQ32BfM4mf8MlV#rd

 

 

Slider应用程序设计方法-SLIDER应用部署及定义

http://mp.weixin.qq.com/s?__biz=MzI0NTMzMjcyNw==&mid=2247483731&idx=1&sn=e393c7cc3cf4c61cdfd8cd1d9d0182c2&mpshare=1&scene=23&srcid=1206jyzKkpN3nOReCy8yzmkk#rd

 

 

Slider应用程序设计方法-SLIDER应用设计

http://mp.weixin.qq.com/s?__biz=MzI0NTMzMjcyNw==&mid=2247483866&idx=1&sn=b61672f6c5dd523ce1c0c82bbe26af1c&mpshare=1&scene=23&srcid=1206PVo60iYV53qmeYIXudX6#rd

 

 

使用Apache Slider管理Docker集群

 

 

 

在第1章,介绍了Slider学习环境的搭建方法,这是学习Slider需要进行的是最基本的准备工作。在这一章中,我们做将从设计理念和基本架构方面对Slider进行介绍,这也是准备工作的一部分。通过本章的介绍将会为下面几章深入剖析Slider内部实现奠定基础。将已有的分布式应用运行在资源管理系统YARN,需要专业人员开发客户端和ApplicationMaster,可能需要更改应用程序,难度较大。Slider提供了将其他应用运行在YARN中的能力。在本章,将从背景、设计思想和基本架构方面对Slider框架进行介绍。

2.1SLIDER产生背景

为了解决MR1扩展性差、可靠性差、资源利用率低和无法支持多种计算框架等局限性,Apache社区将其升级了计算框架MRv2。Hadoop将资源管理功能抽象成了一个独立的通用系统YARN,如下图所示:

Slider设计理念与基本架构

图2-1以MapReduce为核心和以YARN为核心的软件栈对比

在以MapReduce为核心的软件栈中,资源管理系统YARN是可插拔的,比例选择Mesos替代YARN,一旦MapReduce接口改变,所有的资源管理系统的实现均需要跟着改变。但是以YARN为核心的软件栈则不同,所有框架都需要实现YARN定义的对外接口以允许在YARN之上,从而形成一个以YARN核心的生态系统。

随着YARN的功能完善,其已形成了一个弹性计算平台,支持多种框架,如下图所示:

Slider设计理念与基本架构

图2-2以YARN为核心的生态系统

在YARN中可以运行MapReduce、Spark这样的短作业,也可以部署向Tomcat、MySQL这种长服务。YARN根据各种计算框架、应用的负载或者需求去调整各自占用的资源,实现集群资源共享计弹性收缩。

开发者为了使YARN支持自己的计算框架或者服务,需要编写组件Client(客户端)和ApplicationMaster,向YARN申请资源、任务调度与容错、网络容错,并且要监控各个任务状态等细节,对开发者要求过高,而且每增加一个框架或者服务都要重新编写相对应的组件,重复工作;如果想将已有服务运行在YARN中,需要修改服务的代码,以与YARN框架兼容,代价较大。

为了解决这个问题,Apache社区推出了Slider,其源于Hoya,一个尝试将HBase运行在YARN中的项目。ApacheSlider目前是孵化项目,可以使用户在不对已存在服务进行任务修改的情况下部署到YARN集群中,并提供部署、管理及扩展等操作。

同时,Slider可以在集群中部署多版本、异构的应用,每个应用可以根据需求配置不同的参数,在运行过程中动态的扩展或者减少资源的应用,并且对失败的进程透明的回复。在YARN中,每个应用都以Application的形式运行,每个进程都运,行在Container中,Container目录中包含了应用的配置、脚本和数据等;在YARN中运行应用,可以使应用充分整合Hadoop生态系统,例如Hadoop数据,计算/存储资源及安全、管理和操作能力。

2.2SLIDER基础知识

为了便于下面分析ApacheSlider,本小节对Slider涉及的术语进行比较全面的介绍。

(1))YARN

YARN是Hadoop2.0中的资源管理系统,它是一个通用的资源管理模块,可为各类应用程序进行资源管理和调度。YARN不仅局限于MR一种框架使用,也可以提供其他框架,比如TEZ、Spark及Storm等。

(2)Application

可以运行在YARN中的程序都可以成为Application,包括计算框架MapReduce、内存计算、流计算等;常驻服务,如ApacheHBase、Accumulo及Storm等。其中Slider是运行在YARN中用于Application管理的框架,本质也是Application。

(3)Instances

Application程序在YARN中的一次执行,YARNCluster根据应用配置文件启动的应用实例,实例的状态可以是运行状态或者停止状态,当停止时配置信息或者Instance数据保根据存在HDFS中。同一个Application可以在YARN中同时执行多次(共享相同的服务器)。每个Application

Instance由一个或者多个Componet的集合组成,ApplicationState是Instance的模型,记录每个Instances的正确状态、所需要的资源、运行历史信息等。

(4)Components

Component是ApplicationInstances的组成构件,代表应用的程序的一个运行模块,例如HBase中的HMaster、HRegionServer、RestServer都可以称为Component,其以YARNContainer的形式运行在YARN中。不同的Component可以执行不同的程序或者命令,也可以使用不同的配置选项和参数。

(5)Role

ApplicationMaster为了实现对Component(运行在YARNContainer中)进行管理,需要对Component及其Container的实时运行信息进行记录及更新。Component在ApplicationMaster的映射形式为Role(Server-Siderlogin),其实例化为RoleInstances。SliderAppMaster根据Role的信息进行任务的调度和服务的管理。根据具体的Component不同分为SliderAppMasterRole和ComponentRole。

(6)ServiceRegistry

客户端需要访问运行在YARN中的服务,但是客户端可能运行在集群外,而且运行在YARN中的服务是随机分配到各个主机上,不可预测而且端口也是随机的,为了解决这些问题需要引入服务注册(Service

Registry)。服务的注册的方式很多,包括ZK、DNS、FloatingIPAddress、LDAP等。

当前Slider使用的方式是YARNServiceRegistry,将YARNApplication的binding信息发布到ZK中,包括IPC端口,Service-aware

URL及配置等,客户端从ZK中获取所需要的访问信息。对于ServiceRegistry,除了ZK,有很多的替代方式,如ApacheCurator、HelixService

Registry,TwillRegistry等,以后会进行详述。

2.3SLIDER基本架构

Slider将分布式应用以YARNApplication的形式运行在YARN中,其基本设计思想是将分布式应用的服务进程以Container的形式运行在YARN资源管理系统中,客户端通过与YARN的交互来对应用进行管理。

2.3.1Slider基本组成结构

Slider(YARNApplication)的总体结构仍然是Master/Slave结构,运行在资源管理系统YARN中,SliderAppMaster为Master,SliderAgent为Slave。SliderAppMaster向RM申请资源,并要求NM启动SlliderAgent进程,Agent根据服务的定义启动相对应的Component。

图2-3描述了Slider的基本组成结构,Slider主要由SliderAppMaster、SliderAgent和AppComponent(由LinuxService启动,可以是Docker或者JVM程序等不同程序),Agent启动在Container中,但是Component进程由Linux系统启动,可能会不属于Cotainer。

Slider设计理念与基本架构

图2-3Apache

Slider的基本架构

根据app的配置解析并生成Application的启动计划,SliderAppMaster根据计划向YARN申请Container(对应一个Component)。在ApplicationInstance启动后,监控其运行状态,并当服务的Component因异常停止后,自动恢复。

SliderAppMaster申请到Container后,在Container中启动SliderAgent进程,Agent向SliderAppMaster注册并发送心跳信息,Agent根据心跳响应获取SliderAppMaster发送的命令并执行,包括服务的启动、停止及其他操作。

每个applicationinstance有一个或者多个Component的集合,每个Component有不同的程序或者命令,使用的配置和参数也会不同,例如HBaseHMaster

component会通过SliderAgent启动HMasterJVM。当前SliderAgent也支持DockerApp的启动。

与SliderAppMaster及YARN通过REST或者RPC通信,对外提供CLI和底层API来操作Application

2.3.2Slider通信协议

通信协议是Slider各个组件的大动脉,了解不同组件之间的通信协议有助于更深入的学习Slider框架,其中RPC协议是连接各个组件的“大动脉”,对于RPC,通信双方有一端是Client,另一端是Server,且Client总是主动连接Server,因此YARN中的组件采用的是pull-based通信模型。另外SliderAppMaster对外提供REST通信方式,主要用于与SliderAgent的心跳与注册过程,采用的Pull-based通信模型。如图2-4所示,实线箭头指向的组件是RPCServer,而箭头尾部的组件是RCPClient,虚线箭头指向RESTServer,虚线箭尾指向RESTClient端,由以下部分组成:

Slider设计理念与基本架构

图2-4ApacheSlider的交互协议

1)SliderClient与RM之间的协议——ApplicationClientProtocol;SliderClient通过该RPC协议提交应用程序,查询应用程序状态等

2)Admin与RM之间的协议——ResourceManagerAdministrationProtocol;Admin通过该RPC协议更新系统配置文件,比如节点黑白名单,用户队列等。

3)AM与RM之间的协议——ApplicationMasterProtocol;AM通过该RPC协议向RM注册和撤销自己,并为各个任务申请资源

4)AM与NM之间的协议——ContainerManagementProtocol;AM通过该RPC协议要求NM启动或者停止Container,获取各个Container的使用状态等信息

5)NM与RM之间的协议——ResourceTracker;NM通过向该RPC协议向RM注册,并定时发送心跳信息汇报当前节点的资源使用情况和Container运行情况

6)SliderClient与AM之间的协议——SliderClusterProtocol;SliderClient通过该RPC协议请求AM进行App的信息的查询

7)SliderOpUser与AM之间REST协议——ManagementResource、PublisherResource、RegistryResource及ApplicationResource,用户通过该REST协议进行应用信息的查询,服务的操作等

8)SliderAgent与AM之间的REST协议——AgentResource,Agent向AM注册,并实现Agent与AM之间的心跳信息的交互

2.4SLIDER工作流程

通过Slider将常驻服务运行在YARN中,与常规的提交YARNApp(eg,MR)大致相同,分为两个阶段运行该应用程序;第一个阶段是启动SliderAppMaster;第二个阶段是由SliderAppMaster创建应用程序,为它申请资源,并监控它的整个运行过程,直到运行完成。如图2-5所示,Slider的工作流程分为以下几个步骤:

Slider设计理念与基本架构

图2-5Slider运行流程

步骤1:用户通过CLI启动SliderAppMaster,SliderClient通过调用create及start向YARN提交应用请求,分配资源并启动SliderAppMaster,启动过程中从Apppackage中读取所需要的配置信息,初始化服务

步骤2:SliderAppMaster启动后,向YARN申请资源,并启动container

步骤3:Container被激活并启动Agent,SliderAppMaster分配Container后,启动Container,并启动SliderAgent

步骤4:SliderAgent的启动后,从应用程序的描述文件(metainfo.xml)中读取应用的启动脚本及目录

步骤5:SliderAgent向SliderAppMaster注册,通过SliderAppMaster向SliderAMWebApp服务的REST(/agent/register)完成注册

步骤6:SliderAppMaster向SliderAgent发送命令,SliderAgent根据应用程序的描述文件启动对应的脚本,启动对应的服务(Component)

步骤7:SliderAgent与SliderAppMaster进行心跳交互,SliderAgent向SliderAppMaster汇报服务状态及配置等

步骤8:SliderAppMaster通过YARNRegistry向zk中注册服务地址,客户端获取服务地址,并对服务进行信息的查询和操作

2.5小结

本章介绍了Slider的设计理念和基本架构,涉及到的内容较多,包括Slider产生背景、Slider术语解释、Slider架构和通信协议等。从YARN的角度上讲,Slider与MRAppMaster等Application的执行过程相同。在后面几章中,将深入探讨Slider内部实现原理,以便进一步深层次理解Slider。

转载于:https://my.oschina.net/hblt147/blog/3053760

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值