XY个人记

Apache Spark是专为大规模数据处理而设计的快速通用的计算引擎  。现在形成一个高速发展应用广泛的生态系统。

官网地址:http://spark.apache.org/

第二十三记·Spark Core详解 未完待续……

Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。 

Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。
           尽管创建 Spark 是为了支持分布式数据集上的迭代作业,但是实际上它是对 Hadoop 的补充,可以在 Hadoop 文件系统中并行运行。通过名为 Mesos 的第三方集群框架可以支持此行为。Spark 由加州大学伯克利分校 AMP 实验室 (Algorithms, Machines, and People Lab) 开发,可用来构建大型的、低延迟的数据分析应用程序。

 

性能特点

    1.Speed(快速)
        内存计算下,Spark 比 Hadoop 快100倍。
    2.Ease of Use(易用性)
        可用多种语言:Java, Scala, Python, R, and SQL
        Java开发
            好处:对于大数据大型项目来说,涉及到HBase、Hive、Flume等等,有利于整合
            坏处:代码量比较大,代码不优雅
        scala开发:Spark本身源码就是scala,兼容性好,代码更简洁

    3.Generality(通用)
        整合:spark sql、spark streaming、MLlib、GraphX
    4.Runs Everywhere(在任何平台运行)
        Spark runs on Hadoop, Apache Mesos, Kubernetes, standalone, or in the cloud
        国内:一般选择在yarn上运行
        国外:一般选择Mesos运行

Spark MapReduce 比较

第二十三记·Spark Core详解 未完待续……

MapReduce Spark
数据存储结构:磁盘hdfs文件系统的split 使用内存构建弹性分布式数据集RDD,对数据进行 运算和cache
编程范式:Map + Reduce DAG(有向无环图):Transformation + action
计算中间数据落磁盘,io及序列化、反序列化代 价大 计算中间数据在内存中维护,存取速度是磁盘的 多个数量级
Task以进程的方式维护,任务启动就有数秒 Task以线程的方式维护,对小数据集的读取能达到 亚秒级的延迟

Spark的版本差别
    Spark1.6
        出现Dataset的概念,与DataFrame两个概念
        程序的主入口SparkContext(sc)
        
    Spark2.0+
        统一了Dataset和DataFrame:    type DataFrame = Dataset[Row]
        程序的主入口变成SparkSession(spark),用于替换统一HiveContext、SQLContext
        累加器API更简单更高性能

spark基本工作原理:分布式    基于内存    迭代式

 

RDD:spark基本抽象

Resilient(弹性) Distributed(分布式) Dataset(数据集)弹性分布式数据集, 是分布式内存的一个抽象概念,RDD提供了一种高度受限的共享内存模型,即RDD是只读的记录分区的集合,只能通过在其他RDD执行确定的转换操作(如map、join和group by)而创建,然而这些限制使得实现容错的开销很低。

RDD可以抽象的代表一个HDFS文件,RDD是以分区的形式存在,每个分区存在不同的节点上。分区的数据默认放在内存上,如果某个文件的大小超过了它所在节点存储的大小,它会把存放不下的数据存储在当前节点的内存中,会自动进行内存和磁盘的切换。

    数据集:内部是一个数据集合
    分布式:数据分区存在,并且存放在spark集群的不同的节点上
    弹性:
        -1. 自动进行内存和磁盘存储的切换(用户只需要关注RDD的计算处理、操作) RDD的分区的数据默认是放在内存上
        -2. 基于血统(依赖)的高效容错性  RDD1  经过转换生成  RDD2
        -3. DRR的最小单位Task失败,自动重试机制

RDD特点:
    RDD里面的数据是不可变的并且分区存在,每次调用RDD的API,会生成新的RDD,对旧的RDD的数据不会发生变化

RDD的五大特性
    *  - A list of partitions(分区列表)
    *  - A function for computing each split(每个分区都有一个计算函数)
    *  - A list of dependencies on other RDDs (依赖于其他RDD的一个列表)
    *  - Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
       (对于key-value形式的RDD有一个分区器) key-value形式你可以理解为二元组形式的RDD[(String,Int)]
    *  - Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file)
        (每个分区都有一个分区位置列表)

 

Spark运行环境    local:本地运行       standalone:spark 自带的资源管理框架        yarn      mesos

 

Spark on standalone

    类似于yarn的一个集群资源管理框架,spark自带的集群

    standalone
        Master:(进程)
            管理集群资源,主要包括:申请、调度、监控
        Worker:(进程)
            当前进程允许分配的资源进行管理,包括资源的管理以及executor的启动
        资源
            CPU和内存(CPU决定快慢,内存决定生死)注意:一台机器允许有多个Worker进程

 

Spark应用的结构

    Driver + Executors

    Driver:相当于MapReduce中ApplicationMaster,运行SparkContext上下文、SparkContext进行初始化的地方(JVM)、进行RDD的初始化、Task运行的资源申请、调度的地方。 一般认为就是main运行的地方
    Executors:具体的Task运行的地方,一个executor可以运行多个Task任务,一个spark应用可以有多个Executor

第二十三记·Spark Core详解 未完待续……

    进程
        local模式
        Driver和Executor运行在同一个进程(SparkSubmit),以线程的方式进行区分的

        集群模式(standalone、yarn、mesos)
        Driver:
            SparkSubmit
        Executor:(有几个Executor就会有几个CoarseGrainedExecutorBackend进程)
            CoarseGrainedExecutorBackend

        spark-shell底层运行的就是spark-submit命令,spark-submit底层运行spark-class

    Application(每个应用都有Driver+Executors)一个应用包含多个job

    如下图所示:RDD的action类型的API一旦触发就会产生一个job 一个Job里面包含多个Stage
                         stage0    有shuffle操作就会划分stage
                         一个Stage里面可以包含多个Task,Task就是最小的运行单位,是在executor处理对应分区数据的线程

第二十三记·Spark Core详解 未完待续……

最近为了赶进度…… 没有太多时间去深入了解,所以就先记到这里,后期再来完善……

未完待续……

 

 

 

 

 

 

 

 

 

相关文章:

  • 2022-01-09
  • 2021-04-27
  • 2022-02-09
  • 2021-10-02
  • 2022-02-12
  • 2021-10-07
  • 2022-02-23
猜你喜欢
  • 2021-12-12
  • 2022-01-19
  • 2022-12-23
  • 2021-08-27
  • 2021-11-20
  • 2021-07-01
  • 2021-05-30
相关资源
相似解决方案