Spark-04

核心类
-------------
    Stage子类
        ShuffleMapStage
        ResultStage

    Task:
        ResultTask
        ShuffleMapTask

    ActiveJob:

Dependency:依赖
-------------
    NarrowDependency:    子RDD的每个分区依赖于父RDD的少量分区。
         |
        / \
        ---
         |----    OneToOneDependency        //父子RDD之间的分区存在一对一关系。
         |----    RangeDependency            //父RDD的一个分区范围和子RDD存在一对一关系。
         |----    OneToOneDependency        //父子RDD之间的分区存在一对一关系。

    ShuffleDependency                    //依赖,在shuffle阶段输出时的一种依赖。
    
    PruneDependency                        //在PartitionPruningRDD和其父RDD之间的依赖
                                        //子RDD包含了父RDD的分区子集。
SparkContext
---------------------
    [SparkContext.scala:501行]
     val (sched, ts) = SparkContext.createTaskScheduler(this, master, deployMode)
    _schedulerBackend = sched
    _taskScheduler = ts
    _dagScheduler = new DAGScheduler(this)

创建spark上下文
---------------
[本地模式,通过线程模拟]
    本地后台调度器
    spark local
    spark local[3]                            //3线程,模拟cluster集群
    spark local[*]                            //匹配cpu个数,
    spark local[3,2]                        //3:3个线程,2最多重试次数。


[相当于伪分布式]
    StandaloneSchedulerBackend
    spark local-cluster[N, cores, memory]    //模拟spark集群。

[完全分布式]
    StandaloneSchedulerBackend
    spark spark://s201:7077                    //连接到spark集群上.


maxFailures
----------------
    最多失败次数:
    1            //0和1等价,只执行一次。
    2            //最多执行两次.

shuffle对性能的影响
----------------------
    1.
    2.

RDD持久化
------------------
    跨操作进行RDD的内存式存储。
    持久化RDD时,节点上的每个分区都会保存操内存中,以备在其他操作中进行重用。
    缓存技术是迭代式计算和交互式查询的重要工具。
    使用persist()和cache()进行rdd的持久化。
    cache()是persist()一种.
    action第一次计算时会发生persist().
    spark的cache是容错的,如果rdd的任何一个分区丢失了,都可以通过最初创建rdd的进行重新计算。
    persist可以使用不同的存储级别进行持久化。


    MEMORY_ONLY            //只在内存
    MEMORY_AND_DISK
    MEMORY_ONLY_SER        //内存存储(串行化)
    MEMORY_AND_DISK_SER 
    DISK_ONLY            //硬盘
    MEMORY_ONLY_2        //带有副本 
    MEMORY_AND_DISK_2    //快速容错。
    OFF_HEAP 


删除持久化数据
-----------------
    rdd.unpersist();        //

数据传递
-------------------
    map(),filter()高级函数中访问的对象被串行化到各个节点。每个节点都有一份拷贝。
    变量值并不会回传到driver程序。
    


共享变量
-----------------
    spark通过广播变量和累加器实现共享变量。
    [广播变量]
        //创建广播变量
        val bc1 = sc.broadcast(Array(1,2,3))
        bc1.value

    [累加器]
        val ac1 = sc.longaccumulator("ac1")
        ac1.value
        sc.parell..(1 to 10).map(_ * 2).map(e=>{ac1.add(1) ; e}).reduce(_+_)
        ac1.value            //10


    通过spark实现pi的分布式计算
    ----------------------------
    sc.parallelize(1 to 20).map(e=>{val a = 1f / (2 * e - 1) ;val b = if (e % 2 == 0) -1 else 1 ;a * b * 4}).reduce(_+_)


Resilient Distributed Dataset        //弹性(容错)分布式数据集


SparkSQL
--------------
    Hive            //hadoop mr sql
    pheonix            //hbase之上构建sql交互过程

    该模块能在spark运行sql语句。

    DataFrame        //收据框.表.


    SparkSQL        //SQL | DataFrame API.


    RDD[Customer]==>
    $scala>df = sc.createDataFrame(rdd);
    //创建样例类
    $scala>case class Customer(id:Int,name:String,age:Int)
    //构造数据
    $scala>val arr = Array("1,tom,12","2,tomas,13","3,tomasLee,14")
    $scala>val rdd1 = sc.makeRDD(arr)
    //创建对象rdd
    $scala>val rdd2 = rdd1.map(e=>{e.split(",") ; Customer(arr(0).toInt,arr(1),arr(2).toInt)})
    //通过rdd创建数据框
    $scala>val df = spark.createDataFrame(rdd2);
    //打印表结构
    $scala>df.printSchema
    $scala>df.show            //插叙数据

    //创建临时视图
    $scala>df.createTempView("customers")
    $scala>val df2 = spark.sql("select * from customers")
    $scala>spark.sql("select * from customers").show        //使用sql语句
    $scala>val df1 = spark.sql("select * from cusotmers where id < 2");
    $scala>val df2 = spark.sql("select * from cusotmers where id > 2");
    $scala>df1.createTempView("c1")
    $scala>df2.createTempView("c2")
    $scala>spark.sql("select * from c1 union select * from c2").show()
    $scala>df1.union(df2);
    $scala>spark.sql("select id,name from customers").show
    $scala>df.selectExpr("id","name")
    $scala>df.where("name like 't%'")
    
    //映射
    $scala>df.map(_.getAs[Int]("age")).reduce(_+_)            //聚合操作DataSet[Int]
    $scala>df.agg(sum("age"),max("age"),min("age"))            //聚合函数

    


    
    //创建customer的rdd

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值