本次部署使用的是Spark编译版:spark1.1.1-bin-hadoop1. 如果是源码,则需要先自己编译。该包的sbin目录下有很多.sh的脚本,用以实现部署。然而,这些.sh文本无法再windows下运行,这也是我后续转战linux的原因。
首先介绍部署的前提环境:
操作系统: ubuntu 14.04
部署环境: 1) Java 1.7
2) Maven 3.2.3
3) spark1.1.1-bin-hadoop1
按照上篇博文单机Java应用程序开发中介绍的过程,在linux下重新创建了maven项目,并且打包成jar。值得一提的是,虽然到目前spark1.1.1版本已经发布,但是如果在maven项目的pom.xml中添加spark1.1.1版本以来,使用mvn compile编译出错,原因好像是在网上获取不到spark1.1.1对应的core。出现这个问题时,将依赖的version改为1.1.0版本即可解决。
接下来,按照官方指南中的步骤进行安装单机集群。接下来记录我部署成功的过程。
- 第一步:配置spark-env.sh
将conf目录下的spark-env.sh.template复制成spark-env.sh.进入该文件,你可以找到单机部署的一些参数选项说明:
# Options for the daemons used in the standalone deploy mode:
# - SPARK_MASTER_IP, to bind the master to a different IP address or hostname
# - SPARK_MASTER_PORT / SPARK_MASTER_WEBUI_PORT, to use non-default ports for the master
# - SPARK_MASTER_OPTS, to set config properties only for the master (e.g. "-Dx=y")
# - SPARK_WORKER_CORES, to set the number of cores to use on this machine
# - SPARK_WORKER_MEMORY, to set how much total memory workers have to give executors (e.g. 1000m, 2g)
# - SPARK_WORKER_PORT / SPARK_WORKER_WEBUI_PORT, to use non-default ports for the worker
# - SPARK_WORKER_INSTANCES, to set the number of worker processes per node
# - SPARK_WORKER_DIR, to set the working directory of worker processes
# - SPARK_WORKER_OPTS, to set config properties only for the worker (e.g. "-Dx=y")
# - SPARK_HISTORY_OPTS, to set config properties only for the history server (e.g. "-Dx=y")
在这里,我主要添加了master的ip和port设置:
export SPARK_MASTER_IP=192.168.17.128
export SPARK_MASTER_PORT=7077
export MASTER=spark://${SPARK_MASTER_IP}:{SPARK_MASTER_PORT}
export SPARK_WORKER_CORES=1
export SPARK_LOCAL_IP=192.168.17.128
- 第二步:手动启动集群
执行./sbin/start-master.sh,将启动master.然而,不像网站中所说,启动成功后返回master url,而只是显示下图中的内容
master默认的端口为7077,在第一步配置中,我并未修改端口号,只是修改了ip。为了查询master的ip,可以在shell中输入netstat -nat,找到端口为7077的ip。
上图红色圈出的url,就是刚刚启动的master url。
master启动成功后,接下来就是使用命令:./bin/spark-class org.apache.spark.deploy.worker.Worker spark://IP:PORT(此处为master url)启动worker。该命令执行后,光标将一直停留在Spark assembly has been built with Hive, including Datanucleus jars on classpath。
打开另一个terminal,将打包好的jar(包括程序和依赖)提交到master:
./bin/spark-submit --class xx --master spark://192.168.17.128:7077 xxx.jars(绝对路径),如果未添加master url,默认将以local的方式执行。
我所提交的程序实现的功能是计算README.md文件Spark和Apache两个字符串在文本中出现的行数,执行上述命令后,在当前shell将显示程序的运行结果:
当然,伴随着结果的输出,也出现了3个WARN。前两个WARN在其他情况下也会出现,最后一个WARN的出现,应该标志着配置出了一点问题,但是这没有影响程序的运行。
转而查看另一个启动master和worker的shell,发现有ERROR输出:
在浏览器中输入:localhost://8080 和localhost://8081,可以分别查看到master和worker的web ui。
在master web ui中,可以看到worker和它的CPU和内存情况,以及部署的应用程序的相关信息。