spark 源码编译 standalone 模式部署

本文介绍如何编译 spark 的源码,而且用 standalone 的方式在单机上部署 spark。html

步骤以下:

1. 下载 spark 而且解压

本文选择 spark 的最新版本 2.2.0 (2017/07/01 发布)
下载源码和解压的命令以下:node

SPARK_VERSION=2.2.0 wget https://github.com/apache/spark/archive/v${SPARK_VERSION}.tar.gz -O spark-${SPARK_VERSION}.tar.gz tar -zvxf spark-${SPARK_VERSION}.tar.gz

2. 编译

编译大概须要半个小时左右时间,不一样的机器可能用的时间不一样。
执行如下命令编译python

cd spark-${SPARK_VERSION} build/mvn -DskipTests clean package

可参考 http://spark.apache.org/docs/latest/building-spark.htmlgit

3. 配置

若是都使用默认,能够略过这一步。若是要改配置,按照下面步骤。github

首先用下面的命令建立配置文件:apache

cp conf/spark-defaults.conf.template conf/spark-defaults.conf
cp conf/spark-env.sh.template conf/spark-env.sh cp conf/slaves.template conf/slaves

而后,修改 conf/spark-defaults.conf,主要有如下配置oop

spark.master                     spark://master:7077
spark.eventLog.enabled           true spark.eventLog.dir               hdfs://namenode:8021/directory
spark.serializer org.apache.spark.serializer.KryoSerializer spark.driver.memory 5g spark.executor.extraJavaOptions -XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"

而后,修改 conf/spark-env.sh,主要修改的有如下配置测试

HADOOP_CONF_DIR=/home/work/hadoop-2.6.0-cdh5.7.0/ SPARK_WORKER_CORES=10 SPARK_WORKER_MEMORY=40g SPARK_MASTER_HOST=192.168.1.112 SPARK_LOCAL_IP=192.168.1.112

而后,修改 conf/slaves, 添加 slave 的 hostname 或者 IP,若是只有一个 slave,conf/slaves 内容以下:ui

192.168.1.112

若是有多个 slave,每一个 slave 占一行,以下:url

192.168.1.112
192.168.1.113

3. standalone 模式部署

使用下面的命令部署 spark:

./sbin/start-all.sh

或者用下面的命令分步骤执行,效果是同样的:

./sbin/start-master.sh
./sbin/start-slave.sh spark://localhost:7077

执行上面的命令以后,spark 服务就在单机上起来了。能够用命令 ps aux | grep spark 查看,会有两个 spark 的进程。

4. 测试

用下面的命令能够提交一个任务给 spark 执行,测试部署是否成功。

./bin/spark-submit \ --master spark://localhost:7077 \ examples/src/main/python/pi.py

若是没有出现错误信息,表示部署和执行任务成功。这个例子是让 spark 计算圆周率,结果是打印出来。

5. 查看监控和统计信息

http://<hostname>:8080/

6. 关闭服务

下面的命令能够关闭 spark 服务

./sbin/stop-all.sh

7. 查看log

logs 在目录 ./logs/ 下

8. 注意事项

1. 若是机器有多个网口绑定多个 IP,配置文件的 IP 和 启动 spark 服务 IP,以及 spark-submit 中的 IP 必须保持一致。localhost 在有些机器要配置好。