RDD

WordCount处理流程

  • sc.textFile("/root/temp/data.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect

调用任务过程

  • 客户端将任务通过SparkContext对象提交给Manager
  • Manager将任务分配给Worker
  • 客户端将任务提交给Worker

特性

  • 由分区组成,每个分区运行在不同的worker上
  • 通过算子(函数)处理每个分区中的数据
  • RDD之间存在依赖关系(宽依赖、窄依赖),根据依赖关系,划分任务的Stage(阶段)

创建

  • 通过集合创建:SparkContext.parallelize
  • 通过读取外部数据源:HDFS,本地目录

算子(函数)

  • Transformation:由一个RDD生成一个新的RDD。延时加载(计算)

    • map(func):对原来的RDD进行某种操作,返回一个新的RDD
    • filter(func):过滤
    • flatMap(func):压平,类似Map
    • mapPartitions(func):对RDD中的每个分区进行操作
    • sample(withReplacement, fraction, seed)
    • union(otherDataset):集合操作
    • distinct([numTasks]):去重
    • groupByKey([numTasks]):聚合操作(分组)
    • sortByKey([ascending],[numTasks]):排序(针对<key,value>)
    • sortBy()
  • Action:对RDD计算出一个结果
    • reduce(func)
    • collect():
    • foreach(func):类似map,但没有返回值

缓存

  • 默认将RDD的数据缓存在内存中
  • 提高性能
  • 表示RDD可以被缓存,函数:persist 或 cache

容错

  • 检查点(Checkpoint)
  • 复习:HDFS中,由SecondaryNameNode进行日志的合并
  • 一种容错机制,Lineage(血统)表示任务执行的声明周期(整个任务的执行过程)
  • 血统越长,出错概率越大,出错时不需要从头计算,从最近检查点的位置往后计算即可
  • 命令(本地模式和集群模式操作一样):
    • sc.setCheckpointDir("/root/temp/spark"):指定检查点文件保存目录
    • rdd1.checkpoint:标识RDD可以生成检查点

依赖

  • 单步WordCount程序:

    • val rdd1 = sc.textFile("/root/temp/input/data.txt")
    • val rdd2 = rdd1.flatMap(_.split(" "))
    • val rdd3 = rdd2.map((_,1)) 完整: val rdd3 = rdd2.map((word:String)=>(word,1) )
    • val rdd4 = rdd3.reduceByKey(_+_)
    • rdd4.collect
  • 根据依赖关系划分任务执行的Stage(阶段)
  • 宽依赖(类似“超生”):多个RDD的分区依赖了同一个父RDD分区(左父右子),如groupBy
  • 窄依赖(类似“独生子女”):每个父RDD分区,最多被一个RDD的分区使用,如map
  • 宽依赖是划分stage的依据

参考

官方API
http://spark.apache.org/docs/2.1.0/api/scala/index.html#org.apache.spark.package

[DB] Spark Core (2)的更多相关文章

  1. [DB] Spark Core (1)

    生态 Spark Core:最重要,其中最重要的是RDD(弹性分布式数据集) Spark SQL Spark Streaming Spark MLLib:机器学习算法 Spark Graphx:图计算 ...

  2. [DB] Spark Core (3)

    高级算子 mapPartitionWithIndex:对RDD中每个分区(有下标)进行操作,通过自己定义的一个函数来处理 def mapPartitionsWithIndex[U](f: (Int, ...

  3. Spark Streaming揭秘 Day35 Spark core思考

    Spark Streaming揭秘 Day35 Spark core思考 Spark上的子框架,都是后来加上去的.都是在Spark core上完成的,所有框架一切的实现最终还是由Spark core来 ...

  4. 【Spark Core】任务运行机制和Task源代码浅析1

    引言 上一小节<TaskScheduler源代码与任务提交原理浅析2>介绍了Driver側将Stage进行划分.依据Executor闲置情况分发任务,终于通过DriverActor向exe ...

  5. TypeError: Error #1034: 强制转换类型失败:无法将 mx.controls::DataGrid@9a7c0a1 转换为 spark.core.IViewport。

    1.错误描述 TypeError: Error #1034: 强制转换类型失败:无法将 mx.controls::DataGrid@9aa90a1 转换为 spark.core.IViewport. ...

  6. Spark Core

    Spark Core    DAG概念        有向无环图        Spark会根据用户提交的计算逻辑中的RDD的转换(变换方法)和动作(action方法)来生成RDD之间的依赖关系,同时 ...

  7. spark core (二)

    一.Spark-Shell交互式工具 1.Spark-Shell交互式工具 Spark-Shell提供了一种学习API的简单方式, 以及一个能够交互式分析数据的强大工具. 在Scala语言环境下或Py ...

  8. Spark Core 资源调度与任务调度(standalone client 流程描述)

    Spark Core 资源调度与任务调度(standalone client 流程描述) Spark集群启动:      集群启动后,Worker会向Master汇报资源情况(实际上将Worker的资 ...

  9. 大数据技术之_27_电商平台数据分析项目_02_预备知识 + Scala + Spark Core + Spark SQL + Spark Streaming + Java 对象池

    第0章 预备知识0.1 Scala0.1.1 Scala 操作符0.1.2 拉链操作0.2 Spark Core0.2.1 Spark RDD 持久化0.2.2 Spark 共享变量0.3 Spark ...

随机推荐

  1. js--如何实现继承?

    前言 学习过 java 的同学应该都知道,常见的继承有接口继承和实现继承,接口继承只需要继承父类的方法签名,实现继承则继承父类的实际的方法,js 中主要依靠原型链来实现继承,无法做接口继承. 学习 j ...

  2. 带你全面认识CMMI V2.0(五)——改进

    改进(Improving)涉及开发.管理和改进过程及其相关资产,其主要重点是提高组织绩效.保持习惯和持久性可确保过程在整个组织中是持久.习惯性地执行和维持,并有助于有效地实现业务绩效目标.治理(GOV ...

  3. 小程序picker地区级联选择的问题及解决方案

    各种系统中行政区域选择的场景不少,我们也有不少这样的场景.本想使用第三方的组件,但是大多有些小问题,不能满足需要.后面使用picker的mulitSelector模式写了一个,发现这种列模式的体验并好 ...

  4. B - Rikka with Graph HDU - 5631 (并查集+思维)

    As we know, Rikka is poor at math. Yuta is worrying about this situation, so he gives Rikka some mat ...

  5. 请解释Spring事务传播传播行为

    什么叫事务传播行为? 听起来挺高端的,其实很简单. 即然是传播,那么至少有两个东西,才可以发生传播.单体不不存在传播这个行为. 事务传播行为(propagation behavior)指的就是当一个事 ...

  6. Ubuntu20安装Truffle框架并部署第一个DApp

    1.查看Ubuntu版本信息 $ screenfetch 2.安装node ①查看nodejs官网稳定版(LTS)版本号(下面的14就是此时的版本号) ②添加源 $ curl -sL https:// ...

  7. Android Hook学习之ptrace函数的使用

    Synopsis #include <sys/ptrace.h> long ptrace(enum __ptrace_request request, pid_t pid, void *a ...

  8. CTB-LOCKER敲诈者病毒下载器脱壳之样本1

    一.病毒简介 CTB-LOCKER敲诈者病毒最初是在国外被发现的,该病毒是有两部分组成分别是下载器部分和文档加密部分.病毒作者将下载器程序部分伪装成邮件附件发送给一些大公司的员工或者高管,当这些人下载 ...

  9. hdu1337 水题

    题意:       给你n个格子,每个格子初始状态都是1,然后这样变化1 2 3...n,2 4 6 ... n, 3 6 9 ....n ,...n;如果是1变成0,如果是0变成1,问经过n次变换之 ...

  10. 路由器逆向分析------QEMU的基本使用方法(MIPS)

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/69258334 一.QEMU的运行模式 直接摘抄自己<揭秘家用路由器0day漏 ...