赞
踩
想在本地提交spark程序,在网上找了一些文章。在本地提交的前提就是,spark以集群的方式启动。于是想以简单的standalone方式启动,但在启动的时候遇到了一些问题,下面把过程和问题总结一下。
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
进程是否已经启动。
1,把$SPARK_HOME/conf/spark-env.sh.template
文件,拷贝一份命名为:spark-env.sh
。然后编辑spark-env.sh
文件,追加JAVA_HOME
的设置,例如:
export JAVA_HOME=/usr/local/java/current
export 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的机器,例如:
localhost
hadoop-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=hadoop1
export SPARK_MASTER_PORT=7077
export SPARK_WORKER_CORES=1
export SPARK_WORDER_INSTANCES=1
export SPARK_WORKER_MEMORY=3g
如果要Spark Standalone伪分布式,可以参考文章:【Spark】Spark的Standalone模式安装部署
参考:
-spark之路第二课——spark启动方式:启动方式1参考的文章。
-【Spark】Spark的Standalone模式安装部署:启动方式2参考的文章。但这上面没有写出我遇到的问题,可能是版本不一样吧。
-Spark的Standalone模式部署:除了介绍如何配置,还介绍了关于standalone的资源调度,监控和日志,和Hadoop并用,高可用等。
- Spark入门实战系列–2.Spark编译与部署(下)–Spark编译安装:这篇介绍的比较全比较详细,各方面经验都比较少的朋友可以看一下。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。