详解 Spark 各种运行环境的搭建

一、Local 环境

本地模式,即不需要其他任何节点资源就可以在本地执行 Spark 代码的环境;区别于 IDEA 开发时的 local 环境

1. 搭建

  • Spark 下载地址:https://spark.apache.org/downloads.html

  • 下载 spark-3.0.0-bin-hadoop3.2.tgz 安装包并上传到虚拟机上的 /opt/software 目录

  • spark-3.0.0-bin-hadoop3.2.tgz 解压缩到 /opt/module 并修改名称

    tar -zxvf spark-3.0.0-bin-hadoop3.2.tgz -C /opt/module
    cd /opt/module
    mv spark-3.0.0-bin-hadoop3.2.tgz spark-local
    
  • 进入 spark-local 目录执行 bin/spark-shell 检查是否搭建成功

    cd /opt/module/spark-local
    bin/spark-shell
    
  • 查看 Web 监控页面:http://hadoop102:4040

2. 操作

  • 命令行工具:

    bin/spark-shell
    
    # 进入 scala 命令工具
    sc.textFile("data/word.txt").flatMap(_.split(" "))
      .map((_,1)).reduceByKey(_+_).collect().foreach(println)
    
  • 提交应用:

    bin/spark-submit \
    --class org.apache.spark.examples.SparkPi \
    --master local[2] \
    ./examples/jars/spark-examples_2.12-3.0.0.jar \
    10
    
    • bin/spark-submit 表示提交命令
    • --class 表示要执行程序的主类
    • --master local[2] 表示部署模式,默认为本地模式,数字表示分配的虚拟 CPU 核数量
    • spark-examples_2.12-3.0.0.jar 表示运行的应用类所在的 jar 包
    • 10 表示程序的入口参数,用于设定当前应用的任务数量

二、Standalone 环境

独立部署模式,只使用 Spark 自身节点运行的集群模式,分为 master 和 workers

1. 集群规划

Spark Hadoop102 Hadoop103 Hadoop104
master
worker

2. 搭建

  • 下载 spark-3.0.0-bin-hadoop3.2.tgz 安装包并上传到虚拟机上的 /opt/software 目录

  • spark-3.0.0-bin-hadoop3.2.tgz 解压缩到 /opt/module 并修改名称

    tar -zxvf spark-3.0.0-bin-hadoop3.2.tgz -C /opt/module
    cd /opt/module
    mv spark-3.0.0-bin-hadoop3.2.tgz spark-standalone
    
  • 修改配置文件

    # 1.进入 spark-standalone 的 conf 目录,将 slaves.template 文件更名为 slaves
    cd /opt/module/spark-standalone/conf
    mv slaves.template slaves
    
    # 2.在 slaves 文件中添加 worker 节点
    hadoop102
    hadoop103
    hadoop104
    
    # 3.将 spark-env.sh.template 文件更名为 spark-env.sh
    mv spark-env.sh.template spark-env.sh
    
    # 4.在 spark-env.sh 文件中添加 JAVA_HOME 环境变量和集群对应的 master 节点
    export JAVA_HOME=/opt/module/jdk1.8.0_212
    SPARK_MASTER_HOST=hadoop102
    SPARK_MASTER_PORT=7077 #注意:7077 端口,相当于 hadoop3 内部通信的 8020 端口,此处的端口需要确认自己的 Hadoop 配置
    
    # 5.分发 spark-standalone 目录到其他集群节点
    xsync spark-standalone
    
  • 启动集群

    # 在 hadoop102 的 spark-standalone 目录
    cd /opt/module/spark-standalone
    sbin/start-all.sh
    
    # 查看进程
    jps
    
  • 查看 Web 监控页面:http://hadoop102:8080

3. 测试

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop102:7077 \
./examples/jars/spark-examples_2.12-3.0.0.jar \
10
参数 说明 示例
–class Spark 程序中包含主函数的类
–master Spark 程序运行的模式(环境) local[*]、spark://hadoop102:7077、Yarn
–executor-memory 1G 指定每个 executor 可用内存为 1G 符合集群内存配置即可,具体情况具体分析
–total-executor-cores 2 指定所有 executor 使用的 cpu 核数为 2 个
–executor-cores 指定每个 executor 使用的 cpu 核数
application-jar 打包好的应用 jar,包含依赖。这个 URL 在集群中全局可见。 比如 hdfs://共享存储系统,如果是 file://path ,那么所有的节点的 path 都包含同样的 jar
application-arguments 传给 main()方法的参数

4. 配置历史服务

  • 修改并添加配置

    # 1.将 spark-defaults.conf.template 文件更名为 spark-defaults.conf
    cd /opt/module/spark-standalone/conf
    mv spark-defaults.conf.template spark-defaults.conf
    
    # 2.在 spark-default.conf 文件中配置日志存储路径
    spark.eventLog.enabled true
    spark.eventLog.dir hdfs://hadoop102:8020/directory # 注意:需要启动 hadoop 集群,HDFS 上的 directory 目录需要提前存在
    
    # 3.在 spark-env.sh 文件中添加日志配置
    export SPARK_HISTORY_OPTS="
    -Dspark.history.ui.port=18080 # WEB UI 访问的端口号为 18080
    -Dspark.history.fs.logDirectory=hdfs://hadoop102:8020/directory #历史服务器日志存储路径
    -Dspark.history.retainedApplications=30" 
    # 指定保存 Application 历史记录的个数,如果超过这个值,旧的应用程序信息将被删除,这个是内存中的应用数,而不是页面上显示的应用数
    
    # 4.分发配置文件(xsync 为自定义分发脚本,详见“Hadoop生产环境集群搭建”文章)
    xsync conf/
    
  • 启动 Hadoop 集群并创建日志存储目录

    cd /opt/module/hadoop-3.1.3
    sbin/start-dfs.sh
    hadoop fs -mkdir /directory
    
  • 启动 Spark 集群和历史服务

    cd /opt/module/spark-standalone
    sbin/start-all.sh
    sbin/start-history-server.sh
    
  • 提交应用执行

    bin/spark-submit \
    --class org.apache.spark.examples.SparkPi \
    --master spark://hadoop102:7077 \
    ./examples/jars/spark-examples_2.12-3.0.0.jar \
    10 
    
  • 查看历史服务:http://hadoop102:18080

5. 配置高可用

5.1 集群规划
规划 Hadoop102 Hadoop103 Hadoop104
master
worker
zookeeper
5.2 搭建
  • 修改 spark-env.sh 文件配置内容

    cd /opt/module/spark-standalone/conf
    vim spark-env.sh
    
    #1.注释如下内容:
    #SPARK_MASTER_HOST=hadoop102
    #SPARK_MASTER_PORT=7077
    
    #2.添加如下内容:
    #修改 Master 监控页面默认访问端口 8080 为 8989,避免和 Zookeeper 冲突
    SPARK_MASTER_WEBUI_PORT=8989
    
    #Zookeeper配置信息
    export SPARK_DAEMON_JAVA_OPTS="
    -Dspark.deploy.recoveryMode=ZOOKEEPER 
    -Dspark.deploy.zookeeper.url=hadoop102,hadoop103,hadoop104 
    -Dspark.deploy.zookeeper.dir=/spark"
    
  • 分发配置:xsync conf/

  • 启动 Zookeeper 集群

  • 启动 Spark 集群;在 hadoop103 上启动 master 服务

    #hadoop102
    cd /opt/module/spark-standalone
    sbin/start-all.sh
    
    #hadoop103
    cd /opt/module/spark-standalone
    sbin/start-master.sh
    
  • 分别查看 hadoop102 和 hadoop103 的 Web 页面:https:://hadoop102:8989https:://hadoop103:8989

  • 提交应用执行

    bin/spark-submit \
    --class org.apache.spark.examples.SparkPi \
    --master spark://hadoop102:7077,hadoop103:7077 \
    ./examples/jars/spark-examples_2.12-3.0.0.jar \
    10
    
  • 模拟 master 下线,保证高可用

    #停止 hadoop102 的 master 进程
    jps
    kill -9 [pid]
    
    #分别访问 web 页面查看状态:https:://hadoop102:8989 和 https:://hadoop103:8989
    

三、Yarn 模式

由于 Spark 主要是计算框架,而不是资源调度框架,所以本身提供的资源调度并不是它的强项,因此在生产上多集成 Yarn 使用

1. 搭建

  • 下载 spark-3.0.0-bin-hadoop3.2.tgz 安装包并上传到虚拟机上的 /opt/software 目录

  • spark-3.0.0-bin-hadoop3.2.tgz 解压缩到 /opt/module 并修改名称

    tar -zxvf spark-3.0.0-bin-hadoop3.2.tgz -C /opt/module
    cd /opt/module
    mv spark-3.0.0-bin-hadoop3.2.tgz spark-yarn
    
    
  • 修改 hadoop 安装目录下的 etc/hadoop/yarn-site.xml 配置文件并分发到集群其他节点

    <!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认
    是 true -->
    <property>
        <name>yarn.nodemanager.pmem-check-enabled</name>
        <value>false</value>
    </property>
    <!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认
    是 true -->
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>
    
  • 修改 Spark 配置文件

    cd /opt/module/spark-yarn/conf
    
    #1.将 spark-env.sh.template 文件更名为 spark-env.sh
    mv spark-env.sh.template spark-env.sh
    vim spark-env.sh
    
    #2.在 spark-env.sh 文件中添加 JAVA_HOME 和 YARN_CONF_DIR 配置
    export JAVA_HOME=/opt/module/jdk1.8.0_212
    YARN_CONF_DIR=/opt/module/hadoop/etc/hadoop
    
  • 启动 Hadoop 集群

2. 测试

  • 以集群方式提交应用:不会打印结果

    bin/spark-submit \
    --class org.apache.spark.examples.SparkPi \
    --master yarn \
    --deploy-mode cluster \
    ./examples/jars/spark-examples_2.12-3.0.0.jar \
    10
    
  • 以客户端方式提交应用:

    bin/spark-submit \
    --class org.apache.spark.examples.SparkPi \
    --master yarn \
    --deploy-mode client \
    ./examples/jars/spark-examples_2.12-3.0.0.jar \
    10
    

3. 配置历史服务

  • 修改 Spark 配置

    cd /opt/module/spark-yarn/conf
    
    #1.将 spark-defaults.conf.template 文件更名为 spark-defaults.conf
    mv spark-defaults.conf.template spark-defaults.conf
    vim spark-defaults.conf
    
    #2.在 spark-defaults.conf 文件中配置日志存储路径和 yarn 历史服务器信息
    spark.eventLog.enabled true
    spark.eventLog.dir hdfs://hadoop102:8020/directory #注意:需要启动 hadoop 集群,HDFS 上的目录需要提前存在
    spark.yarn.historyServer.address=hadoop102:18080
    spark.history.ui.port=18080
    
    #3.在 spark-env.sh 文件中添加日志配置
    export SPARK_HISTORY_OPTS="
    -Dspark.history.ui.port=18080 
    -Dspark.history.fs.logDirectory=hdfs://hadoop02:8020/directory 
    -Dspark.history.retainedApplications=30"
    
  • 启动历史服务:sbin/start-history-server.sh

  • 提交应用执行并查看历史服务:https://hadoop103:8088

四、其他模式简介

  • K8S&Mesos 模式:https://spark.apache.org/docs/latest/running-on-kubernetes.html

    • Mesos 是 Apache 下的开源分布式资源管理框架
    • Kubernetes(k8s)是目前最为流行的容器管理工具
  • Windows 模式:

    • spark-3.0.0-bin-hadoop3.2.tgz 解压缩到无中文无空格的路径中

    • 执行解压缩文件路径下 bin 目录中的 spark-shell.cmd 文件,启动 Spark 本地环境

    • 编写 Scala 程序执行或在 DOS 命令行窗口中执行提交指令

      spark-submit --class org.apache.spark.examples.SparkPi --master local[2] ../examples/jars/spark-examples_2.12-3.0.0.jar 10
      

六、各模式对比

模式 Spark安装机器数 需启动的进程 所属者 应用场景
Local 1 Spark 测试
Standalone 3 Master及Worker Spark 单独部署
Yarn 1 Yarn及HDFS Hadoop 混合部署

七、常用端口号说明

服务 端口
Spark 查看当前 Spark-shell 运行任务情况端口号(计算) 4040
Spark Master 内部通信服务 7077
Standalone 模式下,Spark Master Web 端口号(资源) 8080
Spark 历史服务器 18080
Hadoop YARN 任务运行情况查看 8088

相关推荐

  1. 详解 Spark 各种运行环境

    2024-06-06 01:22:03       23 阅读
  2. Hadoop运行环境

    2024-06-06 01:22:03       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-06 01:22:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-06 01:22:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-06 01:22:03       87 阅读
  4. Python语言-面向对象

    2024-06-06 01:22:03       96 阅读

热门阅读

  1. MyBatisPlus实现多表查询

    2024-06-06 01:22:03       23 阅读
  2. PostgreSQL LATERAL 的工作原理

    2024-06-06 01:22:03       31 阅读
  3. 【数据库系统概论】触发器

    2024-06-06 01:22:03       31 阅读
  4. 【机器学习】分值融合方法

    2024-06-06 01:22:03       28 阅读
  5. golang普通函数与闭包函数使用示例

    2024-06-06 01:22:03       30 阅读
  6. 【程序填空题】矩阵(运算符重载)

    2024-06-06 01:22:03       29 阅读