您的位置:首页 > 其它

配置Spark standalone集群启动

2017-03-12 01:51 405 查看

前言

想在本地提交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/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编译安装:这篇介绍的比较全比较详细,各方面经验都比较少的朋友可以看一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spark