Spark是大数据集群的一种计算框架,其在大数据组件的位置以下。html
这里说明,Spark是对并行框架MapReduce的一种替换,而不是对整个hadoop的替换。
Spark采用master-slave架构模式,实现了多集群运行模式。其架构以下:node
与HDFS组件的NameNode,SecondaryNameNode,DataNode类似,运行Spark程序的集群节点也能够分为:shell
在相关节点的主机上使用命令jps能够查看到相关的进程。下面分别介绍各个部分含义。apache
Spark包含两类程序:缓存
从操做系统层面看,每一个程序都是不一样的进程,分别运行在不一样的节点上。服务器
驱动器程序包含应用的main函数,而且定义了集群上的分布式数据集,还对这些分布式数据集应用了相关操做。驱动器程序经过一个SparkContext对象来访问Spark,这个对象表明对计算集群的一个链接。架构
说明:启动Spark-Shell时已经自动建立了一个SparkContext对象,是一个叫sc的变量。因此看到别人使用的未手动实例化的sc变量也就不要见怪。
有了SparkContext(Spark上下文)后,就能够用来创新Spark核心类RDD。与此同时在群集模式下,驱动器程序还要管理多个执行器节点。所起驱动器程序两个主要的任务是:app
驱动器程序会将一些Spark应用的运行时的信息经过网页界面呈现出来,默认在端口4040上。好比在本地模式下访问http://localhost:4040就能够看到这个网页。框架
执行器程序主要有两个任务:分布式
集群管理器负责管理执行器的声明周期。系统当前支持四种集群管理器:
若是在集群中仅有Spark程序,那么可使用Spark独立的集群管理器。若是有其余的mapreduce程序,那么须要使用Yarn或者Mesos管理器。
本地集群管理仅有一个executor,调用方法:
# 使用一个线程 /usr/local/spark-2.1.1-bin-hadoop2.7/bin/pyspark --master local # 使用两个线程执行 /usr/local/spark-2.1.1-bin-hadoop2.7/bin/pyspark --master local[2] # 每一个cpu执行一个线程 /usr/local/spark-2.1.1-bin-hadoop2.7/bin/pyspark --master local[*]
启用独立的集群管理很简单,仅须要使用start-all脚本。
${Spark Dir}/sbin/start-all.sh
能够在http://masternode:8080看到集群管理器的网页用户界面,上面显示着全部的工做节点。当提交应用时能够配置执行器进程使用的内存量,以及全部执行器进程使用的CPU核心总数。默认状况下,集群管理器会选择合适的默认值自动为全部工做节点分配CPU核心与内存。
若是要使用独立的集群管理器仅须要在提交做业时指定提交的节点便可。
//提交应用 bin/spark-submit --master spark://masternode:7077 yourapp //启动spark-shell时指定master,全部运行程序都将提交到集群中。 bin/spark-shell --master spark://masternode:7077 //启动pyspark bin/pyspark --master spark://masternode:7077
独立集群管理器主要管理cpu和内存两大资源:
Yarn是hadoop自带的集群管理器,默认状况下不用手动启动。使用Yarn做为集群管理器仅须要在提交任务时指定master为yarn便可。
/usr/local/spark-2.1.1-bin-hadoop2.7/bin/spark-submit \ --master yarn \ --deploy-mode client \ --name "Example Program" \ --num-executors 40 \ --executor-memory 10g \ my_script.py
相比于独立的集群管理,Yarn能够管理三项资源:
Mesos须要单独下载,https://open.mesosphere.com/d...。下载完后。指定使用Mesos方法是指定master:
./bin/spark-shell --master mesos://host:5050
全部集群管理器均支持两种部署模式,在这两种模式中应用的驱动器程序运行在不一样的地方:
经过deploy-mode指定部署模式。
# 客户端模式,集群模式为cluster /usr/local/spark-2.1.1-bin-hadoop2.7/bin/spark-submit \ --master yarn \ --deploy-mode client \ my_script.py