配置Spark standalone集群启动

来源:互联网 发布:avmoo最新域名2016 3 编辑:程序博客网 时间:2024/06/08 12:54

前言

想在本地提交spark程序,在网上找了一些文章。在本地提交的前提就是,spark以集群的方式启动。于是想以简单的standalone方式启动,但在启动的时候遇到了一些问题,下面把过程和问题总结一下。


正文

前提:

  • 已经下载到spark到机器上(master和slave),并且已经配置好了SPARK_HOME(使用版本:spark-2.1.0-bin-hadoop2.7.tgz)
  • 已经安装了java(使用版本:1.8.0_111)


启动方式1(不用做修改)

1,在Master机器上,运行$SPARK_HOME/sbin/start-master.sh,启动master。启动完后,就可以通过http://master-ip:8080网址来查看集群运行的运行状态。(这时候网址上面的“Workers”表里,还没有任何信息)


2,在Slave机器上启动Worker进程,连接到Master上。有两个方法,这两个方法都可以完成这个工作:

  • 运行$SPARK_HOME/bin/spark-class org.apache.spark.deploy.worker.Worker spark://master-ip:7077
  • 运行$SPARK_HOME/sbin/start-slave.sh spark://master-ip:7077

启动完后,刷上面的web页面,就可以在“Workers”里看到新启动的Worker。


3,进行测试。以集群的方式启动spark-shell:$SPARK_HOME/bin/spark-shell --master spark://master-ip:7077
--master spark://master-ip:7077中,

  • master是指定Shell连接到集群
  • spark://master-ip:7077是集群服务的地址,这个地址在http://master-ip:8080页面的最上面就可以看到)

当连接成功后,就可以在上面的web页面中看到在“Running Applications”里有类似下面的内容:

Application ID:app-20170312004859-0000 Name:Spark shell


还有一种测试方法,就是使用JPS命令,查看Master上的master进程是否启动,Slave上的worker进程是否已经启动。


启动方式2(需要修改)

1,把$SPARK_HOME/conf/spark-env.sh.template文件,拷贝一份命名为:spark-env.sh。然后编辑spark-env.sh文件,追加JAVA_HOME的设置,例如:

export JAVA_HOME=/usr/local/java/currentexport PATH=$PATH:$JAVA_HOME/bin

如果不进行这步的设置,在使用spark-all.sh进行启动master和slave的话,启动到slave时,就会出现JAVA_HOME is not set的错误提示。


2,把Master下的$SPARK_HOME/conf/slaves.template文件,拷贝一份命名为:slave。然后编辑slave文件,追加slave的机器,例如:

localhosthadoop-slave-1

localhost是原来文件自带的。如果有localhost,master机器上也会启动一个worker)


3,使用scp -R spakr_dir hadoop@slave:~命令,把配置好的spark拷贝到slave机器上,替换掉原来的spark目录。


4,在Master机器上,使用$SPARK_HOME/sbin/start-all.sh进行启动master和slave。


5,进行测试。测试方法和上面一样。


遇到的问题

在配置过程中,启动spark-shell进行测试时,发生了下面的错误:

ERROR cluster.SparkDeploySchedulerBackend: Application has been killed. Reason: Master removed our application: FAILED

问题原因:

spark目录下的work目录的所属用户和用户组都是root,不是我建立的hadoop用户。

如何查找问题:
  在网上找了找,有的说是因为/etc/hosts设置的问题,有的说是因为防火墙没有关的问题(可以参考集群外的client节点执行Spark shell,10多秒之后自动断开),试了试,不好用,看来不是这个问题。
  后来测试发现,只启动master,不启动slave的话,可以正常启动。后来使用第一种方法进行启动后,再进行测试的话,slave的错误信息被打印到屏幕上,这才知道了是slave出了问题。而看到错误信息后,也就知道了是work目录无法创建文件,然后就找到了问题的所在。
(slave机器的log位置:/usr/local/spark/logs/spark-hadoop-org.apache.spark.deploy.worker.Worker-1-hadoop-slave-1.out)


其它

有的教程上说要对spark-env.sh进行下面的配置,但其实不配置也可以。

export SPARK_MASTER_IP=hadoop1export SPARK_MASTER_PORT=7077export SPARK_WORKER_CORES=1export SPARK_WORDER_INSTANCES=1export SPARK_WORKER_MEMORY=3g

如果要Spark Standalone伪分布式,可以参考文章:【Spark】Spark的Standalone模式安装部署


参考:

-spark之路第二课——spark启动方式:启动方式1参考的文章。
-【Spark】Spark的Standalone模式安装部署:启动方式2参考的文章。但这上面没有写出我遇到的问题,可能是版本不一样吧。
-Spark的Standalone模式部署:除了介绍如何配置,还介绍了关于standalone的资源调度,监控和日志,和Hadoop并用,高可用等。
- Spark入门实战系列–2.Spark编译与部署(下)–Spark编译安装:这篇介绍的比较全比较详细,各方面经验都比较少的朋友可以看一下。

0 0
原创粉丝点击