Run Spark on Mesos with Zookeeper

本文面向对Spark,Mesos和Zookeeper有一点了解的读者,介绍下Run Spark on Mesos with Zookeeper的方法和一些注意点。因为Spark和Mesos的相关文档里,关于结合Zookeeper之后应该怎么改写相应URL和参数这块讲得不太清楚。

版本信息

Zookeeper 3.4.5 stable

Spark 0.8

Mesos 0.13

没有Zookeeper的时候

Mesos master通过下面的方式启动自己并挂起来(Mesos-0.13里,起master的时候最好加上一个whitelist文件,指明slaves,否则会一直跳一个提示信息,要求说明whitelist)

nohup $MASOS_HOME/sbin/mesos-master --whitelist=file://{MESOS_HOME}/var/mesos/deploy/slaves &

Mesos Slave通过下面的方式连接Master,5050为默认端口

nohup $MESOS_HOME/sbin/mesos-slave --master=masterIP:5050 &

以上的Mesos启动方式是单Master的Mesos Cluster,会存在单点故障问题。

而Spark连接Mesos URL run 任务的时候传的参数是masterIP:5050,比如跑SparkPi:

./run-example org.apache.spark.examples.SparkPi masterIP:5050

Why Zookeeper

Zookeeper功能强大,部署简单,复杂系统使用zookeeper API来做自己想做的事情。mesos正是引入zookeeper来解决自己的单点故障问题。

Zookeeper将保证Mesos存在多个masters,且在masters中选取一个作为active的master,当其挂掉时,能选取另一个备用master让mesos的slaves连接到新的master,让mesos cluster继续提供服务。

Zookeeper部署

修改conf/zoo.cfg内容,添加zookeeper集群的各个serverip(zoo1,zoo2,zoo3),及zk集群之间的数据同步端口(2888)和master选举端口(3888),

server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888

在zoo1,zoo2,zoo3三台机器的dataDir里创建一个myid文件,里面的内容对应1(2, 3),来指明自己这台机器在上述配置中的server.X的X值

echo "1" > myid

然后分别在三台机器上启动zk,

$ZK_HOME/bin/zkServer.sh start

启动之后可以通过

$ZK_HOME/bin/zkServer.sh status

查看自己是master还是follower。

Zookeeper测试

$ZK_HOME/bin/zkCli.sh -server ip:port

Client端连接zk集群的port默认是2181(zoo.cfg里本来就有写),连接之后进入一个类文件系统的操作界面,可以输入一些命令进行测试:

ls /
可以看到有一个zookeeper路径,里面存放着一些配额信息,无法直接get查看到
create /node1 data1
创建新的znode和数据
get /node1
查看到/node1路径下的数据
delete /node1
删除节点及数据,如果节点下面还是节点的话则该节点无法删除

Zookeeper需要一定的JVM heap size,查看方法为

jmap -heap pid

加上Zookeeper之后

Mesos master的启动需要改为

nohup $MESOS_HOME/sbin/mesos-master --whitelist=file://{MESOS_HOME}var/mesos/deploy/slaves --zk=zk://zoo1:2181,zoo2:2181,zoo3:2181/mesos &

其中zoo1,zoo2,zoo3为zk机器的ip,后面的/mesos是mesos master在zk树里的znode,之后slave和spark这样的外部应用连接使用mesos的时候,必须也使用同一个zk下的路径,否则,会先创建一个你指定的路径,然后zk的Master Detector会负责检测该路径下有没有已经注册了的master。

此外,这时候可以起多个mesos master,会有一个master被select as master,其他master会waiting to be select to be master。且在kill掉当前活跃的master之后,mesos slave会detect到别的masterI(对其来说是一个新的master),然后把自己注册过去。

Mesos Slave的启动为

nohup $MESOS_HOME/sbin/mesos-slave --master=zk://zoo1:2181,zoo2:2181,zoo3:2181/mesos &

Run Spark on Mesos With ZK

$SPARK_HOME/run-example org.apache.spark.examples.SparkPi zk://zoo1:2181,zoo2:2181,zoo3:2181/mesos

也就是说,对于Slave和Spark来说,mesos master的ip:port都将由一个zk的URL+路径代替。具体,连接上zk,去查看/mesos下的内容的话会看到类似,

[zk: localhost:2181(CONNECTED) 0] ls /mesos
[0000000002, 0000000003]

这样的内容,每个子znode对应一个起来的mesos master,其中的2和3是因为之前我已经起过两个master,当时是0和1。如果再查看里面的内容,会看到

[zk: localhost:2181(CONNECTED) 2] get /mesos/0000000002
master@xx.xx.xx.xx:5050

这样一串字符串信息。

(全文完)

时间: 2024-11-08 18:52:17

Run Spark on Mesos with Zookeeper的相关文章

数据处理平台架构中的SMACK组合:Spark、Mesos、Akka、Cassandra以及Kafka

在今天的文章中,我们将着重探讨如何利用SMACK(即Spark.Mesos.Akka.Cassandra以及Kafka)堆栈构建可扩展数据处理平台.虽然这套堆栈仅由数个简单部分组成,但其能够实现大量不同系统设计.除了纯粹的批量或者流处理机制之外,我们亦可借此实现复杂的Lambda以及Kappa架构. 在本文开始阐述之前,让我们首先立足于已有生产项目经验从设计与示例入手进行说明. 综述 • Spark - 一套高速通用型引擎,用于实现分布式大规模数据处理任务. • Mesos - 集群资源管理系统

Spark on Mesos: 粗粒度与细粒度实现分析

背景 顺着昨天spark standalone实现那篇文章继续扯淡,看看Mesos Scheduler的两种实现的异同. 对我来说,回过头再仔细看Spark在这一层的实现,思路又清晰了许多. Mesos粗粒度 CoarseMesosSchedulerBackend,是mesos的粗粒度scheduler backend实现. 简单说一下mesos的Scheduler,提供的回调函数,及spark实现的逻辑: Mesos Scheduler接口 触发场景 spark实现逻辑 void regist

Spark on Mesos: 粗粒度与细粒度实现分析 (markdown排版)

背景 Mesos粗粒度 Mesos细粒度 背景 顺着昨天spark standalone实现那篇文章继续扯淡,看看Mesos Scheduler的两种实现的异同. 对我来说,回过头再仔细看Spark在这一层的实现,思路又清晰了许多. Mesos粗粒度 CoarseMesosSchedulerBackend,是mesos的粗粒度scheduler backend实现. 简单说一下mesos的Scheduler,提供的回调函数,及spark实现的逻辑: Mesos Scheduler接口 触发场景

《Spark 官方文档》在Mesos上运行Spark

在Mesos上运行Spark Spark可以在由Apache Mesos 管理的硬件集群中运行. 在Mesos集群中使用Spark的主要优势有: 可以在Spark以及其他框架(frameworks)之间动态划分资源. 可以同时部署多个Spark实例,且各个实例间的资源分配可以调整. 工作原理 在独立部署的Spark集群中,下图里的Cluster Manager代表Spark master.然而,在Mesos集群中,Mesos master将取代Spark master在下图中的地位. 如果一个S

Spark技术内幕:Master基于ZooKeeper的High Availability(HA)源码实现

     如果Spark的部署方式选择Standalone,一个采用Master/Slaves的典型架构,那么Master是有SPOF(单点故障,Single Point of Failure).Spark可以选用ZooKeeper来实现HA.      ZooKeeper提供了一个Leader Election机制,利用这个机制可以保证虽然集群存在多个Master但是只有一个是Active的,其他的都是Standby,当Active的Master出现故障时,另外的一个Standby Maste

《Spark Cookbook 中文版》一1.6 在集群上使用Mesos部署Spark

1.6 在集群上使用Mesos部署Spark Mesos正慢慢崛起为跨数据中心管理所有计算资源的数据中心管理系统.Mesos可以运行在任意一台Linux操作系统的机器上.Mesos与Linux内核有着相同的配置原则.让我们看看如何安装Mesos. 具体步骤 Mesosphere提供Mesos的二进制安装包.最新的Mesos分布式安装包可以通过Mesosphere库按照如下步骤安装. 1.在Ubuntu操作系统的可靠版本上执行Mesos. $ sudo apt-key adv --keyserve

Mesos+Zookeeper+Marathon+Docker分布式集群管理最佳实践

目录  Mesos简介 Zookeeper简介 Marathon简介 docker集群实践 Mesos集群部署   一.Mesos简介   Mesos是Apache下的开源分布式资源管理框架,它被称为分布式系统的内核.Mesos最初是由加州大学伯克利分校的AMPLab开发,后在Twitter得到广泛使用.   Mesos-Master:主要负责管理各个framework和slave,并将slave上的资源分配给各个framework. Mesos-Slave:负责管理本节点上的各个mesos-t

Hive on Spark安装配置详解

可进入我的博客查看原文. 简介 本文主要记录如何安装配置Hive on Spark,在执行以下步骤之前,请先确保已经安装Hadoop集群,Hive,MySQL,JDK,Scala,具体安装步骤不再赘述. 背景 Hive默认使用MapReduce作为执行引擎,即Hive on mr.实际上,Hive还可以使用Tez和Spark作为其执行引擎,分别为Hive on Tez和Hive on Spark.由于MapReduce中间计算均需要写入磁盘,而Spark是放在内存中,所以总体来讲Spark比Ma

Spark集群安装和使用

本文主要记录 CDH5 集群中 Spark 集群模式的安装过程配置过程并测试 Spark 的一些基本使用方法. 安装环境如下: 操作系统:CentOs 6.5 Hadoop 版本:cdh-5.4.0 Spark 版本:cdh5-1.3.0_5.4.0 关于 yum 源的配置以及 Hadoop 集群的安装,请参考 使用yum安装CDH Hadoop集群. 1. 安装 首先查看 Spark 相关的包有哪些: $ yum list |grep spark spark-core.noarch 1.3.0