一、Spark 集群安装运行

本贴最后更新于 2419 天前,其中的信息可能已经时移世异

一、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。 如下:
QQ 截图 20171106150640.png-126.2kB

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 中可见。例如:
QQ 截图 20171106152520.png-123kB

通过和上面一个 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 上同样的目录都要用这个文件。拷贝,解决!!!

  • Simon
    20 引用 • 10 回帖
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 567 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...