Spark简介

概述:

一特点:

二、什么是RDD?

三 、RDD 弹性

 四、RDD的特点

五、RDD的五大属性

六、分区方式


概述:

Spark是一个集成离线计算,实时计算,SQL查询,机器学习,图计算为一体的通用的基于内存的并行计算框架。

一、特点:

1、spark相比于MR,

基于内存计算Spark要快MR100倍,

基于磁盘计算Spark要快MR10倍。

快的原因:

1、基于内存计算 ​

2、计算和数据的分离 ​

3、基于DAGScheduler的计算划分 ​

4、只有一次的Shuffle输出操作

 2、易用性:

有丰富的算子 支持多种语言

Spark提供超过80多个高阶算子函数,来支持对数据集的各种各样的计算,支持了包括 Java、Scala、Python 、R和SQL语言在内的多种语言。

3.多种资源管理器支持

Spark支持Hadoop YARN、Apache Mesos以及自带的独立集群管理器。

4.多数据源支持

Spark支持访问HDFS、Alluxio、Cassandra、HBase、Hive以及数百个其他数据源中的数据。

二、什么是RDD?

弹性分布式数据集。

特点:不可变,可分区,里面的元素可以并行计算的集合。 不能携带数据,携带的是元数据信息。

RDD的弹性

三 、RDD 弹性

1、自动进行内存和磁盘数据存储的切换

Spark 优先把数据放到内存中,如果内存放不下,就会放到磁盘里面,程序进行自动的存储切换
2、 基于血统的高效容错机制

在RDD 进行转换和动作的时候,会形成RDD 的Lineage 依赖链,当某一个RDD 失效的时候,可以通过重新计算上游的RDD 来重新生成丢失的RDD 数据。
3、Task 如果失败会自动进行特定次数的重试

RDD 的计算任务如果运行失败,会自动进行任务的重新计算,默认次数是4 次。
4、Stage 如果失败会自动进行特定次数的重试

如果Job 的某个Stage 阶段计算失败,框架也会自动进行任务的重新计算,默认次数也是4 次。
5、 Checkpoint 和Persist 可主动或被动触发

RDD 可以通过Persist 持久化将RDD 缓存到内存或者磁盘,当再次用到该RDD 时直接读取就行。也可以将RDD 进行检查点,检查点会将数据存储在HDFS 中,该RDD 的所有父RDD 依赖都会被移除。
6、数据调度弹性

Spark 把这个JOB 执行模型抽象为通用的有向无环图DAG,可以将多Stage 的任务串联或并行执行,调度引擎自动处理Stage 的失败以及Task 的失败。

 四、RDD的特点

1、只读

RDD 表示只读的分区的数据集,对RDD 进行改动,只能通过RDD 的转换操作,由一个RDD 得到一个新的RDD

RDD 的操作算子包括两类,一类叫做transformations,它是用来将RDD 进行转化,构建RDD 的血缘关系;另一类叫做actions,它是用来触发RDD 的计算,得到RDD 的相关计算结果或者将RDD 保存的文件系统中。

2、分区

RDD 逻辑上是分区的,每个分区的数据是抽象存在的,计算的时候会通过一个compute函数得到每个分区的数据。如果RDD 是通过已有的文件系统构建,则compute 函数是读取指定文件系统中的数据,如果RDD 是通过其他RDD 转换而来,则compute 函数是执行转换逻辑将其他RDD 的数据进行转换。
3、依赖

RDD之间的依赖关系形成了一个RDD的有向无环图DAG,依赖关系称之为RDD血缘关系或者血统。

分为宽依赖与窄依赖。

窄依赖:就是父RDD的一个分区,最多只能给子RDD的一个分区使用,是典型的一对一关系。

宽依赖:指父RDD的一个分区被子RDD的多个分区使用,是一对多的关系。宽依赖会引起shuffle,速度会比较慢,因为shuffle要等对应的父RDD的所有分区的数据全部处理完才能进行处理。

五、RDD的五大属性

从RDD的abstract class中可知:

 
* Internally, each RDD is characterized by five main properties:
 *
 *  - A list of partitions
 *  - A function for computing each split
 *  - A list of dependencies on other RDDs
 *  - Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
 *  - Optionally, a list of preferred locations to compute each split on (e.g. block locations for
 *    an HDFS file)

        1、一组分片(Partition),即数据集的基本组成单位。
            对于RDD来说,每个分片都会被一个计算任务处理,并决定并行计算的粒度。用户可以在创建RDD时指定RDD的分片个数,如果没有指定,那么就会采用默认值。默认值就是程序所分配到的CPU Core的数目。

        2、一个计算每个分区的函数。
            Spark中RDD的计算是以分片为单位的,每个RDD都会实现compute(康piu特)函数以达到这个目的。compute函数会对迭代器进行复合,不需要保存每次计算的结果。

        3、RDD之间的依赖关系。
            RDD的每次转换都会生成一个新的RDD,所以RDD之间就会形成类似于流水线一样的前后依赖关系。在部分分区数据丢失时,Spark可以通过这个依赖关系重新计算丢失的分区数据,而不是对RDD的所有分区进行重新计算。

        4、一个Partitioner(怕T神讷),即RDD的分片函数。简单来说就是分区方式
            当前Spark中实现了两种类型的分片函数,一个是基于哈希的HashPartitioner(哈希怕T神),另外一个是基于范围的RangePartitioner(润之怕T神)。只有对于key-value的RDD,才会有Partitioner,非key-value的RDD的Parititioner的值是None。Partitioner函数不但决定了RDD本身的分片数量,也决定了parent RDD Shuffle输出时的分片数量。

            Option下面有两个子类,一个是Some,一个是None
            Some:不为空
            None:为空

        5、一个列表,存储存取每个Partition的对应数据的优先位置(preferred location)。
            对于一个HDFS文件来说,这个列表保存的就是每个Partition所在的块的位置。按照“移动数据不如移动计算”的理念,Spark在进行任务调度的时候,会尽可能地将计算任务分配到其所要处理数据块的存储位置。

六、分区方式

非key,value对的数据,分区方式为None;
        key,value对的数据默认分区方式也为None,但是可以指定分区方式:一种是Hash,一种是Range。

查看分区数:
    .getNumPartitions

查看分区方式:
    .partitioner

指定分区方式:注意:只有kv格式的数据才能指定分区方式。
    .partitionBy(new  HashPartitioner(分区数));

map:映射

是转换算子,针对列表当中的每一个元素进行操作,操作完成后将数据一对一的转换成为一个新的RDD,操作之前是多少个元素,操作之后还是多少个元素,不会增加,不会减少。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值