Spark集群搭建
安装环境监测
搭建之前确认对应的java版本为8版本
搭建之前确认对应的 scala 版本为2.12.x版本
[root@node01 ~]# rpm -ivh scala-2.12.11.rpm
[root@node01 ~]# whereis scala
[root@node01 ~]# vim /etc/profile
export SCALA_HOME=/usr/share/scala
export PATH=$SCALA_HOME/bin:$PATH
[root@node01 ~]# source /etc/profile
- 三台计算机Node01 Node02 Node03都需要安装Scala
standalone(Single)
[root@node01 ~]# tar -zxvf spark-2.4.6-bin-without-hadoop-scala-2.12.tgz
[root@node01 ~]# rm -rf spark-2.4.6-bin-without-hadoop-scala-2.12.tgz
[root@node01 ~]# mv spark-2.4.6-bin-without-hadoop-scala-2.12 spark-2.4.6
[root@node01 ~]# tar -zxvf spark-2.4.6-bin-without-hadoop-scala-2.12.tgz
[root@node01 ~]# rm -rf spark-2.4.6-bin-without-hadoop-scala-2.12.tgz
[root@node01 ~]# mv spark-2.4.6-bin-without-hadoop-scala-2.12 spark-2.4.6
[root@node01 conf]# mv slaves.template slaves
[root@node01 conf]# vim slaves
node01
node02
node03
-
修改Spark环境
- JAVA_HOME : 配置 java_home 路径
SPARK_MASTER_HOST : master 节点的 ip SPARK_MASTER_PORT : 提交任务的端口,默认是 7077 SPARK_WORKER_CORES :每个 worker 从节点能够支配的 core 核的个数 SPARK_WORKER_MEMORY :每个 worker 从节点能够支配的内存数
[root@node01 conf]# mv spark-env.sh.template spark-env.sh
[root@node01 conf]# vim spark-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_231-amd64
export SPARK_MASTER_HOST=node01
export SPARK_MASTER_PORT=7077
export SPARK_WORKER_CORES=2
export SPARK_WORKER_MEMORY=2g
export HADOOP_HOME=/opt/yjx/hadoop-3.1.2
export HADOOP_CONF_DIR=/opt/yjx/hadoop-3.1.2/etc/hadoop
export SPARK_DIST_CLASSPATH=$(/opt/yjx/hadoop-3.1.2/bin/hadoopclasspath)
[root@node01 ~]# scp -r /opt/yjx/spark-2.4.6 root@node02:/opt/yjx/
[root@node01 ~]# scp -r /opt/yjx/spark-2.4.6 root@node03:/opt/yjx/
[root@node01 ~]# vim /etc/profile
export SPARK_HOME=/opt/yjx/spark-2.4.6
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
[root@node01 ~]# scp /etc/profile root@node02:/etc/profile
[root@node01 ~]# scp /etc/profile root@node03:/etc/profile
【123】source /etc/profile
[root@node01 ~]# cd /opt/yjx/spark-2.4.6/sbin/
[root@node01 sbin]# ./start-all.sh
- 访问 http://192.168.88.101:8080/
spark-submit --master spark://node01:7077 --class org.apache.spark.examples.SparkPi $SPARK_HOME/examples/jars/sparkexamples_2.12-2.4.6.jar 10
standalone(HA)
高可用原理
- Standalone集群只有一个Master,如果Master挂了就无法提交应用程序,需要给Master进行高可 用配置
- Master的高可用可以使用fileSystem(文件系统)和zookeeper(分布式协调服务)
- fileSystem只有存储功能,可以存储Master的元数据信息,用fileSystem搭建的Master高可 用,在Master失败时,需要我们手动启动另外的备用Master,这种方式不推荐使用。
- zookeeper有选举和存储功能,可以存储Master的元数据信息,使用zookeeper搭建的 Master高可用,当Master挂掉时,备用的Master会自动切换,推荐使用这种方式搭建 Master的HA。
.环境搭建
HA环境基于Single环境
- 在 Spark Master 节点上配置spark-env.sh
[root@node01 ~]# cd /opt/yjx/spark-2.4.6/conf/
[root@node01 conf]# cp spark-env.sh.template spark-env.sh
[root@node01 conf]# vim spark-env.sh
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPERD spark.deploy.zookeeper.url=node03:2181,node02:2181,node01:2181 -
Dspark.deploy.zookeeper.dir=/sparkmasterHA"
[root@node01 conf]# scp spark-env.sh root@node02:/opt/yjx/spark-2.4.6/conf/
[root@node01 conf]# scp spark-env.sh root@node03:/opt/yjx/spark-2.4.6/conf/
- 在 Spark standby Master 节点上配置spark-env.sh
[root@node02 ~]# vim /opt/yjx/spark-2.4.6/conf/spark-env.sh
## 修改 node01-->node02
export SPARK_MASTER_HOST=node02
Zookeeper :
【123】zkServer.sh start
主节点:
[root@node01 ~]# cd /opt/yjx/spark-2.4.6/sbin/
[root@node01 sbin]# ./start-all.sh
备用节点
[root@node02 ~]# cd /opt/yjx/spark-2.4.6/sbin/
[root@node02 sbin]# ./start-master.sh
- 提交 SparkPi 程序, kill 主 Master 观察现象。
spark-submit --master spark://node01:7077,node02:7077 --class
org.apache.spark.examples.SparkPi ../examples/jars/spark-examples_2.12-2.4.6.jar 10 10000
-
注意点
- 主备切换过程中不能提交 Application 。
- 主备切换过程中不影响已经在集群中运行的 Application 。因为 Spark 是粗粒度资源调度。
standalone(UI)
UI环境基于Single或者HA环境
[root@node01 ~]# cd /opt/yjx/spark-2.4.6/conf/
[root@node01 conf]# cp spark-defaults.conf.template spark-defaults.conf
[root@node01 conf]# vim spark-defaults.conf
#开启记录事件日志的功能
spark.eventLog.enabled true
#设置事件日志存储的目录--注意点:配置的hdfs路径要存在。
spark.eventLog.dir hdfs://hdfs-yjx/spark-logs/
spark.history.fs.logDirectory hdfs://hdfs-yjx/spark-logs
#日志优化选项,压缩日志
spark.eventLog.compress true
启动Hadoop集群
[root@node01 ~]# start-all.sh
[root@node01 ~]# hdfs dfs -mkdir -p /spark-logs
启动日志服务
[root@node01 sbin]# ./start-history-server.sh
spark-submit \
--master spark://node01:7077 \
--class org.apache.spark.examples.SparkPi \
$SPARK_HOME/examples/jars/spark-examples_2.12-2.4.6.jar 10
查看服务 http://192.168.88.101:18080/
SparkShell
-
概念: SparkShell 是 Spark 自带的一个快速原型开发工具,也可以说是 Spark 的 scala -
REPL(Read-Eval-Print-Loop) ,即交互式 shell 。支持使用 scala 语言来进行 Spark 的交互 式编程。 -
使用:
- 启动 Standalone 集群, ./start-all.sh
- 在客户端上启动 spark-shell : spark-shell --master spark://node1:7077
-
启动 hdfs ,创建目录 spark/test ,上传文件 wc.txt
- 第一步:全面启动hadoop集群start-all.sh
- 第二步:hdfs命令创建目录hdfs dfs -mkdir -p /spark/test
- 第三步:上传文件至指定目录wc.txt hdfs dfs -put /wc.txt /spark/test/wc.txt
-
运行 wordcount
sc.textFile("hdfs://node1:9000/spark/test/wc.txt").flatMap(.split(" ")).map((,1)).reduceByKey(+).foreach(println)
yarn模式
##前面的配置文件中已经设置过了
export HADOOP_HOME=/opt/yjx/hadoop-3.1.2
export HADOOP_CONF_DIR=/opt/yjx/hadoop-3.1.2/etc/hadoop
```apl
启动Zookeeper:
【123】zkServer.sh start
启动Hadoop :
[root@node01 ~]# start-all.sh
启动Spark:
[root@node01 ~]# cd /opt/yjx/spark-2.4.6/sbin/
[root@node01 sbin]# ./start-all.sh
spark-submit --master yarn --class org.apache.spark.examples.SparkPi
$SPARK_HOME/examples/jars/spark-examples_2.12-2.4.6.jar 10
|