Spark 独立部署模式

除了在 Mesos 或 YARN 集群上运行之外, Spark 还提供一个简单的独立部署的模块。你通过手动开始master和workers 来启动一个独立的集群。你也可以利用我们提供的脚本 .它也可以运行这些进程在单个机器上进行测试。

安装 Spark 独立集群

部署Spark最简单的方法就是运行./make-distribution.sh 脚本来创建一个2进制发行版.这个版本能部署在任意运行这java的机子上,不需要安装 Scala.

建议的步棸是先在一个节点部署并启动master,获得 master spark URL,在dist/这个目录下修改conf/spark-env.sh然后再部署到其他的节点上。

手动启动集群

通过如下命令启动单独模式的master服务:

./bin/start-master.sh

一旦启动,master就会输出spark://IP:PORT以提示连接 workers 的方式。也可以通过参数“master”给SparkContext来连接集群的作业.你可以在master的web管理界面上看到这样的地址,默认是http://localhost:8080.

同样,你可以启动一个或者多个worker,通过下面的语句使之和master建立连接:

./spark-class org.apache.spark.deploy.worker.Worker spark://IP:PORT

启动一个worker后,查看 master的 web管理界面 (默认http://localhost:8080),上面列出了新近加入的节点的CPU和内存的信息。(不包括给操作系统预留的内存空间)。

最后,以下 master 和 worker的一些配置选项:

参数 含义
-i IP,--ip IP 要监听的IP地址或者 DNS 机器名
-p PORT,--port PORT 要监听的端口 (默认: master 7077 ;worker随机)
--webui-port PORT web UI端口 (默认: master 8080, worker 8081)
-c CORES,--cores CORES

作业可用的CPU内核数量(默认: 所有可用);只在worker上

-m MEM,--memory MEM 作业可使用的内存容量,默认格式1000M或者 2G (默认:  所有RAM去掉给操作系统用的1 GB); 只在worker上。
-d DIR,--work-dir DIR

伸缩空间和日志输入的目录路径

(默认: SPARK_HOME/work); 只在worker上

集群启动脚本

通过脚本启动 Spark独立集群时, 需要在Spark 目录下创建一个文件 conf/slaves, 列出所有启动的的Spark workers的主机名,每行一条记录. Master必须能够实现通过ssh(使用私钥)访问worker机器,可以使用ssh localhost来测试。

一旦你建立了这个档案,你可以通过以下脚本停止或启动集群, 这些脚本基于 Hadoop’s 部署脚本, 在SPARK_HOME/bin目录:

  • bin/start-master.sh-在机器上执行脚本,启动 master .
  • bin/start-slaves.sh- 启动conf/slaves中指定的每一个slave .
  • bin/start-all.sh- 同时启动master 以及 上面所说文件中指定的slave
  • bin/stop-master.sh- 停止通过bin/start-master.sh脚本启动的master
  • bin/stop-slaves.sh- 停止通过bin/start-slaves.sh启动的slave .
  • bin/stop-all.sh- 停止上述的两种启动脚本启动的master和slave

注意:只能在运行Spark的master主机上执行上述脚本,而不是你的本地机器。

你可以通过conf/spark-env.sh进一步配置整个集群的环境变量。这个文件可以用conf/spark-env.sh.template当模版复制生成。然后,复制到所有的worker机器上才奏效。下面给出一些可选的参数以及含义:

Environment Variable Meaning
SPARK_MASTER_IP 绑定一个外部IP给master.
SPARK_MASTER_PORT 从另外一个端口启动master(默认: 7077)
SPARK_MASTER_WEBUI_PORT Master的web UI端口 (默认: 8080)
SPARK_WORKER_PORT 启动Spark worker 的专用端口(默认:随机)
SPARK_WORKER_DIR 伸缩空间和日志输入的目录路径(默认: SPARK_HOME/work);
SPARK_WORKER_CORES 作业可用的CPU内核数量(默认: 所有可用的);
SPARK_WORKER_MEMORY 作业可使用的内存容量,默认格式1000M或者 2G (默认:  所有RAM去掉给操作系统用的1 GB);注意:每个作业自己的内存空间由SPARK_MEM决定。
SPARK_WORKER_WEBUI_PORT worker 的web UI 启动端口(默认: 8081)
SPARK_WORKER_INSTANCES 没太机器上运行worker数量 (默认: 1). 当你有一个非常强大的计算机的时候和需要多个Spark worker进程的时候你可以修改这个默认值大于1 . 如果你设置了这个值。要确保SPARK_WORKER_CORE 明确限制每一个r worker的核心数, 否则每个worker 将尝试使用所有的核心
SPARK_DAEMON_MEMORY 分配给Spark master和 worker 守护进程的内存空间 (默认: 512m)
SPARK_DAEMON_JAVA_OPTS Spark master 和 worker守护进程的JVM 选项(默认: none)

注意: 启动脚本目前不支持Windows。要运行一个Spark 集群在Windows上,手动启动master 和 workers 

集群连接应用程序

在Spark 集群上运行一个应用,只需通过master的 spark://IP:PORT 链接传递到SparkContext构造器

在集群上运行交互式的Spark 命令, 运行如下命令:

MASTER=spark://IP:PORT ./spark-shell

注意,如果你在一个 spark集群上运行了spark-shell脚本,spark-shell 将通过在conf/spark-env.sh下的SPARK_MASTER_IP和SPARK_MASTER_PORT自动设置MASTER .

你也可以传递一个参数-c <numCores> 来控制 spark-shell 在集群上使用的核心数量

资源调度

单独部署模式目前只支持FIFO作业调度策略。不过,为了允许多并发执行,你可以控制每一个应用可获得资源的最大值。默认情况下,如果系统中只运行一个应用,它就会获得所有资源。使用类似System.setProperty("spark.cores.max","10")的语句可以获得内核的数量。这个数值在初始化SparkContext之前必须设置好。

监控和日志

Spark单独部署模式提供了一个基于WEB的集群监视器。master和每一个worker都会有一个WEB UI来显示集群的统计信息。默认情况下,可以通过8080端口访问master的WEB UI。当然也可以通过配置文件或者命令来修改这个端口值。

另外,每个slave节点上作业运行的日志也会详细的记录到默认的SPARK_HOME/work目录下。每个作业会对应两个文件,stdout和stderr,包含了控制台上的所有的历史输出。

和Hadoop同时运行

Spark 作为一个独立的服务,可以和现有的Hadoop集群同时运行。 通过hdfs:// URL,Spark可以访问hadoop集群的HDFS上的数据。(比如地址可以写成hdfs://<namenode>:9000/path,从Namenode的web UI可以获得更确切的URL).或者,专门为Spark搭建一个集群,通过网络访问其他HDFS上的数据,这样肯定不如访问本地数据速度快,除非是都在同一个局域网内。(比如几台Spark机器和Hadoop集群在同一机架上)。

 

 

 

http://blog.csdn.net/zajin/article/details/12781097

猜你喜欢

转载自m635674608.iteye.com/blog/2249519