内容概要
本文是继Heron实现单节点集群环境后的又一篇文章,主要介绍实现Heron+Aurora+Mesos+HDFS实现高可用集群环境的配置与搭建。主要实现使用Apache Aurora和Apache Mesos部署Heron三个节点(一个Master节点+2个Slave节点)的集群环境。其中,Master节点中负责运行Mesos Master,Aurora Master,Aurora Client,Zookeeper,HDFS Namenode和Heron,并负责提交Heron的topology。提交的拓扑由Aurora Scheduler负责将任务分配到相应的集群节点中运行。最终,可以在Master主机中运行Heron Tracker和Heron UI对提交的Topology进行管理和查看。
主要内容:
- 集群的基本环境配置
- 在三个Ubuntu16.04虚拟主机中部署Apache Mesos, Apache Aurora
- 部署Zookeeper集群环境(三节点)
- 安装HDFS文件系统(三节点)
- 部署三个节点的Heron集群(在上述基础上配置Heron集群环境)
集群环境
集群采用三台主机进行配置,一个Master节点,两个从节点,在对Heron集群进行扩充时,可以通过复制从节点后在各个主机中进行配置迅速完成,之后的文章会进行详细介绍,这里先介绍各个节点中的配置过程。系统采用:Ubuntu16.04(VMware Workstation Pro 12,Heron版本为:Heron Version:0.17.5
- 机器01(Heron01):HERON01_IP/hostname: heron01,内存(5g),硬盘(20g),核心(4)
- 机器02(Heron02):HERON02_IP/hostname: heron02,内存(5g),硬盘(20g),核心(4)
- 机器03(Heron03):HERON03_IP /hostname: heron03,内存(5g),硬盘(20g),核心(4)
组件部署示意表格:
主机名称 | 部署组件 |
heron01 | 主节点(Mesos Master, Aurora Master, HDFS Master, Zookeeper, Heron Binaries,Aurora Client,Heron) |
heron02 | 从节点(Mesos Slave/Agent,Aurora Slave/Thermos,HDFS DataNode,Zookeeper) |
heron03 | 从节点(Mesos Slave/Agent,Aurora Slave/Thermos,HDFS DataNode,Zookeeper) |
上表展示了将要在集群中安装的服务和组件的分配情况。在heron01主机中,我们将安装Zookeeper,Heron Binaries、Aurora Master、Mesos Master和HDFS Master。在Heron02和Heron03主机中,我们将安装Aurora Slave(Thermos)、Mesos Slave和HDFS Data Node。在实际的较大的生产环境的集群部署时,我们将会在多个不同的主机中安装Heron01中的不同服务。
集群基础环境配置
1. 配置主机名和IP:在集群中的每个主机中配置正确的主机名和IP,我的hosts配置文件(/etc/hosts)内容如下:
HERON01_IP heron01
HERON02_IP heron02
HERON03_IP heron03
以上配置的同时,需要在每个主机中的/etc/hostname文中修改为对应的主机名,例如在heron01主机中:
yitian@heron01:~$ cat /etc/hostname
heron01
注:以上配置主机名的方式为Ubuntu系统,其他OS需要使用相应的方式修改主机名称,否则之后的步骤中可能会出现异常。
2. 设置SSH免密登录:Ubuntu16.04 配置集群SSH无密码登录
3. JDK环境配置,在每台主机配置安装JDK1.8的环境:见Heron单节点环境搭建前半部分JDK环境的安装内容。
Mesos的安装和配置
这里为集群中的每个主机安装Mesos(分布式集群管理器,类似YARN)。如下的步骤需要在集群中每个主机中进行。Mesos scheduler和executor在同样的包中。因此我们可以在每个合适的主机上运行Mesos Master和Slaves,这里我们在Heron01中运行master,Heron02和Heron03主机运行slaves。
注意:Mesos的安装配置过程需要在每个主机中进行相同的步骤。
对Mesos的安装有两种方式进行:
- 一种是官网中(Apahce Mesos官方文档)提供的编译安装的方式。该安装方式耗时较长,但官方支持,经测试可以正常完成。(采用)
- 另一种方式为使用ubuntu中agt-get命令安装,此安装方式为Aurora官方文档(详细地址点我)中给出的,安装过程简单,耗时较短,但在该集群配置的过程中没有采用,之后会在测试之后进行另行说明。(未采用)
这里采用Mesos编译安装的方式,为集群中的所有主机中安装Mesos,进行配置。Mesos在Heron集群中的详细安装和配置过程见:Heron集群中编译方式安装配置Mesos集群。
因为Mesos的使用依赖于Zookeeper的运行,因此在上面的编译安装Mesos集群的内容中也包含了Zookeeper的安装和配置,独立的内容见:Ubuntu16.04安装配置使用Zookeeper集群。
Aurora的安装和配置
到这里,我们已经成功完成了mesos和zookeeper集群的安装和配置,下面进行Apache Aurora的安装和配置。详细的Aurora在Heron集群中的配置和使用见:Heron集群中安装配置Aurora
如果上述的Aurora的安装和配置都成功完成,那么此时集群中Mesos和Aurora的运行状态应该与在Heron集群中安装配置Aurora最后完成安装时的一致,如果有异常可以会过去检查相关的配置内容。
HDFS的安装和配置
Heron集群的运行需要一个公共的存储组件来共享拓扑文件以进行任务分配,它支持HDFS等多种系统组件作为其文件共享组件,这里使用HDFS作为Heron的文件共享组件。具体的安装和使用见:HDFS在Heron集群中的配置和使用。
Heron的安装
因为只需要在用于提交topology的主机中安装heron,为了保持一致性,这里我们只需要在Master(heron01)中安装Heron。Heron的安装较为简单,它的过程与在单节点环境的安装和配置过程一样,详见:Heron单节点环境搭建。
Heron高可用集群的配置
在Master主机(heron01)中安装完成Heron之后,默认安装文件为~/.heron。通过下面的过程,我们可以在该集群中将Heron部署至Aurora中,采用aurora scheduler作为heron的调度器(scheduler),使用zookeeper作为状态管理器(state manager),使用HDFS作为Uploader。因此需要修改的配置文件为:
- /conf/aurora/scheduler.yaml
- /conf/aurora/uploader.yaml
- /conf/aurora/statemgr.yaml
- /conf/aurora/heron.aurora
- /conf/aurora/client.yaml
1. 共享Heron core binary文件。在开始上述各项配置文件的修改前,需要进行这一个重要的操作:将Heron core binary放到一个共享的位置上,以使scheduler可以下载并执行Heron的Topologies。这里我们使用HDFS作为共享的文件系统。
yitian@ubuntu:~/hadoop/hadoop-2.7.4$ bin/hdfs dfs -mkdir /heron
yitian@ubuntu:~/hadoop/hadoop-2.7.4$ bin/hdfs dfs -mkdir /heron/dist
yitian@ubuntu:~/hadoop/hadoop-2.7.4$ bin/hdfs dfs -put ~/.heron/dist/heron-core.tar.gz /heron/dist
yitian@ubuntu:~/hadoop/hadoop-2.7.4$ bin/hdfs dfs -ls /heron/dist
Found 1 items
-rw-r--r-- 1 yitian supergroup 160410746 2018-02-13 01:10 /heron/dist/heron-core.tar.gz
2. 部署Aurora Scheduler,修改配置文件sheduler.yaml内容如下:
# scheduler class for distributing the topology for execution
heron.class.scheduler: com.twitter.heron.scheduler.aurora.AuroraScheduler
# launcher class for submitting and launching the topology
heron.class.launcher: com.twitter.heron.scheduler.aurora.AuroraLauncher
# location of java - pick it up from shell environment
heron.directory.sandbox.java.home: /usr/lib/jvm/java-1.8.0-openjdk-amd64/
# Invoke the IScheduler as a library directly
heron.scheduler.is.service: False
3. 配饰zookeeper作为state manager(statemgryaml):
# local state manager class for managing state in a persistent fashion
# heron.class.state.manager: com.twitter.heron.statemgr.localfs.LocalFileSystemStateManager
heron.class.state.manager: com.twitter.heron.statemgr.zookeeper.curator.CuratorStateManager
# local state manager connection string
# heron.statemgr.connection.string: LOCALMODE
heron.statemgr.connection.string: "heron01:2181" # 这里配置zookeeper所在主机的的IP
# path of the root address to store the state in a local file system
# heron.statemgr.root.path: /vagrant/.herondata/repository/state/${CLUSTER}
heron.statemgr.root.path: "/heron" # State manager的root路径,在配置heron_tracker.yaml中会用到
# create the sub directories, if needed
heron.statemgr.localfs.is.initialize.file.tree: True
4. 配置HDFS作为Uploader(uploader.yaml):
# uploader class for transferring the topology jar/tar files to storage
# heron.class.uploader: com.twitter.heron.uploader.localfs.LocalFileSystemUploader
heron.class.uploader: "com.twitter.heron.uploader.hdfs.HdfsUploader"
# name of the directory to upload topologies for local file system uploader
# heron.uploader.localfs.file.system.directory: /vagrant/.herondata/repository/topologies/${CLUSTER}/${ROLE}/${TOPOLOGY}
# add
heron.uploader.hdfs.config.directory: "/home/yitian/hadoop/hadoop-2.7.4/etc/hadoop"
# heron.uploader.hdfs.topologies.directory.uri: hdfs://heron/topologies/${CLUSTER}
heron.uploader.hdfs.topologies.directory.uri: "/heron/topologies/${CLUSTER}" # 这样的路径是hdfs文件系统中的路径
# heron.uploader.hdfs.topologies.directory.uri: hdfs://home/yitian/heron/topologies/${CLUSTER} # 这种配置有问题
5. 修改heron.aurora,在Aurora集群中使用HDFS作为topology的uploader时,需要修改如下内容:
#fetch_heron_system = Process(
# name = 'fetch_heron_system',
# cmdline = 'curl %s -o %s && tar zxf %s' % (heron_core_release_uri, core_release_file, core_release_file)
#)
#fetch_user_package = Process(
# name = 'fetch_user_package',
# cmdline = 'curl %s -o %s && tar zxf %s' % (heron_topology_jar_uri, topology_package_file, topology_package_file)
#)
# 在使用HDFS作为Uploader时,将如上内容修改为如下配置
fetch_heron_system = Process(
name = 'fetch_heron_system',
cmdline = '/home/yitian/hadoop/hadoop-2.7.4/bin/hdfs dfs -get %s %s && tar zxf %s' % (heron_core_release_uri,
core_release_file, core_release_file) # 主机中配置的hadoop目录
)
fetch_user_package = Process(
name = 'fetch_user_package',
cmdline = '/home/yitian/hadoop/hadoop-2.7.4/bin/hdfs dfs -get %s %s && tar zxf %s' % (heron_topology_jar_uri,
topology_package_file, topology_package_file)
)
6. 修改Heron的客户端文件Client.yaml:
# location of the core package
# heron.package.core.uri: "file:///vagrant/.herondata/dist/heron-core-release.tar.gz"
heron.package.core.uri: "/heron/dist/heron-core.tar.gz" #这里不要将路径设置为hdfs://
# Whether role/env is required to submit a topology. Default value is False.
heron.config.is.role.required: True
heron.config.is.env.required: True
提交示例拓扑进行测试
在完成上述Heron的各项配置文件之后,我们在保证正常依次启动Zookeeper,Mesos,Aurora Scheduler,HDFS之后。可以提交Heron提供的示例拓扑进行测试运行,提交命令如下:
yitian@heron01:~$ heron submit aurora/yitian/devel --config-path ~/.heron/conf ~/.heron/examples/heron-api-examples.jar com.twitter.heron.examples.api.WordCountTopology WordCountTopology --deploy-deactivated
...
# 出现如下内容时,说明拓扑提交成功
[2018-08-20 23:41:04 +0000] [INFO]: Successfully launched topology 'WordCountTopology'
提交成功后,成功完成的集群运行详情见后面部分。
启动Heron Tracker和UI
在单节点环境安装的那篇内容中,我们可以直接运行heron-tracker和heron-ui命令,启动Heron的WebUI。这是因为Heron将Heron-tracker的启动默认为使用本地文件作为State Manager,而现在我们改用了Zookeeper作为高可用集群的State Manager,因此这里需要修改heron-tracker中的一些内容,使之可以从zookeeper中读取状态信息以为HeronUI提供数据支持。
heron-tracker所在目录:.heron/xxx/heron_tracker.yaml, 修该内容如下:
# 注释到默认的local环境下的内容
# -
# type: "file"
# name: "local"
# rootpath: "~/.herondata/repository/state/local"
# tunnelhost: "127.0.0.1"
#
# To use 'localzk', launch a zookeeper server locally
# and create the following path:
# *. /heron/topologies
# 新增zookeeper环境下的内容:
-
type: "zookeeper"
name: "aurorazk"
hostport: "heron01:2181" # 连接zookeeper集群中的一个主机
rootpath: "/heron" # 与statemgr.yaml文件中的heron.statemgr.root.path变量值一致
tunnelhost: "127.0.0.1"
完成后,运行依次运行如下命令,启动HeronUI:
heron-tracker
heron-ui
运行heron-tracker,完成后:
运行heron-ui完成后:
查看集群运行状态
以上示例拓扑提交成功后,可以查看一下整个集群的运行状态:
1. 查看Mesos
2. 查看Aurora
3. 查看HDFS
查看Zookeeper和HDFS集群文件情况(选)
注意:该部分内容是为了了解和熟悉Heron运行机制进行的,因此如果只是使用Heron环境运行拓扑,该方面可以了解一下。
1. 查看zookeeper中Heron创建的znode
在之前配置heron配置文件时,在statemgr.yaml文件中使用zookeeper作为heron的state manager。并在配置运行了三个节点的zookeeper集群。其中,在statemgr.yaml配置文件中,有如下设置:
# path of the root address to store the state in a local file system
heron.statemgr.root.path: "/heron"
现在使用zkCli.sh命令连接zookeeper集群中的一个主机(这里为heron01),进行查看:
yitian@heron01:~$ ./zookeeper/zookeeper-3.4.10/bin/zkCli.sh -server heron01:2181
...
2018-02-25 02:33:53,992 [myid:] - INFO [main-SendThread(heron01:2181):ClientCnxn$SendThread@1299] - Session establishment complete on server heron01/192.168.201.136:2181, sessionid = 0x161cc29543c006b, negotiated timeout = 30000
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: heron01:2181(CONNECTED) 0]
查看zookeeper中的目录文件:
[zk: heron01:2181(CONNECTED) 3] ls /
[mesos, zookeeper, aurora, heron, home]
[zk: heron01:2181(CONNECTED) 4] ls /heron
[statefulcheckpoints, pplans, schedulers, metricscaches, packingplans, tmasters, executionstate, locks, topologies]
2. 查看HDFS文件系统中的Heron相关的目录
在配置heron时,在uploader.yaml配置文件中使用HDFS作为uploader,配置如下:
#heron.uploader.hdfs.topologies.directory.uri: hdfs://heron/topologies/${CLUSTER}
heron.uploader.hdfs.topologies.directory.uri: "/heron/topologies/${CLUSTER}"
现在,进入HDFS文件系统中进行查看:
yitian@heron01:~/.herontools/conf$ hdfs dfs -ls /
Found 2 items
drwxr-xr-x - yitian supergroup 0 2018-02-25 01:34 /heron
drwxr-xr-x - yitian supergroup 0 2018-02-18 07:16 /home
yitian@heron01:~/.herontools/conf$ hdfs dfs -ls /heron/
Found 1 items
drwxr-xr-x - yitian supergroup 0 2018-02-25 01:34 /heron/topologies
yitian@heron01:~/.herontools/conf$ hdfs dfs -ls /heron/topologies
Found 1 items
drwxr-xr-x - yitian supergroup 0 2018-02-25 01:57 /heron/topologies/aurora
yitian@heron01:~/.herontools/conf$ hdfs dfs -ls /heron/topologies/aurora
Found 1 items
-rw-r--r-- 1 yitian supergroup 2981646 2018-02-25 01:57 /heron/topologies/aurora/WordCountTopology-yitian-tag-0--8168281366065059093.tar.gz
注:如上的zookeeper和HDFS中Heron相关的文件目录,在Heron有时出现拓扑异常失败,kill命令无用,重新提交拓扑也出现异常时,可以进行解决,这里先不详述。
Heron拓扑管理命令的使用
# activate topology
yitian@heron01:~$ heron activate aurora/yitian/devel WordCountTopology
# deactivate topology
yitian@heron01:~$ heron deactivate aurora/yitian/devel WordCountTopology
# kill topology
yitian@heron01:~/.heron/conf/aurora$ heron kill aurora/yitian/devel WordCountTopology
参考资料
- 自己的独立Blog: [Heron] 使用Apache Aurora部署Heron集群