Spark学习总体概述

    1.什么是Spark?与MR的区别?
        Spark是开源的通用的计算框架,目的是为了使数据分析更快。MR也是计算框架。
        区别?
            1).MR是基于磁盘迭代,Spark是基于内存迭代。
            2).Spark中有DAG有向无环图。
            3).MR中只有map,reduce两个类,相当于Spark中两个算子。Spark中有三类算子(转换算子,行动算子,持久化算子)。
            4).MR是细粒度资源申请,Spark是粗粒度资源申请。
    2.Spark运行模式?
        1).Local:在eclipse/IDEA中编写代码,在本地运行
        2).Standalone:Spark自带的资源调度框架,支持分布式搭建。
        3).Yarn:Hadoop生态圈内的资源调度框架。
        4).Mesos:资源调度框架。
        
    3.Spark核心RDD


        1).RDD(Resilient Distributed Dateset),弹性分布式数据集。Spark底层操作数据都是基于RDD。
        2).RDD五大特性:
            a).RDD由一系列Partition组成。
            b).函数(算子)是作用在partition上的。
            c).RDD之间有依赖关系。
            d).分区器是作用在K,V格式的RDD上。
            e).partition提供最佳计算位置,利于处理数据的本地化。符合“计算移动,数据不移动”
        3).注意:
            a).sc.textFile(...)读取HDFS中文件的方法,底层调用的是MR读取HDFS中文件的方法,首先会split,每个split大小默认
                与一个block大小相同,每个split与RDD中的一个partition对应。
            b).什么是K,V格式的RDD?
                RDD中元素是一个个的tuple2 二元组,这个RDD就是K,V格式的RDD。
            c).哪里体现了RDD的弹性(容错)?
                i).RDD之间有依赖关系
                ii).partition个数可多可少。
            d).哪里体现了RDD的分布式?
                partition是分布在多个节点上的。
                
    4.Spark代码流程?

         2.x之前 sparkContext是程序的入口
        1).val conf = new SparkConf().setMaster(...).setAppName(...)
        2).val sc = new SparkContext(conf)
        3).创建RDD。
        4).对RDD使用Transformation类算子进行数据转换。
        5).使用Action类算子触发Transformation类算子执行。
        6).sc.stop()
        2.x之后  sparkSession是程序的入口,封装了sparkContext和SQLContext
        1).val spark = SparkSession.builder().master(...).appname(...).getOrCreate()
        2).创建RDD。
        3).对RDD使用Transformation类算子进行数据转换。
        4).使用Action类算子触发Transformation类算子执行。
        5).sc.stop()

 5.Spark算子

部分算子


    对于Transformations返回值均为RDD,而Action返回值都不是RDD

        1).Transformations ,转换算子,懒执行,需要Action类算子触发。

map/mapToPair,flatMap,filter,reduceByKey,sample,sortBy/sortByKey,groupByKey,join,leftOutJoin,rightOuterJoin,fullOuterJoin,distinct,union,intersection,subtract,repartition,coalesce,zip,zipWithIndex,mapPartitions,
           mapPartitionWithIndex,cogroup,mapValues,aggreagateByKey,combineByKey
        2).Action,行动算子,触发Action类算子执行。Spark应用程序中(Spark Application)有一个Action算子就有了一个job。
            take,frist,foreach,count,collect,reduce,foreachPartition,countByKey,countByValue
        3).持久化算子

cache和persist之后不能紧跟action算子,指的是 RDD.cache().action算子,这样是错误的


            a).cache
                默认将数据持久化到内存,cache()=persist()=persist(StorageLevel.MEMORY_ONLY)
            b).persist
                可以手动指定数据持久化级别。


                MEMORY_ONLY
                MEMORY_ONLY_SER
                MEMORY_AND_DISK
                MEMORY_AND_DISK_SER
                "_2"代表有副本数,尽量避免使用"DISK_ONLY"级别。
            c).checkpoint
                将数据可以持久化到磁盘,指定的checkpoint目录中,切断checkpointRDD之前的依赖关系,使之后的RDD依赖于checkpoint目录中的数据。需要设置checkpoint路径。
                RDD lineage 非常长,每一个RDD之间逻辑复杂,计算耗时。对一个RDD进行checkpoint之前最好先cache下。
                   
            注意:
            a).cache和persist注意事项:
                i).cache和persist是懒执行,需要Action算子触发。
                ii).对一个RDD进行cache/persist之后,可以赋值给一个变量,下次直接使用这个变量就是使用的持久化的数据。
                iii).cache/persist之后不能紧跟Action类算子。
            b).checkpoint执行流程:
                i).Spark任务执行完成之后,会从后往前回溯,找到CcheckpointRDD做标记。
                ii).回溯完成之后,重新计算标记RDD的数据,将数据放入checkpoint目录中。
                iii).切断RDD之间的依赖关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值