Title

spark-2.4.5的standalone的部署

1 spark的standalone的部署

Spark支持3种集群部署模式:Standalone、Yarn、Mesos;

  • Standalone模式
    • 独立模式,自带完整的服务,可单独部署到一个集群中,无需依赖任何其他资源 管理系统。从一定程度上说,该模式是其他两种的基础
    • Cluster Manager:Master
    • Worker Node:Worker
    • 仅支持粗粒度的资源分配方式
  • Spark On Yarn模式
    • Yarn拥有强大的社区支持,且逐步已经成为大数据集群资源管理系统的标准
    • 在国内生产环境中运用最广泛的部署模式
    • Spark on yarn 的支持两种模式:
      • yarn-cluster:适用于生产环境
      • yarn-client:适用于交互、调试,希望立即看到app的输出
    • Cluster Manager:ResourceManager
    • Worker Node:NodeManager
    • 仅支持粗粒度的资源分配方式
  • Spark On Mesos模式
    • 官方推荐的模式。
    • Spark开发之初就考虑到支持Mesos Spark运行在Mesos上会比运行在YARN上更加灵活,更加自然
    • Cluster Manager:Mesos Master
    • Worker Node:Mesos Slave
    • 支持粗粒度、细粒度的资源分配方式

粗粒度模式(Coarse-grained Mode):每个应用程序的运行环境由一个Dirver和 若干个Executor组成,其中,每个Executor占用若干资源,内部可运行多个Task。 应用程序的各个任务正式运行之前,需要将运行环境中的资源全部申请好,且运行过程中要一直占用这些资源,即使不用,最后程序运行结束后,回收这些资源。

细粒度模式(Fine-grained Mode):鉴于粗粒度模式会造成大量资源浪费,Spark On Mesos还提供了另外一种调度模式:细粒度模式,这种模式类似于现在的云计算,核心思想是按需分配。

1.1 下载Spark安装包

Spark官网,选择 spark-2.4.5-bin-without-hadoop-scala-2.12.tgz

备注:不用安装scala

1.1.1上传解压

[root@gcw1 src]# ll | grep spark
-rw-r--r-- 1 root root 145961599 Sep 22 22:50 spark-2.4.5-bin-without-hadoop-scala-2.12.tgz
[root@gcw1 src]# tar -zxf spark-2.4.5-bin-without-hadoop-scala-2.12.tgz -C  /opt/app/

1.1.2 设置软连接

[root@gcw1 src]# cd /opt/app/
[root@gcw1 app]# ln -s spark-2.4.5-bin-without-hadoop-scala-2.12 spark

1.1.3 设置环境变量,并使之生效

vi /etc/profile
export SPARK_HOME=/opt/app/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
source /etc/profile

1.2 修改配置

1.2.1 $SPARK_HOME/conf/slaves

[root@gcw1 app]# cd  $SPARK_HOME/conf 
[root@gcw1 conf]# ll
total 36
-rw-r--r-- 1 gcw1 gcw1  996 Feb  3  2020 docker.properties.template
-rw-r--r-- 1 gcw1 gcw1 1105 Feb  3  2020 fairscheduler.xml.template
-rw-r--r-- 1 gcw1 gcw1 2025 Feb  3  2020 log4j.properties.template
-rw-r--r-- 1 gcw1 gcw1 7801 Feb  3  2020 metrics.properties.template
-rw-r--r-- 1 gcw1 gcw1  865 Feb  3  2020 slaves.template
-rw-r--r-- 1 gcw1 gcw1 1292 Feb  3  2020 spark-defaults.conf.template
-rwxr-xr-x 1 gcw1 gcw1 4221 Feb  3  2020 spark-env.sh.template
[root@gcw1 conf]# cp slaves.template  slaves
[root@gcw1 conf]# vi slaves
[root@gcw1 conf]# 

1.2.2 $SPARK_HOME/conf/spark-defaults.conf

[root@gcw1 conf]# cp spark-defaults.conf.template  spark-defaults.conf
[root@gcw1 conf]# vi spark-defaults.conf


spark.master                     spark://gcw1:7077
spark.eventLog.enabled           true
spark.eventLog.dir               hdfs://gcw1:9000/spark-log
spark.serializer                 org.apache.spark.serializer.KryoSerializer
spark.driver.memory              512m
# spark.executor.extraJavaOptions  -XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"

创建 HDFS 目录

hdfs dfs -mkdir /spark-log

备注:

  • spark.master。定义master节点,缺省端口号 7077
  • spark.eventLog.enabled。开启eventLog
  • spark.eventLog.dir。eventLog的存放位置 spark.serializer。一个高效的序列化器
  • spark.driver.memory。定义driver内存的大小(缺省1G)

1.2.3 $SPARK_HOME/conf/spark-env.sh

export JAVA_HOME=/opt/app/jdk
export HADOOP_HOME=/opt/app/hadoop
export HADOOP_CONF_DIR=/opt/app/hadoop/etc/hadoop
export SPARK_DIST_CLASSPATH=$(/opt/app/hadoop/bin/hadoop classpath)
export SPARK_MASTER_HOST=gcw1
export SPARK_MASTER_PORT=7077

备注:这里使用的是 spark-2.4.5-bin-without-hadoop,所以要将 Hadoop 相关 jars 的位置告诉Spark

1.2.4 命令名称修改

解决spark的命令和hadoop的命令重名

[root@gcw1 sbin]# cd /opt/app/spark/sbin/
[root@gcw1 sbin]# mv ./start-all.sh  spark-start-all.sh
[root@gcw1 sbin]# mv ./stop-all.sh  spark-stop-all.sh
[root@gcw1 sbin]# mv ./start-history-server.sh  spark-start-history-server.sh
[root@gcw1 sbin]# mv stop-history-server.sh spark-stop-history-server.sh

1.2 将Spark软件分发到集群;修改其他节点上的环境变量

cd /opt/app
scp -r spark-2.4.5-bin-without-hadoop-scala-2.12 gcw2:`pwd`
scp -r spark-2.4.5-bin-without-hadoop-scala-2.12 gcw3:`pwd`

配置环境变量,创建软连接

[root@gcw2 app]# cd /opt/app/
[root@gcw2 app]# ln -s spark-2.4.5-bin-without-hadoop-scala-2.12 spark
[root@gcw3 ~]# cd /opt/app/
[root@gcw3 app]# ln -s spark-2.4.5-bin-without-hadoop-scala-2.12/ spark
vi /etc/profile
export SPARK_HOME=/opt/app/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
source /etc/profile

1.3 启动测试

[root@gcw1 spark]# spark-start-all.sh 
starting org.apache.spark.deploy.master.Master, logging to /opt/app/spark/logs/spark-root-org.apache.spark.deploy.master.Master-1-gcw1.out
gcw2: starting org.apache.spark.deploy.worker.Worker, logging to /opt/app/spark/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-gcw2.out
gcw1: starting org.apache.spark.deploy.worker.Worker, logging to /opt/app/spark/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-gcw1.out
gcw3: starting org.apache.spark.deploy.worker.Worker, logging to /opt/app/spark/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-gcw3.out
[root@gcw1 spark]# jps
1072 -- process information unavailable
2515 NodeManager
2296 DataNode
3224 Jps
2123 NameNode
3164 Worker
3039 Master
[root@gcw1 spark]# 

gcw2

[root@gcw2 sbin]# jps
1936 Worker
1718 NodeManager
1993 Jps
1596 DataNode

前端

http://gcw1:8080

2 运行模式

2.1 运行模式(cluster / client)

最大的区别:Driver运行在哪里;client是缺省的模式,能看见返回结果,适合调 试;cluster与此相反;

  • Client模式(缺省)。Driver运行在提交任务的Client,此时可以在Client模式 下,看见应用的返回结果,适合交互、调试
  • Cluster模式。Driver运行在Spark集群中,看不见程序的返回结果,合适生产环 境

2.2 测试client

spark-submit --class org.apache.spark.examples.SparkPi $SPARK_HOME/examples/jars/spark-examples_2.12-2.4.5.jar 1000

再次使用 jps 检查集群中的进程:

  • Master进程做为cluster manager,管理集群资源
  • Worker 管理节点资源
  • SparkSubmit 做为Client端,运行 Driver 程序。
  • Spark Application执行完成, 进程终止
  • CoarseGrainedExecutorBackend,运行在Worker上,用来并发执行应用程序

2.2 测试cluster

spark-submit --class org.apache.spark.examples.SparkPi --deploy-mode cluster $SPARK_HOME/examples/jars/spark-examples_2.12-2.4.5.jar 1000
  • SparkSubmit 进程会在应用程序提交给集群之后就退出

  • Master会在集群中选择一个 Worker 进程生成一个子进程

  • DriverWrapper 来启 动 Driver 程序 Worker节点上会启动

  • CoarseGrainedExecutorBackend DriverWrapper 进程会占用 Worker 进程的一个core(缺省分配1个core,1G内 存)

  • 应用程序的结果,会在执行 Driver 程序的节点的 stdout 中输出,而不是打印在 屏幕上

3 History Server配置

# spark-defaults.conf
# history server
spark.eventLog.enabled true
spark.eventLog.dir  hdfs://gcw1:9000/spark-log
spark.eventLog.compress true
# spark-env.sh
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=50 -Dspark.history.fs.logDirectory=hdfs://gcw1:9000/spark-log"

image-20210923001021184

posted @ 2021-09-23 00:14  apeGcWell  阅读(205)  评论(0编辑  收藏  举报