一、Spark 集群安装运行
标签(空格分隔): Spark
1. 准备工作
主机名 | IP 地址 | 类型 |
---|---|---|
ubuntu1 | 192.168.1.106 | Master |
ubuntu2 | 192.168.1.110 | Slaves |
ubuntu3 | 192.168.1.197 | Slaves |
2. 安装 JDK
这步去官网下载 jdk 然后解压,配置下环境变量就行了。我的版本如下:
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
Spark 是由 Scala 编写的,这里下载的是已经编译过的版本,所以就不需要安装 Scala。
3. 安装 Spark
3.1 下载 Spark
直接去 Spark 官网 http://spark.apache.org/downloads.html 下载即可。
3.2 安装 Spark
解压即可,环境变量要不要配置随意
tar -zvxf spark-2.2.0-bin-hadoop2.7.tgz
shiwei@ubuntu1:~/soft$ ll spark-2.2.0-bin-hadoop2.7/
total 116
drwxr-xr-x 2 shiwei shiwei 4096 Jul 1 07:09 bin/
drwxr-xr-x 2 shiwei shiwei 4096 Nov 6 11:16 conf/ # 这里是一些配置文件和其模板
drwxr-xr-x 5 shiwei shiwei 4096 Jul 1 07:09 data/
drwxr-xr-x 4 shiwei shiwei 4096 Jul 1 07:09 examples/ #一些例子
drwxr-xr-x 2 shiwei shiwei 12288 Jul 1 07:09 jars/ # Spark 依赖的jar
-rw-r--r-- 1 shiwei shiwei 17881 Jul 1 07:09 LICENSE
drwxr-xr-x 2 shiwei shiwei 4096 Jul 1 07:09 licenses/
drwxrwxr-x 2 shiwei shiwei 4096 Nov 6 12:59 logs/ # 日志目录,运行后才会自动生成该目录
-rw-r--r-- 1 shiwei shiwei 24645 Jul 1 07:09 NOTICE
drwxr-xr-x 8 shiwei shiwei 4096 Jul 1 07:09 python/ # Spark 的 Python版本
drwxr-xr-x 3 shiwei shiwei 4096 Jul 1 07:09 R/ # Spark 的 R 版本
-rw-r--r-- 1 shiwei shiwei 3809 Jul 1 07:09 README.md
-rw-r--r-- 1 shiwei shiwei 128 Jul 1 07:09 RELEASE
drwxr-xr-x 2 shiwei shiwei 4096 Jul 1 07:09 sbin/ # Spark 一些常用的操作,如启动关闭
drwxr-xr-x 2 shiwei shiwei 4096 Jul 1 07:09 yarn/
3.3 配置 Spark
修改 conf 下两个配置文件即可让 Spark 集群跑起来。
cp spark-env.sh.template spark-env.sh
cp slaves.template slaves
分别从配置文件模板中复制出一份,Spark 启动的时候默认会运行 conf/spark-env.sh
和读取 conf/slaves
中的配置。
所以要在
conf/spark-env.sh
中增加一些配置,如下:
export JAVA_HOME=/home/shiwei/soft/jdk1.8.0_151
export SPARK_MASTER_IP=192.168.1.106 # master ip
export SPARK_MASTER_PORT=7077 # master port
conf/slaves
需要包含 slave 的机器 IP,例如下:
192.168.1.110
192.168.1.197
到这里就配置好了,可以将这个 spark 目录复制到所有 slave 上,这样就可以避免重复工作。
4. 启动 Spark 集群
sbin/
目录下包含了常用的命令脚本。
shiwei@ubuntu1:~/soft/spark-2.2.0-bin-hadoop2.7$ ll sbin/
total 100
drwxr-xr-x 2 shiwei shiwei 4096 Jul 1 07:09 ./
drwxr-xr-x 13 shiwei shiwei 4096 Nov 6 11:32 ../
-rwxr-xr-x 1 shiwei shiwei 2803 Jul 1 07:09 slaves.sh*
-rwxr-xr-x 1 shiwei shiwei 1429 Jul 1 07:09 spark-config.sh*
-rwxr-xr-x 1 shiwei shiwei 5688 Jul 1 07:09 spark-daemon.sh*
-rwxr-xr-x 1 shiwei shiwei 1262 Jul 1 07:09 spark-daemons.sh*
-rwxr-xr-x 1 shiwei shiwei 1190 Jul 1 07:09 start-all.sh* # 启动整个集群
-rwxr-xr-x 1 shiwei shiwei 1274 Jul 1 07:09 start-history-server.sh*
-rwxr-xr-x 1 shiwei shiwei 2050 Jul 1 07:09 start-master.sh* # 只启动 master
-rwxr-xr-x 1 shiwei shiwei 1877 Jul 1 07:09 start-mesos-dispatcher.sh*
-rwxr-xr-x 1 shiwei shiwei 1423 Jul 1 07:09 start-mesos-shuffle-service.sh*
-rwxr-xr-x 1 shiwei shiwei 1279 Jul 1 07:09 start-shuffle-service.sh*
-rwxr-xr-x 1 shiwei shiwei 3151 Jul 1 07:09 start-slave.sh*
-rwxr-xr-x 1 shiwei shiwei 1527 Jul 1 07:09 start-slaves.sh*
-rwxr-xr-x 1 shiwei shiwei 1857 Jul 1 07:09 start-thriftserver.sh*
-rwxr-xr-x 1 shiwei shiwei 1478 Jul 1 07:09 stop-all.sh* # 关闭整个集群
-rwxr-xr-x 1 shiwei shiwei 1056 Jul 1 07:09 stop-history-server.sh*
-rwxr-xr-x 1 shiwei shiwei 1080 Jul 1 07:09 stop-master.sh*
-rwxr-xr-x 1 shiwei shiwei 1227 Jul 1 07:09 stop-mesos-dispatcher.sh*
-rwxr-xr-x 1 shiwei shiwei 1084 Jul 1 07:09 stop-mesos-shuffle-service.sh*
-rwxr-xr-x 1 shiwei shiwei 1067 Jul 1 07:09 stop-shuffle-service.sh*
-rwxr-xr-x 1 shiwei shiwei 1557 Jul 1 07:09 stop-slave.sh*
-rwxr-xr-x 1 shiwei shiwei 1064 Jul 1 07:09 stop-slaves.sh*
-rwxr-xr-x 1 shiwei shiwei 1066 Jul 1 07:09 stop-thriftserver.sh*
在 master 上启动整个集群
shiwei@ubuntu1:~/soft/spark-2.2.0-bin-hadoop2.7/sbin$ ./start-all.sh
starting org.apache.spark.deploy.master.Master, logging to /home/shiwei/soft/spark-2.2.0-bin-hadoop2.7/logs/spark-shiwei-org.apache.spark.deploy.master.Master-1-ubuntu1.out
192.168.1.197: starting org.apache.spark.deploy.worker.Worker, logging to /home/shiwei/soft/spark-2.2.0-bin-hadoop2.7/logs/spark-shiwei-org.apache.spark.deploy.worker.Worker-1-ubuntu3.out
192.168.1.110: starting org.apache.spark.deploy.worker.Worker, logging to /home/shiwei/soft/spark-2.2.0-bin-hadoop2.7/logs/spark-shiwei-org.apache.spark.deploy.worker.Worker-1-ubuntu2.out
如无意外,这样就启动成功了。并且还告诉我们 在 slave 上日志的位置。
spark 提供了一个 web 管理界面(MasterUI),默认端口是 8080。 如下:
URL:Spark 集群中 Master 的 URL
REST URL:可以通过 restful 方法来提交任务
......
5. 启动 spark-shell
shiwei@ubuntu1:~/soft/spark-2.2.0-bin-hadoop2.7$ ./bin/spark-shell --master spark://ubuntu1:7077
只运行 spark-shell ,这样只能启动一个单机版的 spark-shell。并没有连接到集群上,在 MasterUI 上也不可见。必须要指定 master 的 URL,这样才可以保证 spark-shell 连上集群,并且在 MasterUI 中可见。例如:
通过和上面一个 MasterUI 比较可以看出,spark-shell 启动后,默认占用 slaves 的所有核,所有 slaves 的 1G 内存。
如启动的时候想自定义分配 CPU 和内存,在启动的时候加上两个配置参数即可。
--executor-memory 2g // 指定每个 worker 可用内存为 2G
--total-executor-cores 2 // 指定整个集群使用的 cup 核数为 2 个
6. WordCount
统计文本中单词出现个数的一个小例子。
首先进入 spark-shell 下
scala> val file = sc.textFile("file:///home/shiwei/soft/spark-2.2.0-bin-hadoop2.7/logs/logfile.log")
scala> file.flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect.foreach(println)
(8080,1)
(org.apache.spark.deploy.master.Master,1)
(org/apache/spark/log4j-defaults.properties,1)
(authentication,1)
(6066.,1)
(Registered,5)
(is,1)
(--webui-port,1)
(modify,4)
(app-20171106151757-0001,1)
(Got,2)
......
文件来源:本地或者 HDFS,分别对应 textFile("file://") 、textFile(")
7. 踩的坑
第一个坑是在 启动 Spark 集群 访问 MasterUI 这个地方。在 ubuntu1 中启动 spark 集群,未发现保存,然后访问 MasterUI,能访问,但是显示 Workers 为 0。然后查看 slave 上的启动日志发现报错,显示连接不上 master 。防火墙关闭了也不行,然后在 /etc/hosts
进行主机名与 IP 地址的映射配置。最后搞定!!!
第二个坑是在 spark-shell 中 textFile("file")的时候,提示找不到文件,但是文件是确实存在而且路径没有问题的。上网查了下,不仅在 Master 上这个路径要存在这个文件,在所有 slave 上同样的目录都要用这个文件。拷贝,解决!!!
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于