Spark

1.学习目标

  • 了解spark相关背景以及其框架特点
  • 掌握搭建spark集群(尤其是高可用集群搭建) (重点)
  • 掌握spark应用程序开发以及运行 (重点)
  • 掌握Spark框架中的角色 (重点)

2.Spark基础

2.1什么是Spark

  • Spark官网:http://spark.apache.org/
  • 概念:Spark是统一的分布式大数据分析引擎
    • 关键词:
      • 统一:Spark能够适应多种计算场景 (离线计算、实时计算、机器学习、图计算、AI应用)。一般公司在进行技术选型过程,spark首选
      • 大数据分析引擎:Spark能够分析数据,但是没有存储。一般线上的spark数据来源 (HDFS, Hive、Kafka、Flume、日志文件、关系型数据库、NoSQL数据库)。Spark数据出口(HDFS、Hive、Kafka、Redise、关系型数据库、NoSQL数据库)
      • 分布式:Spark一般情况是以集群模式存在。架构 :Master/Slaver(主从结构)
    • 应用场景
      • 精准广告推荐系统(Spark机器学习,一般在广告或者电商公司应用)
      • 金融风险管控系统 (对实时性要求比较,起码毫秒级)
      • 精细化运行系统 (CMS系统 、BI系统,重点:多维分析)
      • 用户画像 (用户数据画像)

2.2 Spark特点:

  • 速度快

    • 典型数据处理流程:Spark在使用过程中,会读取HDFS上数据,并且会将HDFS中数据驻留在内存当中,将数据进行缓存、在后续数据迭代操作过程能够重用内存中的数。在逻辑回归处理(算法)中,Spark的速度要比Hadoop 理论上快100倍
  • Spark对程序员非常友好

    • spark支持多种语言(Java、Scala、Python、R、SQL)
  • Spark一站式解决方案

    • 五大模块

      • SparkCore (处理离线数据)
      • SparkSQL (主要用来做多维数据分析、以及交互式查询)
      • SparkStreaming (实时数据处理程序)
      • Spark MLlib (机器学习 包含非常多算法,相当于Spark提供的一个算法)
      • Spark Graphx (图计算处理模块)

      在开发Spark应用程序过程中,能够同时使用以上所有模块。以上模块能够无缝兼容

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yemnyn3U-1592718262341)(C:\Users\tp\Desktop\23期scala\spark\spark_day01\资料\spark架构图.png)]

  • 兼容性

    • Spark能够兼容 (hadoop、hive、hbase、yarn、kafka、flume、redise、关系型数据等)

3.Spark集群搭建

  • 说明集群环境

    • 集群信息:三台虚拟机 系统 Centos6.9 hostname:node-01 node-02 node-03 (需要根据你们自己的机器名称), 保证三台机器互通 ssh
    • 规划:主节点 node-01 从节点: node-02 node-03
  • 前提条件以及版本信息

    • JDK (1.8以上)
    • Scala-2.11.8 (Linux 版本)
    • Spark-2.2版本
    • 安装目录:/home/soft (自定义安装目录)
  • Scala基于Llinux下的安装

    • 步骤

      • 下载scala安装包(https://www.scala-lang.org/download/2.11.8.html) scala-2.11.8.tgz

      • 上传到虚拟机 rz 上传

        • rz 路径+软件
      • 解压缩 重命名

        • tar -zvxf scala-2.11.8.tgz
        • mv scala-2.11.8 scala
      • 配置环境变量 (etc/profile)

        • vim /etc/profile

        • 条件配置

        • export SCALA_HOME=/home/soft/scala

        • export PATH=$PATH:$SCALA_HOME/bin

      • 生效环境变量文件

        • source /etc/profile
      • 验证scala安装是否成功

        • scala -version
      • 分发到其他节点

        • scp -r scala root@node-02:/home/soft
        • scp -r scala root@node-03:/home/soft
        • scp /etc/profile root@node-02:/etc/
        • scp /etc/profile root@node-03:/etc/
  • Spark集群配置

    • 步骤

      • 下载spark安装软件

        • https://archive.apache.org/dist/spark/spark-2.2.0/
      • 上传到集群 rz命令

      • 解压缩 重命名

        -tar -zvxf spark-2.2.0-bin-hadoop2.7.tgz
        -mv spark-2.2.0-bin-hadoop2.7.tg spark

      • 配置环境变量以及spark的配置文件

        • 环境变量

          • vim /etc/profile
          • export SPARK_HOME=/home/soft/spark
          • export PATH=$PATH:$SPARK_HOME/sbin:$SPARK_HOME/bin
        • spark配置文件

          • cd spark/conf
            cp spark-env.sh.template spark-env.sh
            vim spark-env.sh
            export JAVA_HOME=${JAVA_HOME}
            export SCALA_HOME=${SCALA_HOME}
            export SPARK_MASTER_HOST=主节点名称
            export SPARK_MASTER_PORT=服务端口号
            vim slaves
            node02
            node03
            
      • 分发spark软件以及配置文件到其他节点

        • scp -r spark root@node-03:/home/soft
        • scp -r spark root@node-02:/home/soft
        • scp /etc/profile root@node-02:/etc/
        • scp /etc/profile root@node-03:/etc/

4. Spark集群启动

  • 进入spark/sbin
    • 第一种启动方式
      -sbin/start-all.sh
      -sbin/stop-all.sh
    • 第二种启动方式
      • sbin/start-master.sh
      • sbin/start-slavers.sh

5.Spark masterUI界面

  • 四大部分

    • 集群信息

      • URL:spark集群master节点协议接口,主要向master申请资源用
      • Alive Workers:所以存活的worker节点
      • Cores in use:spark集群所有cpu核数
      • Memory in use:集群内存信息
      • Applications:在集群上应用程序
      • Status:集群状态
    • worker信息

      • 主要包含 workerid 地址 cpu核数 内存大小
    • Running Applications

      • 表示正在运行的应用程序
    • Completed Applications

      • 已经运行完成的应用程序

6.配置Spark高可用集群(HA)

  • 配置多个master节点,其中一个节点状态alive 其他节点状态 standby

  • 需要依赖于zookeeper

  • 配置步骤:

    • env
      注释掉
      #export SPARK_MASTER_HOST
      export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.
      url=node-01:2181,node-02:2181,node-03:2181 -Dspark.deploy.zookeeper.dir=/spark"
      
      spark.deploy.recoveryMode:恢复模式,基于zookeeper进行恢复
      spark.deploy.zookeeper.url:zookeeper地址
      spark.deploy.zookeeper.dir:spark状态存放在zookeeper中路径
      
  • 启动

    • 启动zookeeper集群
    • zkServer.sh start
    • zkServer.sh status
    • 第二步 在任意配置的zookeeper.url中选取一个节点启动master,然后在任意选取一个启动master
    • 其中一个master alive状态 另外一个master standby状态
  • 线上:保守3个master 最好是单数

7.Spark应用程序的运行模式

  • spark应用程序想要运行需要资源(CPU和内存 网络资源)。spark支持多种获取资源的方式。spark根据获取资源方式的不同,就具备不同的运行模式。

  • 不同的运行模式

    • local[N] :通过本机启动线程的方式,来模拟spark的并行计算。N可以是具体的数字 ,N可以是* :*代表的是机器的cpu核数 (学习)

      • ./bin/spark-submit \        //用来提交应用程序的脚本
          --class org.apache.spark.examples.SparkPi \   指定spark应用程序的入口
          --master local[8] \				//指定资源的获取方式
          /spark/examples/jars/spark-examples_2.11-2.2.0.jar \			//应用程序jar
          100								//应用程序初始化参数
        
    • standalone:标准模式,以spark集群模式提交应用程序。standalone模式 是向spark的master进程去获取资源 (集群测试+学习)

      • ./bin/spark-submit \         
          --class org.apache.spark.examples.SparkPi \
          --master spark://node-01:7077,node-02:7077  \    //向spark的master节点申请资源
          --executor-memory 20G \					 //spark应用程序运行时需要的内存
          --total-executor-cores 100 \               //spark应用程序运行时需要的cpu核数
          /spark/examples/jars/spark-examples_2.11-2.2.0.jar  \				
          1000
        限制集群资源参数:
        	executor-memory		
        	total-executor-cores
        如果不指定参数,spark应用程序默认会占用整个集群的所有资源。不能够对外进行服务。
        
        结论:集群高可用在切换master节点时候,不影响spark应用程序的运行。
        	 原因:master只是负责资源的分配调度管理,并不提供计算资源。实际上真正的资源提供者是worker。
        
    • yarn:spark以集群模式提交应用程序,向yarn申请资源(ResourceManager进程申请资源)。线上运行都是以这种模式。(生产环境下边的运行模式)

      • 步骤:

        • 第一步:
          spark-env.sh 中配置  HADOOP_CONF_DIR 
          第二步:
          
          ./bin/spark-submit --class org.apache.spark.examples.SparkPi \
              --master yarn \				 //向yarn申请资源
              --deploy-mode cluster \      //部署模式 以集群模式
             /home/soft/spark/examples/jars/spark-examples_2.11-2.2.0.jar \
              1000
          注意:虚拟机时间需要同步
          

8.Spark应用程序开发

8.1spark-shell开发

  • spark-shell初始化操作

    • Spark context Web UI:Spark Job任务的管理界面
    • Spark context :初始化SparkContext对象 名称 sc (SparkContext对象是spark应用程序的入口对象)
      • master = local[*]:默认情况下spark-shell 向本地机器获取资源
      • app id = local-1557469470546。 每个spark应用程序都会产生一个appid
    • Spark session:一次回话对象,可以使用sparksession 调用SparkSQL
  • spark-shell 以standalone模式启动

    • ./spark-shell --master spark://node-01:7077
    • 由于spark在spark-env.sh配置了 HADOOP_CONF_DIR 路径,那么spark-shell 读取数据默认的都是hdfs之上数据

9.Spark中重要角色

  • 按照提供资源分配

    • ClusterManger:集群资源管理器,会接受SparkContext发送来指令(申请资源),然后向workerNode节点发送指令分配资源

      • standalone模式: spark的master节点
      • yarn模式:ResourceManage
    • WorkerNode:提供Spark应用程序运行时所需要的资源 (CPU和内存)。Workernode 在接受到clusterManger的指令后,会汇报worker的信息。

      以上节点完成了Spark应用程序运行时所需要的资源

      资源分配方式:

      • 静态分配:一次性费配资源,在整个spark应用程序运行过程中,不会再次分配资源
        • standalone:属于静态分配
      • 动态分配:在整个spark应用程序运行过程中,需要多少给多少,需要多次分配资源,一旦资源使用完成,会进行回收,再次需要的时候会再次申请资源
        • yarn:动态分配
  • 按照程序运行的方式分配

    • Driver Programe: main +sparkcontext。 一般运行在Diver节点(可以是一台机器)

      • Driver节点可有与spark 集群分离。一般情况下Driver节点其实就是Spark集群中的某台机器。这样做是为了节省网络资源。因为在这个Spark应用程序运行过程中,会不断与Spark集群进行信息传递。
      • Spark-submit 把程序提交到yarn集群,yarn会根据集群资源状况,分配一个driver,然后spark程序会将jar上传到yarn,通过yarn去执行。
      • standalone:master节点就可以作为driver节点
    • Sparkcontext:是spark程序的入口对象。并且还是Spark应用程序的核心调度对象。在SparkContext对象初始化过程中,初始化了三个重要调度对象:高层调度器 DAGScheduler 底层调度 TaskScheduler SchedulerBackend 负责通信

    • Executor:运行在worker节点的一个进程。在Eecutor进程中,启动线程池运行Task。通过线程并发执行和以及线程复用的形式执行Task

    • Task:是数据处理任务最小单元,整个Spark应用程序最终会被划分成不同的Task,去运行处理数据。

    • cache:缓存,主要缓存RDD中数据的, 可以缓存到内存也可以缓存到磁盘,还可以缓存HDFS之上。

      以上角色 就完成了整个Spark Job的调度

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值