Spark基础

Driver与Worker

Driver与Worker是两个重要角色。Driver程序是应用逻辑执行的起点,负责作业的调度,即Task任务的分发,而多个Worker用来管理计算节点和创建Executor并行处理任务。在执行阶段,Driver会将Task和Task所依赖的file和jar序列化后传递给对方的worker机器,同时Executor将对应数据分区的任务进行处理。

Block-Manager管理RDD的物理分区,每个Block就是节点上对应的一个数据块,可以存储在内存或者磁盘中。而RDD中的partition是一个逻辑数据块,对应相应的 物理块Block。本质上一个RDD在代码中相当于是数据的一个元数据结构,存储着数据分区及其逻辑结构映射关系,存储着RDD之前的依赖转换关系。

RDD

  • 它是逻辑中实体,在集群中多台机器上进行数据分区。通过多台机器上不同RDD分区的控制,就能够减少机器之间数据重排列(data shuffling)。Spark提供了‘partitionBy‘运算符,能够通过集群中多台机器间对原始RDD进行数据再分配来创建一个新的RDD。RDD是Spark的核心数据结构,通过RDD的依赖关系形成Spark的调度顺序。通过对RDD操作形成整个Spark程序。

理解RDD

  • 可以抽象理解为一个大数组,但是这个数组是分布在集群上。逻辑上RDD的每个分区叫一个Partition
  • RDD会被划分为很多分区分布到集群上的多个节点中。分区是个逻辑概念,变化前后的新旧分区在物理上可能是同一个内存存储。这是很重要的优化,防止函数式数据的不变性(immutable)导致的内存需求无限扩张。
  • 有些RDD是计算的中间结果,其分区不一定有相应的内存或磁盘数据与之对应。如果要迭代使用数据,可以调Cache()函数缓存数据。
  • RDD对象实质上是一个元数据结构,存储着Block、Node等的映射关系,以及其他的元数据信息。一个RDD就是一组分区,在物理数据存储上,RDD的每个分区对应的就是一个Block,Block可以存储在内存,内存不够存储到磁盘上。
  • 每个Block中存储着RDD所有数据项的一个子集,暴露给用户的就是一个Block迭代器,也就是一个数据项。
  • 如果是从hdfs等外部存储作为输入数据源,数据按照HDFS中数据分布策略进行数据分区,HDFS中的一个Block对应Spark的一个分区。

两种创建方式

1.从hadoop文件系统输入创建

2.从父RDD转换得到新的RDD

两种计算操作算子

1.Transformation:从一个RDD到另一个RDD转换操作不是马上执行,而是等到有Action操作时,才会真正触发运算。
2.Action:行动
Action算子会触发Spark提交作业(Job),将数据输出到Spark系统。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值