Spark集群搭建

Spark集群结构

  1. 名词解释

    1. Driver
      1. 该进程调用 Spark 程序的 main 方法,并且启动 SparkContext
    2. Cluster Manager
      1. 该进程负责和外部集群工具打交道,申请或释放集群资源
    3. Worker
      1. 该进程是一个守护进程,负责启动和管理 Executor
    4. Executor
      1. 该进程是一个 JVM 虚拟机,负责运行 Spark Task
  2. 运行一个Spark程序大致经历如下几个步骤

    1. 启动 Driver, 创建SparkContext
    2. Client 提交程序给Driver, Driver 向 Cluster Manager 申请集群资源
    3. 资源申请完毕,在 Worker 中启动 Executor
    4. Driver 将程序转化为 Tasks ,分发给 Executor 执行
  3. 问题

    1. 问题一:Spark 程序可以运行在什么地方?

      1. Spark 可以将任务运行在两种模式下:
        1. 单机,使用线程模拟并行来运行程序
        2. 集群,使用集群管理器来和不同类型的集群交互,将任务运行在集群中
      2. Spark 可以使用的集群管理工具有:
        1. Spark Standalone
        2. Hadoop Yarn
        3. Apache Mesos
        4. Kubernetes
    2. 问题二:Driver 和 Worker 什么时候被启动?

      1. Standalone 集群

        1. Standalone 集群中,分为两个角色:Master 和 Slave,而 Slave 就是Worker ,所以在 Standalone 集群中,启动之初就会创建固定数量的 Worker

        2. Driver 的启动分为两种模式:Client 和Cluster。在 Client 模式下,Driver 运行在 Client 端,在 Client 启动的时候被启动。在 Cluster 模式下,Driver 运行在某个 Worker 中,随着应用的提交而启动

          Spark Standalone图

      2. yarn 集群

        1. 在 Yarn 集群模式下, 也依然分为 Client 模式和 Cluster 模式, 较新的版本中已经逐渐在废弃 Client 模式了, 所以上图所示为 Cluster 模式

        2. 如果要在 Yarn 中运行 Spark 程序, 首先会和 RM 交互, 开启 ApplicationMaster, 其中运行了 Driver, Driver创建基础环境后, 会由 RM 提供对应的容器, 运行 Executor, Executor会反向向 Driver 反向注册自己, 并申请 Tasks 执行

        3. 在后续的 Spark 任务调度部分, 会更详细介绍

        4. yarn图

    3. 总结

      1. Master 负责总控, 调度, 管理和协调 Worker, 保留资源状况等
      2. Slave 对应 Worker 节点, 用于启动 Executor 执行 Tasks, 定期向 Master汇报
      3. Driver 运行在 Client 或者 Slave(Worker) 中, 默认运行在 Slave(Worker) 中

Spark集群搭建

  1. 下载Spark安装包

    1. https://archive.apache.org/dist/spark/spark-2.2.1/
  2. 上传并解压改名

    cd soft
    rz
    tar -zxvf spark-2.1.1-bin-hadoop2.7.tgz -C /rootmv /root/spark-2.1.1-bin-hadoop2.7 /root/spark
    
  3. 配置

    1. 修改 spark-env.sh

      1. 进入配置目录, 并复制一份新的配置文件, 以供在此基础之上进行修改

        cd /root/spark/conf
        cp spark-env.sh.template spark-env.sh
        vi spark-env.sh# 将以下内容复制进配置文件末尾
        # 指定 Java Home
        export JAVA_HOME=/root/jdk# 指定 Spark Master 地址
        export SPARK_MASTER_HOST=master
        export SPARK_MASTER_PORT=7077
        
    2. 修改配置文件 slaves, 以指定从节点为止, 从在使用 sbin/start-all.sh 启动集群的时候, 可以一键启动整个集群所有的 Worker

      1. 进入配置目录, 并复制一份新的配置文件, 以供在此基础之上进行修改

        cd /root/spark/conf
        cp slaves.template slaves
        vi slaves# 配置所有节点的地址
        master
        slave1 
        slave2
        
    3. 配置 HistoryServer

      1. 默认情况下, Spark 程序运行完毕后, 就无法再查看运行记录的 Web UI 了, 通过 HistoryServer 可以提供一个服务, 通过读取日志文件, 使得我们可以在程序运行结束后, 依然能够查看运行过程

      2. 复制 spark-defaults.conf, 以供修改

        cd /root/spark/conf
        cp spark-defaults.conf.template spark-defaults.conf
        vi spark-defaults.conf
        
      3. 将以下内容复制到spark-defaults.conf末尾处, 通过这段配置, 可以指定 Spark 将日志输入到 HDFS 中

        spark.eventLog.enabled  true
        spark.eventLog.dir      hdfs://master:9000/spark_log
        spark.eventLog.compress true# (注意:spark.eventLog.dir与Dspark.history.fs.logDirectory的NameNode地址要与$HADOOP_HOME/etc/hadoop下的core-site中的namenode地址相同)
        
      4. 将以下内容复制到spark-env.sh的末尾, 配置 HistoryServer 启动参数, 使得 HistoryServer 在启动的时候读取 HDFS 中写入的 Spark 日志

        # 指定 Spark History 运行参数
        export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=4000 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://master:9000/spark_log"
        
      5. 为 Spark 创建 HDFS 中的日志目录

        hdfs dfs -mkdir -p /spark_log
        
  4. 分发和运行

    1. 将 Spark 安装包分发给集群中其它机器

      cd /root/
      scp -r spark root@slave1:/root/
      scp -r spark root@slave2:/root/
      
    2. 启动 Spark Master 和 Slaves, 以及 HistoryServer

      cd /root/spark
      sbin/start-all.sh
      sbin/start-history-server.sh
      
  5. 以上是spark standalone 集群搭建

Spark 集群高可用搭建

  1. 目标

    1. 简要了解如何使用 Zookeeper 帮助 Spark Standalone 高可用
      1. 对于 Spark Standalone 集群来说, 当 Worker 调度出现问题的时候, 会自动的弹性容错, 将出错的 Task 调度到其它 Worker 执行
      2. 但是对于 Master 来说, 是会出现单点失败的, 为了避免可能出现的单点失败问题, Spark 提供了两种方式满足高可用
        1. 使用 Zookeeper 实现 Masters 的主备切换
        2. 使用文件系统做主备切换
  2. 停止 Spark 集群

    cd /root/spark
    sbin/stop-all.sh
    
  3. 修改配置文件, 增加 Spark 运行时参数, 从而指定 Zookeeper 的位置

    1. 进入spark-env.sh 所在目录, 打开 vi 编辑

      cd /root/spark/conf
      vi spark-env.sh
      
    2. 编辑 spark-env.sh, 添加 Spark 启动参数, 并注释SPARK_MASTER_HOST 地址

      # 指定 Java Home
      export JAVA_HOME=/root/jdk# 指定 Spark Master 地址
      # export SPARK_MASTER_HOST=master
      export SPARK_MASTER_PORT=7077# 指定 Spark History 运行参数
      export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=4000 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://node01:9000/spark_log"# 指定 Spark 运行时参数
      export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=master:2181,slave1:2181,slave2:2181 -Dspark.deploy.zookeeper.dir=/spark"
      
  4. 分发配置文件到整个集群

    cd /export/servers/spark/conf
    scp spark-env.sh slave1:/root/spark/conf
    scp spark-env.sh slave2:/root/spark/conf
    
  5. 启动

    1. 在 master上启动整个集群

      cd /root/spark
      sbin/start-all.sh
      sbin/start-history-server.sh
      
    2. 在 slave1上单独再启动一个 Master

      cd /root/spark
      sbin/start-master.sh
      
  6. 查看 master master 和 slave1 master 的 WebUI

    1. 你会发现一个是 ALIVE(主), 另外一个是 STANDBY(备)
    2. 如果关闭一个, 则另外一个成为ALIVE, 但是这个过程可能要持续两分钟左右, 需要耐心等待

运行案例测试集群

目标

  1. 从示例应用运行中理解 Spark 应用的运行流程
    1. 流程
      1. 进入 Spark 安装目录中

        cd /root/spark/
        
      2. 运行 Spark 示例

        bin/spark-submit \\
        --class org.apache.spark.examples.SparkPi \\
        --master spark://master:7077 \\
        --executor-memory 1G \\
        --total-executor-cores 2 \\
        --/root/spark/examples/jars/spark-examples_2.11-2.1.1.jar \\ # 视jar包版本而定
        100 # 计算100次
        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/601803.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「Verilog学习笔记」任意奇数倍时钟分频

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 timescale 1ns/1nsmodule clk_divider#(parameter dividor 5) ( input clk_in,input rst_n,output clk_out );parameter CNT_WIDTH $clog2(dividor - 1) ; reg flag1, f…

XDOJ167.数字统计排序

标题 数字统计排序 类别 综合 时间限制 1S 内存限制 256Kb 问题描述 给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出,次数相同时先输出值较小的数。 输入说明 输入的第一行包含一个整数…

转载:Windows实用小工具

原文作者我忘了是谁了&#xff0c;如有侵权联系我。 开始的时候要输入用户名和密码&#xff0c;都是“123456”。 源代码&#xff1a; #include <iostream> #include <windows.h> #include <cstring> #include <cstdio> #include <cmath> usi…

西门子PLC联网数据采集:借助HiWoo Box实现高效监控与管理

在工业自动化领域&#xff0c;西门子PLC作为一种广泛应用的控制器&#xff0c;对于工厂的生产线具有至关重要的作用。如何实现西门子PLC的联网数据采集&#xff0c;提高生产效率和管理水平&#xff0c;成为了许多企业的关注焦点。而HiWoo Box作为一款功能强大的工业网关&#x…

Docker安装Centos8系统

引言&#xff1a;最小安装版Centos8系统安装docker软件安装记录 官网安装教程&#xff1a;https://dockerdocs.cn/engine/install/centos/index.html 操作系统镜像版本 CentOS-Stream-8-x86_64-latest-boot.iso 第一步&#xff1a;更新yum yum -y update第二步&#xff1a;…

基于PHP的花店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的花店管理系统 一 介绍 此花店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。(附带参考设计文档) 技术栈&#xff1a;phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 …

具备闭环思维的测试才更充分

测试工作的终极目标是为了保障产品的质量。如果用同一个维度衡量测试人员的业务水平&#xff0c;简单粗暴一些&#xff1a;那就是针对同一款产品&#xff0c;哪个测试人员发现的bug多&#xff0c;哪个测试人员的测试理论与实践水平相对来说还是高一些。 前两天组长在群里分析了…

13-注意力机制

文章目录 什么是注意力机制注意力机制的实现方式1、SENet的实现---通道注意力 CA(Channel Attention)2、CBAM的实现通道-空间注意力 CA-SA(channel attention, spacial attention)残差-通道-空间注意力(ResBlock + CBAM)残差-通道注意力 RCAB残差-空间注意力 RSAB3、ECANet什…

LeetCode做题总结 15. 三数之和、18. 四数之和 (Java)

不会做&#xff0c;参考了代码随想录和力扣官方题解&#xff0c;对此题进行整理。 X数之和 15. 三数之和代码思路20240103重写错误1错误2Java语言点总结 18. 四数之和代码思路20240104&#xff08;伪&#xff09;错误1 第一次剪枝错误2 第二次剪枝错误3 溢出 15. 三数之和 代码…

滑动窗口最大值【子串】【滑动窗口】【双端队列】

Problem: 239. 滑动窗口最大值 文章目录 思路 & 解题方法复杂度Code 思路 & 解题方法 实在是太太太太巧妙了&#xff01;定义一个双端队列&#xff0c;然后存储下标&#xff0c;存储进去每一个数的下标时&#xff0c;都需要将现在有的数且小于当前的数字都去掉&#xf…

静态网页设计——贵州美食(HTML+CSS+JavaScript)

前言 声明&#xff1a;该文章只是做技术分享&#xff0c;若侵权请联系我删除。&#xff01;&#xff01; 感谢大佬的视频&#xff1a; https://www.bilibili.com/video/BV1vC4y1K7de/?vd_source5f425e0074a7f92921f53ab87712357b 使用技术&#xff1a;HTMLCSSJS&#xff08;…

golang 的那些花样

从 A Tour of Go 可以看到一些 Go 比较特殊的点 文章目录 变量声明时&#xff0c;类型放在后面Array 的引用 Slicereceiver 和 argumentbuilt-int特殊接口Error 变量声明时&#xff0c;类型放在后面 var i, j int 1, 2declaration-syntax Array 的引用 Slice slices-intro …

【FPGA/verilog -入门学习15】vivado FPGA 数码管显示

1&#xff0c;需求&#xff1a;使用xc720 开发板的8个数码管显示12345678 2&#xff0c;需求分析&#xff1a; 75hc595 1&#xff0c;74hc595驱动&#xff0c;将串行数据转换成并行输出。对应研究手册 2&#xff0c;发送之前将要发的数据&#xff0c;合并成高8位:SEG,低8位&…

Spring配置提示: File is included in 4 contexts

问题描述&#xff1a; spring配置文件上面提示&#xff1a; mvc application context in module studyDemo file is included in 4 contexts 导致原因&#xff1a;因为所有的配置文件都没有放在同一个上下文中 所谓File is included in 4 contexts是因为spring的配置文件放…

前端实现回车键触发搜索

前端实现回车键触发搜索 前言实现方法1. html里可以用 form 来实现2. 非form中的input 前言 搜索框是个常见的功能&#xff0c;除了用现有的ui组件库&#xff0c;有的时候必须要自己封装&#xff0c;所以涉及到点击按钮搜索和回车搜索都要实现 实现方法 1. html里可以用 for…

【100条sqlite3常用命令】

.open filename - 打开或创建一个SQLite数据库文件.tables - 列出当前数据库中的表.schema tablename - 查看指定表的创建语句.header on|off - 设置是否显示查询结果的列名.mode csv|column|json - 设置查询结果的显示模式.import filename tablename - 从文件导入数据到指定表…

通过IP地址防范钓鱼网站诈骗的有效措施

随着互联网的普及&#xff0c;钓鱼网站诈骗成为一种广泛存在的网络犯罪行为。通过冒充合法网站&#xff0c;攻击者试图窃取用户的敏感信息。本文将探讨如何通过IP地址防范钓鱼网站诈骗&#xff0c;提供一系列有效的措施&#xff0c;以加强网络安全&#xff0c;保护用户免受诈骗…

css 保持元素宽高比 随页面宽度变化高度自适应

目录 1.效果展示 2.代码内容 3.代码解析 &#xff08;1&#xff09;分析inner类写法 &#xff08;2&#xff09;分析container类写法 1.效果展示 2.代码内容 <div class"item"><div class"inner"><di class"container">…

静态网页设计——极乐迪斯科(HTML+CSS+JavaScript)

前言 声明&#xff1a;该文章只是做技术分享&#xff0c;若侵权请联系我删除。&#xff01;&#xff01; 感谢大佬的视频&#xff1a; https://www.bilibili.com/video/BV11k4y1X7mH/?vd_source5f425e0074a7f92921f53ab87712357b 使用技术&#xff1a;HTMLCSSJS&#xff08;…

游戏策划:游戏开发中的关键环节

在数字游戏的世界里&#xff0c;游戏策划是构建一个成功游戏的基石。游戏策划不仅仅是一个创意过程&#xff0c;它涉及从故事构建到技术实现的各个方面。以下是游戏策划中需要重点关注的几个重要内容。 1. 故事情节与世界观构建 一款游戏的魅力很大程度上取决于其故事情节和世…