系统环境为Ubuntu 16.04.2 x86_64,已经配置好了Hadoop 2.7。配置Hadoop集群环境可以参考这里
约定将spark安装在/usr/spark
,之前安装的Hadoop在路径/usr/hadoop
,这里直接在已经配置好的三台hadoop上配置spark,依然将master节点做为master及worker,其他2个节点做为worker。
Spark官方下载地址:http://spark.apache.org/downloads.html
配置
下载并安装
1 | wget http://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-2.1.0/spark-2.1.0-bin-hadoop2.7.tgz |
配置
需要修改的文件在路径/usr/spark/conf
下,这里我们只需要简单修改spark-env.sh
和slaves
,更多参数可以参见官方文档。
spark-env.sh
将官方提供的模板复制一份
1 | cp spark-env.sh.template spark-env.sh |
添加如下内容:
1 | export HADOOP_CONF_DIR=/usr/hadoop/etc/hadoop |
slaves
将官方提供的模板复制一份
1 | mv slaves.template slaves |
添加如下内容:
1 | localhost |
如果环境变量配置的都没有问题的话,现在可以运行以下官方示例计算pi值(在路径/usr/spark
下执行):
1 | ./bin/run-example SparkPi 10 |
输出内容的最后面为:
1 | 17/03/11 00:28:31 INFO ui.SparkUI: Stopped Spark web UI at http://192.168.1.124:4040 |
往上翻就会看到Pi is roughly 3.1413151413151414
为了方便执行spark-shell,将spark的bin路径添加到PATH,修改.bashrc
添加如下内容:
1 | Spark |
将spark拷贝到其他节点:
1 | scp -r /usr/spark slave1:/usr/ |
同样将修改的.bashrc
拷贝到其他节点,这里spark的环境变量并非必须,只是为了方便执行spark目录下bin中的程序
启动spark集群
首先启动HDFS和yarn:
1 | /usr/hadoop/sbin/start-dfs.sh |
为了方便查看完成的历史任务,启动jobhistory:
1 | /usr/hadoop/sbin/mr-jobhistory-daemon.sh start historyserver |
启动spark,为了省事,一次性启动所有master和worker:
1 | usr/spark/sbin/start-all.sh |
现在查看master上的java进程信息:
1 | 1377 NameNode |
worker上的信息:
1 | 2577 Worker |
可以查看web UI:http://192.168.1.187:8080
如果显示的Alive Worker
数量为3以及内容和CPU核数都与实际相符,则表示spark已经配置并启动完成
该页面前面的REST URL即是在cluster模式提交spark任务所需要的地址
验证
YARN方式计算Pi
可以在任何节点上运行以下命令,注意--master
替换成你自己的
1 | /usr/spark/bin/spark-submit \ |
可以根据自己的配置调整参数,输出中会包含如下信息:
1 | client token: N/A |
由于是yarn模式运行,所以无法通过4040端口的页面查看信息,但可以打开提示的相应节点的URL查看到当前的任务执行情况,点击Executors
可以看到各work及RDD信息,如果显示的信息与实际相符,说明集群已经完全启动并正在工作
本例中YARN的网页地址是http://192.168.1.187:8099
注意Spark Master的WEB UI默认商品是8080,即本例中的网址http://192.168.1.187:8080/
当Spark运行于standalone cluster模式时可以通过4040端口的WEB UI查看详细信息,即本例中的http://192.168.1.187:4040,注意该页面只在有standalone任务运行时才能查看,例如使用spark-shell时
计算完成之后,输出中会有final status: SUCCEEDED
通过8099端口的网页,打开相应的任务ID,进入后从Logs里面点击stdout,会看到Pi is roughly 3.141758431417584
Standalone Cluster模式运行Spark
运行代码为:
1 | /usr/spark/bin/spark-submit \ |
通过master的4040端口查看
spark shell
这里使用python语言,所以需要用pyspark
首先将Spark根目录下面的README.md
上传到相应用户的HDFS目录下:
1 | hdfs dfs -put README.md /user/root |
进入spark shell:
1 | ./bin/pyspark |
如果刚才设置过spark环境变量,可以直接执行pyspark,输出如下:
1 | Python 2.7.12 (default, Nov 19 2016, 06:48:10) |
输出中的那个警告应该是没有安装HIVE或HBase引起的。
下面就是正常的python语言:
1 | "README.md") textFile = sc.textFile( |
如果这里都没有问题,说明Spark已经可以正常工作,剩下的就是学习Spark了
默认配置情况下spark从非master节点启动会有web ui相关的错误提示,直接从master节点关闭spark之后再重新启动即可
参考:
1.Spark官网:http://spark.apache.org/
2.Running Spark on YARN: http://spark.apache.org/docs/latest/running-on-yarn.html
3.Submitting Applications:http://spark.apache.org/docs/latest/submitting-applications.html
4.Quora-How do I set up Apache Spark with Yarn Cluster?