详解 Spark 各种运行情况的搭建

锦通  金牌会员 | 2024-9-27 15:07:49 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 912|帖子 912|积分 2736

一、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 并修改名称
    1. tar -zxvf spark-3.0.0-bin-hadoop3.2.tgz -C /opt/module
    2. cd /opt/module
    3. mv spark-3.0.0-bin-hadoop3.2.tgz spark-local
    复制代码
  • 进入 spark-local 目录实行 bin/spark-shell 检查是否搭建成功
    1. cd /opt/module/spark-local
    2. bin/spark-shell
    复制代码
  • 检察 Web 监控页面:http://hadoop102:4040
2. 操作



  • 命令行工具:
    1. bin/spark-shell
    2. # 进入 scala 命令工具
    3. sc.textFile("data/word.txt").flatMap(_.split(" "))
    4.   .map((_,1)).reduceByKey(_+_).collect().foreach(println)
    复制代码
  • 提交应用:
    1. bin/spark-submit \
    2. --class org.apache.spark.examples.SparkPi \
    3. --master local[2] \
    4. ./examples/jars/spark-examples_2.12-3.0.0.jar \
    5. 10
    复制代码

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

二、Standalone 情况

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

SparkHadoop102Hadoop103Hadoop104master√worker√√√ 2. 搭建



  • 下载 spark-3.0.0-bin-hadoop3.2.tgz 安装包并上传到虚拟机上的 /opt/software 目录
  • 将 spark-3.0.0-bin-hadoop3.2.tgz 解压缩到 /opt/module 并修改名称
    1. tar -zxvf spark-3.0.0-bin-hadoop3.2.tgz -C /opt/module
    2. cd /opt/module
    3. mv spark-3.0.0-bin-hadoop3.2.tgz spark-standalone
    复制代码
  • 修改配置文件
    1. # 1.进入 spark-standalone 的 conf 目录,将 slaves.template 文件更名为 slaves
    2. cd /opt/module/spark-standalone/conf
    3. mv slaves.template slaves
    4. # 2.在 slaves 文件中添加 worker 节点
    5. hadoop102
    6. hadoop103
    7. hadoop104
    8. # 3.将 spark-env.sh.template 文件更名为 spark-env.sh
    9. mv spark-env.sh.template spark-env.sh
    10. # 4.在 spark-env.sh 文件中添加 JAVA_HOME 环境变量和集群对应的 master 节点
    11. export JAVA_HOME=/opt/module/jdk1.8.0_212
    12. SPARK_MASTER_HOST=hadoop102
    13. SPARK_MASTER_PORT=7077 #注意:7077 端口,相当于 hadoop3 内部通信的 8020 端口,此处的端口需要确认自己的 Hadoop 配置
    14. # 5.分发 spark-standalone 目录到其他集群节点
    15. xsync spark-standalone
    复制代码
  • 启动集群
    1. # 在 hadoop102 的 spark-standalone 目录
    2. cd /opt/module/spark-standalone
    3. sbin/start-all.sh
    4. # 查看进程
    5. jps
    复制代码
  • 检察 Web 监控页面:http://hadoop102:8080
3. 测试

  1. bin/spark-submit \
  2. --class org.apache.spark.examples.SparkPi \
  3. --master spark://hadoop102:7077 \
  4. ./examples/jars/spark-examples_2.12-3.0.0.jar \
  5. 10
复制代码
参数阐明示例–classSpark 程序中包含主函数的类–masterSpark 程序运行的模式(情况)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 都包含同样的 jarapplication-arguments传给 main()方法的参数 4. 配置历史服务



    • 修改并添加配置
      1. # 1.将 spark-defaults.conf.template 文件更名为 spark-defaults.conf
      2. cd /opt/module/spark-standalone/conf
      3. mv spark-defaults.conf.template spark-defaults.conf
      4. # 2.在 spark-default.conf 文件中配置日志存储路径
      5. spark.eventLog.enabled true
      6. spark.eventLog.dir hdfs://hadoop102:8020/directory # 注意:需要启动 hadoop 集群,HDFS 上的 directory 目录需要提前存在
      7. # 3.在 spark-env.sh 文件中添加日志配置
      8. export SPARK_HISTORY_OPTS="
      9. -Dspark.history.ui.port=18080 # WEB UI 访问的端口号为 18080
      10. -Dspark.history.fs.logDirectory=hdfs://hadoop102:8020/directory #历史服务器日志存储路径
      11. -Dspark.history.retainedApplications=30"
      12. # 指定保存 Application 历史记录的个数,如果超过这个值,旧的应用程序信息将被删除,这个是内存中的应用数,而不是页面上显示的应用数
      13. # 4.分发配置文件(xsync 为自定义分发脚本,详见“Hadoop生产环境集群搭建”文章)
      14. xsync conf/
      复制代码
    • 启动 Hadoop 集群并创建日志存储目录
      1. cd /opt/module/hadoop-3.1.3
      2. sbin/start-dfs.sh
      3. hadoop fs -mkdir /directory
      复制代码
    • 启动 Spark 集群和历史服务
      1. cd /opt/module/spark-standalone
      2. sbin/start-all.sh
      3. sbin/start-history-server.sh
      复制代码
    • 提交应用实行
      1. bin/spark-submit \
      2. --class org.apache.spark.examples.SparkPi \
      3. --master spark://hadoop102:7077 \
      4. ./examples/jars/spark-examples_2.12-3.0.0.jar \
      5. 10
      复制代码
    • 检察历史服务:http://hadoop102:18080
    5. 配置高可用

    5.1 集群规划

    规划Hadoop102Hadoop103Hadoop104master√√worker√√√zookeeper√√√ 5.2 搭建



    • 修改 spark-env.sh 文件配置内容
      1. cd /opt/module/spark-standalone/conf
      2. vim spark-env.sh
      3. #1.注释如下内容:
      4. #SPARK_MASTER_HOST=hadoop102
      5. #SPARK_MASTER_PORT=7077
      6. #2.添加如下内容:
      7. #修改 Master 监控页面默认访问端口 8080 为 8989,避免和 Zookeeper 冲突
      8. SPARK_MASTER_WEBUI_PORT=8989
      9. #Zookeeper配置信息
      10. export SPARK_DAEMON_JAVA_OPTS="
      11. -Dspark.deploy.recoveryMode=ZOOKEEPER
      12. -Dspark.deploy.zookeeper.url=hadoop102,hadoop103,hadoop104
      13. -Dspark.deploy.zookeeper.dir=/spark"
      复制代码
    • 分发配置:xsync conf/
    • 启动 Zookeeper 集群
    • 启动 Spark 集群;在 hadoop103 上启动 master 服务
      1. #hadoop102
      2. cd /opt/module/spark-standalone
      3. sbin/start-all.sh
      4. #hadoop103
      5. cd /opt/module/spark-standalone
      6. sbin/start-master.sh
      复制代码
    • 分别检察 hadoop102 和 hadoop103 的 Web 页面:https:://hadoop102:8989 和 https:://hadoop103:8989
    • 提交应用实行
      1. bin/spark-submit \
      2. --class org.apache.spark.examples.SparkPi \
      3. --master spark://hadoop102:7077,hadoop103:7077 \
      4. ./examples/jars/spark-examples_2.12-3.0.0.jar \
      5. 10
      复制代码
    • 模拟 master 下线,保证高可用
      1. #停止 hadoop102 的 master 进程
      2. jps
      3. kill -9 [pid]
      4. #分别访问 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 并修改名称
      1. tar -zxvf spark-3.0.0-bin-hadoop3.2.tgz -C /opt/module
      2. cd /opt/module
      3. mv spark-3.0.0-bin-hadoop3.2.tgz spark-yarn
      复制代码
    • 修改 hadoop 安装目录下的 etc/hadoop/yarn-site.xml 配置文件并分发到集群其他节点
      1. <!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认
      2. 是 true -->
      3. <property>
      4.     <name>yarn.nodemanager.pmem-check-enabled</name>
      5.     <value>false</value>
      6. </property>
      7. <!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认
      8. 是 true -->
      9. <property>
      10.     <name>yarn.nodemanager.vmem-check-enabled</name>
      11.     <value>false</value>
      12. </property>
      复制代码
    • 修改 Spark 配置文件
      1. cd /opt/module/spark-yarn/conf
      2. #1.将 spark-env.sh.template 文件更名为 spark-env.sh
      3. mv spark-env.sh.template spark-env.sh
      4. vim spark-env.sh
      5. #2.在 spark-env.sh 文件中添加 JAVA_HOME 和 YARN_CONF_DIR 配置
      6. export JAVA_HOME=/opt/module/jdk1.8.0_212
      7. YARN_CONF_DIR=/opt/module/hadoop/etc/hadoop
      复制代码
    • 启动 Hadoop 集群
    2. 测试



    • 以集群方式提交应用:不会打印结果
      1. bin/spark-submit \
      2. --class org.apache.spark.examples.SparkPi \
      3. --master yarn \
      4. --deploy-mode cluster \
      5. ./examples/jars/spark-examples_2.12-3.0.0.jar \
      6. 10
      复制代码
    • 以客户端方式提交应用:
      1. bin/spark-submit \
      2. --class org.apache.spark.examples.SparkPi \
      3. --master yarn \
      4. --deploy-mode client \
      5. ./examples/jars/spark-examples_2.12-3.0.0.jar \
      6. 10
      复制代码
    3. 配置历史服务



    • 修改 Spark 配置
      1. cd /opt/module/spark-yarn/conf
      2. #1.将 spark-defaults.conf.template 文件更名为 spark-defaults.conf
      3. mv spark-defaults.conf.template spark-defaults.conf
      4. vim spark-defaults.conf
      5. #2.在 spark-defaults.conf 文件中配置日志存储路径和 yarn 历史服务器信息
      6. spark.eventLog.enabled true
      7. spark.eventLog.dir hdfs://hadoop102:8020/directory #注意:需要启动 hadoop 集群,HDFS 上的目录需要提前存在
      8. spark.yarn.historyServer.address=hadoop102:18080
      9. spark.history.ui.port=18080
      10. #3.在 spark-env.sh 文件中添加日志配置
      11. export SPARK_HISTORY_OPTS="
      12. -Dspark.history.ui.port=18080
      13. -Dspark.history.fs.logDirectory=hdfs://hadoop02:8020/directory
      14. -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 命令行窗口中实行提交指令
        1. spark-submit --class org.apache.spark.examples.SparkPi --master local[2] ../examples/jars/spark-examples_2.12-3.0.0.jar 10
        复制代码

    六、各模式对比

    模式Spark安装机器数需启动的进程所属者应用场景Local1无Spark测试Standalone3Master及WorkerSpark单独部署Yarn1Yarn及HDFSHadoop混淆部署 七、常用端口号阐明

    服务端口Spark 检察当前 Spark-shell 运行任务情况端口号(计算)4040Spark Master 内部通讯服务7077Standalone 模式下,Spark Master Web 端口号(资源)8080Spark 历史服务器18080Hadoop YARN 任务运行情况检察8088
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
  • 回复

    使用道具 举报

    0 个回复

    正序浏览

    快速回复

    您需要登录后才可以回帖 登录 or 立即注册

    本版积分规则

    锦通

    金牌会员
    这个人很懒什么都没写!

    标签云

    快速回复 返回顶部 返回列表