工作专题java学习spark

spark集群部署

2017-03-07  本文已影响1324人  ZPPenny

1. spark三种分布式部署模式

Spark支持的主要的三种分布式部署方式分别是standalone、spark on mesos和 spark on YARN。standalone模式,即独立模式,自带完整的服务,可单独部署到一个集群中,无需依赖任何其他资源管理系统。它是Spark实现的资源调度框架,其主要的节点有Client节点、Master节点和Worker节点。而yarn是统一的资源管理机制,在上面可以运行多套计算框架,如map reduce、storm等根据driver在集群中的位置不同,分为yarn client和yarn cluster。而mesos是一个更强大的分布式资源管理框架,它允许多种不同的框架部署在其上,包括yarn。

1.1 standalone框架

Standalone模式下,集群启动时包括Master与Worker,其中Master负责接收客户端提交的作业,管理Worker。根据作业提交的方式不同,分为driver on client 和drvier on worker。如下图7所示,上图为driver on work模式,下图为driver on client模式。两种模式的主要不同点在于driver所在的位置。


图7 standalone模式

由于standalone模式较简单,这里不再详述。

1.2 yarn集群模式

Apache yarn是apache Hadoop开源项目的一部分。设计之初是为了解决mapreduce计算框架资源管理的问题。到haodoop 2.0使用yarn将mapreduce的分布式计算和资源管理区分开来。它的引入使得Hadoop分布式计算系统进入了平台化时代,即各种计算框架可以运行在一个集群中,由资源管理系统YRAN进行统一的管理和调度,从而共享整个集群资源、提高资源利用率。
  YARN总体上也Master/slave架构——ResourceManager/NodeManager。前者(RM)负责对各个NodeManager(NM)上的资源进行统一管理和调度。而container是资源分配和调度的基本单位,其中封装了机器资源,如内存、CPU、磁盘和网络等,每个任务会被分配一个Container,该任务只能在该Container中执行,并使用该Container封装的资源。NodeManager的作用则是负责接收并启动应用的container、而向RM回报本节点上的应用Container运行状态和资源使用情况。ApplicationMaster与具体的Application相关,主要负责同ResourceManager协商以获取合适的Container,并跟踪这些Container的状态和监控其进度。如下图8所示为yarn集群的一般模型。


图8 yarn集群一般部署

  Spark在yarn集群上的部署方式分为两种,yarn client(driver运行在客户端)和yarn cluster(driver运行在master上),driver on master如下图9所示。


图9 yarn cluster部署图

1.3 mesos集群模式

Mesos是apache下的开源分布式资源管理框架。起源于加州大学伯克利分校,后被twitter推广使用。Mesos上可以部署多种分布式框架,Mesos的架构图如下图12所示,其中Framework是指外部的计算框架,如Hadoop,Mesos等,这些计算框架可通过注册的方式接入mesos,以便mesos进行统一管理和资源分配。


图12 mesos一般部署图

  在 Mesos 上运行的 framework 由两部分组成:一个是 scheduler ,通过注册到master 来获取集群资源。另一个是在 slave 节点上运行的executor进程,它可以执行 framework 的 task 。 Master 决定为每个framework 提供多少资源,framework 的 scheduler来选择其中提供的资源。当 framework同意了提供的资源,它通过master将 task发送到提供资源的slaves 上运行。Mesos的资源分配图如下图13。


图13 mesos资源分配图

1.4 spark 三种部署模式的区别

在这三种部署模式中,standalone作为spark自带的分布式部署模式,是最简单也是最基本的spark应用程序部署模式,这里就不再赘述。这里就讲一下yarn和mesos的区别:

2. spark在CDH上的部署过程

CDH的全称Cloudera’s Distribution Including Apache Hadoop,是cloudera公司的发行版。下面我们简要介绍下在CDH集群上部署spark的过程。

2.1 安装对应版本的scala

  1. 将下载好的scala.tar.gz解压到/usr/local/scala,可自己指定解压路径。
  2. 在/etc/profile中添加SCALA_HOME,并添加到PATH路径。
  3. 运行scala -version查看已安装的scala版本。

2.2 安装Spark

  1. 将spark的压缩包解压到自己的指定目录,如/opt/spark。
  2. 在/etc/profile中添加SPARK_HOME,并添加到PATH路径。
  3. 在/etc/profile中添加HDFS_HOME,并添加到PATH路径,利用cm自动安装的CDH机器,hadoop路径一般在/opt/cloudera/parcels/CDH/lib/hadoop。
  4. 在/etc/profile中添加HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop(指明hadoop的配置文件地址)。
  5. 将$HADOOP_HOME/etc/hadoop下的hdfs配置文件hdfs-site.xml拷贝一份到spark的conf目录下。由于spark要与HDFS协作,所以要告知hadoop的配置信息。
  6. 配置spark/conf下的slaves文件,将各节点的主机名添加进去,以告诉spark该集群有哪些节点。如:spark-master、spark-slave1、spark-slave2.
  7. 配置spark/conf下的spark-env.sh,在底部添加:

export JAVA_HOME=/usr/local/java/jdk1.8.0_65
export SCALA_HOME=/usr/local/scala/scala-2.11.7
export HADOOP_HOME=/opt/cloudera/parcels/CDH/lib/hadoop
HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
SPARK_MASTER_HOST=10.202.8.114
SPARK_DRIVER_MEMORY=1G

  1. 运行sbin/start-all.sh启动,如果能进入master:8088则搭建成功。
  2. spark-submit提交Pi程序到集群测试,提交脚本如下:

sudo -u hdfs /opt/spark/spark-2.0.0/bin/spark-submit
--class org.apache.spark.examples.SparkPi
--master yarn
--deploy-mode cluster
--executor-memory 512m
--num-executors 3
--driver-java-options "-XX:PermSize=512M -XX:MaxPermSize=1024m"
/opt/spark/spark-2.0.0/examples/jars/spark-examples_2.11-2.0.0.jar &

提交成功后,可以在CDH管理界面。进入yarn的“应用程序”查看运行信息。

上一篇 下一篇

猜你喜欢

热点阅读