Spark开发-开发总览

Spark 的层次

    开发视角多涉及两种层面。

  1.一种是Spark自身的开发,

      这类开发涉及到Java和Sala以及一些底层的源码。了解这些内容,主要用于底层框架的开发以及针对Spark的二次开发,也就是Spark架构设计与实现。要求深入Spark源码研究和二次开发,这些一般是大数据平台的设计与开发,涉及大型复杂分布式系统的设计和架构。对源码的了解程度要求比较高。

  2.还有一种是Spark在业务中的应用开发。

     即基于Spark实现数据的处理和计算等操作。多是数据ETL,数据挖掘等数据项目。

  

2.Spark 基本概念

     总结一下各自的阶段和层次,从不同的开发视角上看,侧重点是不同的。

    I.Spark的概念构成
  Components 组件: SparkCore SparkSQL SparkStreaming MLlib GraphX
  部署方式:Local Standalone Yarn 有两种 Client Cluster
  编程接口: RDD 以及 DataSet<Row>
    RDD: Spark的计算单元,一组RDD可形成执行的有向无环图RDD Graph
    Partitions 分区
    broadcast 广播变量
   II.Spark应用开发的视角
  0.开发整个过程
    01.创建Maven工程-配置依赖的包
    02.编写程序
    03.将程序打包
    04.上传Jar包,并运行
  1.从数据处理过程来说
    Source: 输入(来源-读取命令,返回格式)
      来源: 文件系统与文件格式(CSV JSON) 数据库系统
      读取的命令:
      返回的数据类型: RDD DataSet
    Operator
      Transformer
        map flatMap foreache
         filter
        mapPartitions
        groupByKey reduceByKey join
      Action
        reduce fold aggregate
        countByKey
      其他相关:
        数据类型之间的转换 RDD-RDD
        持久化 persist
        分区相关的操作
    Sink: 输出
      文件系统
      数据库系统: Hive Hbase MySQL ClickHouse
      消息系统: Kafka

  2.从执行的模型来说
    Map Shuffle Reduce

  3.从查看的metric看
    Job --》 Stage --》 task

  4.从背后的具体执行情况来说
    SparkContext
    驱动器 -- Driver
    执行器 -- Executor
    DAG Scheduler:  根据作业(Job)构建基于Stage的DAG,并提交Stage给TaskScheduler
     TaskScheduler: 将任务(Task)分发给Executor

  5.优化以及数据倾斜的处理方式
    优化:
    从系统执行方面
    从代码编写方面

   III.Spark开发的视角 

         源码层面进行改动,或者基于源码的配套开发.

           分布式存储,分布式计算。Hadoop HDFS就用做分布式存储的, Spark就是分布式计算系统。

###Spark内部的原理

     理论依据可以作为开发的基石。

        CAP 定理 Consistency数据一致性,Availability可用性,Partition tolerance分区容错性

        BASE 是  Basically Available(基本可用)、Soft state(软状态)和  Eventually consistent(最终一致性)三个短语的简写

  

 

posted @ 2020-09-17 19:19  辰令  阅读(402)  评论(0编辑  收藏  举报