Spark集群搭建

Spark分布式集群搭建

Spark版本选择

三大主要版本:

Spark-0.X
Spark-1.X(主要Spark-1.3和Spark-1.6)
Spark-2.X(最新Spark-2.4.6)

本次选择的版本:

spark-2.4.5-bin-hadoop2.7.tgz

Spark依赖环境

Spark-2.3需要依赖:Java 8+ 和 Python 2.7+/3.4+ 和 Scala 2.12 和 R 3.1+

Spark分布式集群

Spark也是一个主从架构的分布式计算引擎。主节点是Master,从节点是Worker。所以集群规划:

Server Master Worker
bigdata02
bigdata03
bigdata04

第一步:从官网下载对应版本的安装包

[bigdata@bigdata02 ~]$ wget
https://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-2.4.5/spark-2.4.5-binhadoop2.7.
tgz

第二步:上传安装包,然后解压缩安装到对应的目录

[bigdata@bigdata02 ~]$ tar -zxvf ~/soft/spark-2.4.5-bin-hadoop2.7.tgz -C /home/bigdata/apps/

第三步:修改配置文件spark-env.sh

[bigdata@bigdata02 ~]$ cd ~/apps/spark-2.4.5-bin-hadoop2.7/conf
[bigdata@bigdata02 ~]$ cp spark-env.sh.template spark-env.sh
[bigdata@bigdata02 ~]$ vi spark-env.sh

修改或添加如下内容:

export JAVA_HOME=/usr/local/java/jdk1.8.0_73
export SPARK_MASTER_HOST=bigdata02
export SPARK_MASTER_PORT=7077

第四步:修改配置文件slave

[bigdata@bigdata02 ~]$ cd ~/apps/spark-2.4.5-bin-hadoop2.7/conf
[bigdata@bigdata02 ~]$ cp slaves.template slaves
[bigdata@bigdata02 ~]$ vi slaves

添加如下内容:

bigdata02
bigdata03
bigdata04

第五步:分发安装到所有节点

[bigdata@bigdata02 ~]$ scp -r ~/apps/spark-2.4.5-bin-hadoop2.7/ bigdata03:~/apps/
[bigdata@bigdata02 ~]$ scp -r ~/apps/spark-2.4.5-bin-hadoop2.7/ bigdata04:~/apps/

第六步:配置环境变量

vi ~/.bashrc
export SPARK_HOME=/home/bigdata/apps/spark-2.4.5-bin-hadoop2.7
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
[bigdata@bigdata02 ~]$ scp -r ~/.bashrc bigdata03:~
[bigdata@bigdata02 ~]$ scp -r ~/.bashrc bigdata04:~
source ~/.bashrc

切记:所有节点都要配置。
第七步:启动spark集群
由于启动spark集群的命令是start-all.sh,而且刚好启动HDFS集群的命令也是start-all.sh,所以启动的时候注意区分。

$SPARK_HOME/sbin/start-all.sh

第八步:验证集群启动是否成功
通过守护进程检查:

jps

通过web界面检查:http://bigdata02:8080

image.png

第九步:运行测试例子程序

run-example SparkPi 10

最后结果是:


image.png

第十步:关闭spark集群

[bigdata@bigdata02 ~]$ $SPARK_HOME/sbin/stop-all.sh

Spark分布式高可用集群搭建

上面安装的普通分布式spark集群存在SPOF的问题,Hadoop在2.X版本开始,已经利用ZooKeeper解决了单点故障问题。同样的策略,Spark也利用ZooKeeper解决Spark集群的单点故障问题。

Server Master Worker
bigdata02
bigdata03
bigdata04

前提:由于spark集群的高可用依赖于zookeeper来实现,所以必须要准备一个可用的zookeeper集群!

我们可以安装一个全新的spark的高可用集群,但是也可以在原来的基础之上,安装高可用的集群!保证spark集群关机状态。
$SPARK_HOME/sbin/stop-all.sh

第一步:从官网下载对应版本的安装包

[bigdata@bigdata02 ~]$ wget https://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-2.4.5/spark-2.4.5-binhadoop2.7.tgz

第二步:上传安装包,然后解压缩安装到对应的目录

[bigdata@bigdata02 ~]$ tar -zxvf spark-2.4.5-bin-hadoop2.7.tgz -C /home/bigdata/apps/

第三步:修改配置文件spark-env.sh

[bigdata@bigdata02 ~]$ cd ~/apps/spark-2.4.5-bin-hadoop2.7/conf
[bigdata@bigdata02 conf]$ cp spark-env.sh.template spark-env.sh
[bigdata@bigdata02 conf]$ vi spark-env.sh

修改或添加如下内容:

export JAVA_HOME=/usr/local/java/jdk1.8.0_73
export SPARK_MASTER_PORT=7077
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=bigdata02,bigdata03,bigdata04 -Dspark.deploy.zookeeper.dir=/spark245"

参数解释:

-Dspark.deploy.recoveryMode=ZOOKEEPER
说明整个集群状态是通过zookeeper来维护的,整个集群状态的恢复也是通过zookeeper来维护的。就是说用zookeeper做了Spark的HA配置,Master(Active)挂掉的话,Master(standby)要想变成Master(Active)的话,Master(Standby)就要像zookeeper读取整个集群状态信息,然后进行恢复所有Worker和Driver的状态信息,和所有的Application状态信息
-Dspark.deploy.zookeeper.url=bigdata02,bigdata03,bigdata04
将所有配置了zookeeper,并且在这台机器上有可能做master(Active)的机器都配置进来(我用了3台,就配置了3台)
-Dspark.deploy.zookeeper.dir=/spark245
-Dspark.deploy.zookeeper.dir是保存spark的元数据,保存了spark的作业运行状态;
zookeeper会保存spark集群的所有的状态信息,包括所有的Workers信息,所有的Applactions信息,所有的Driver信息

第四步:修改配置文件slave

[bigdata@bigdata02 ~]$ cd ~/apps/spark-2.4.5-bin-hadoop2.7/conf
[bigdata@bigdata02 ~]$ mv slaves.template slaves
[bigdata@bigdata02 ~]$ vi slaves

添加如下内容:

bigdata02
bigdata03
bigdata04

第五步:把core-site.xml和hdfs-site.xml文件拷贝过来,放到$SPARK_HOME/conf目录下

[bigdata@bigdata02 ~]$ cd ~/apps/hadoop-2.7.7/etc/hadoop
[bigdata@bigdata02 hadoop]$ cp core-site.xml hdfs-site.xml ~/apps/spark-2.4.5-bin-hadoop2.7/conf

第六步:分发安装到所有节点

[bigdata@bigdata02 ~]$ scp -r ~/apps/spark-2.4.5-bin-hadoop2.7 bigdata03:~/apps/
[bigdata@bigdata02 ~]$ scp -r ~/apps/spark-2.4.5-bin-hadoop2.7 bigdata04:~/apps/

第七步:配置环境变量

vi ~/.bashrc
export SPARK_HOME=/home/bigdata/apps/spark-2.4.5-bin-hadoop2.7
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
source ~/.bashrc

切记:所有节点都要配置。
第八步:启动spark集群
由于spark高可用集群在安装过程中,并没有配置文件指定谁是master,所以其实在哪个节点执行
start-all.sh,当前节点就是其中之一的master

[bigdata@bigdata02 ~]$ $SPARK_HOME/sbin/start-all.sh

那么另外一个master节点,记住,可以通过命令去到对应的master节点,手动启动

[bigdata@bigdata04 ~]$ $SPARK_HOME/sbin/start-master.sh

第九步:验证集群启动是否成功
通过守护进程检查:

jps

通过web界面检查:http://bigdata02:8080 或者 http://bigdata04:8080

第十步:验证高可用

bigdata02 和 bigdata04 两个节点,正常情况下,必定有一个节点是 active 状态,一个是 standby 状态。
测试:kill 掉 active 的 master,看看 standby 的master 能否切换过来。如果可以,证明高可用生效。

配置Spark HistoryServer

第一步:编辑spark-defualts.conf

[bigdata@bigdata03 ~]$ cd /home/bigdata/apps/spark-2.4.5-bin-hadoop2.7/conf
[bigdata@bigdata03 ~]$ cp spark-defaults.conf.template spark-defaults.conf

添加如下内容:

spark.eventLog.enabled true
spark.eventLog.dir hdfs:///hadoop277ha/spark245_historylog

第二步:编辑spark-env.sh

[bigdata@bigdata03 ~]$ cd /home/bigdata/apps/spark-2.4.5-bin-hadoop2.7/conf
[bigdata@bigdata03 conf]$ vim spark-env.sh

追加下内容:

export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=30 -Dspark.history.fs.logDirectory=hdfs:///hadoop277ha/spark245_historylog"

参数解释:

spark.eventLog.dir=hdfs:///hadoop277ha/sparklog
Application在运行过程中所有的信息均记录在该属性指定的路径下
spark.history.ui.port=18080
调整WEBUI访问的端口号为18080
spark.history.retainedApplications=30
指定保存Application历史记录的个数,如果超过这个值,旧的应用程序信息将被删除,这个是内存中的应用数,而不是页面上显示的应用数spark.history.fs.logDirectory=hdfs:///hadoop277ha/spark245_historylog"
配置了该属性后,在start-history-server.sh 时就无需再显式的指定路径,Spark History Server页面只展示该指定路径下的信息

第三步:在启动HistoryServer服务之前 hdfs:///hadoop277ha/sparklog 目录要提前创建

[bigdata@bigdata03 ~]$ hadoop fs -mkdir -p hdfs:///hadoop277ha/spark245_historylog

第四步:启动spark historyserver

[bigdata@bigdata03 ~]$ $SPARK_HOME/sbin/start-history-server.sh

第五:访问Spark History WebUI:http://bigdata03:18080/

image.png

第六步:执行一个任务程序

$SPARK_HOME/bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://bigdata02:7077,bigdata04:7077 \
--executor-memory 512m \
--total-executor-cores 2 \
$SPARK_HOME/examples/jars/spark-examples_2.11-2.4.5.jar \
100
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354

推荐阅读更多精彩内容