首页 > 其他分享 >07-RDD的设计及定义

07-RDD的设计及定义

时间:2022-08-14 22:27:30浏览次数:81  
标签:Task 07 分区 Executor RDD 算子 数据 定义

一:分布式程序的设计思想

  • step1:读取数据Input
    • 代码中:要指定读取数据文件的位置,然后返回一个代表这个输入数据的变量
    • 将要处理的数据拆分成N份,每一份数据放在不同机器上
    • 相当于接一个大活,干活的是很多人一起干活,将一个大的任务拆分成很多小任务给每个人分
  • step2:处理数据Transform
    • 代码中:定义Input的数据变量怎么进行转换,返回一个代表结果数据的变量
    • 启动N个计算任务Task,每个计算任务Task根据处理逻辑去处理每一份数据
    • 每个计算Task都会计算得到一个结果
  • step3:保存结果Save
    • 代码中:将代表结果数据的变量进行输出或者保存到外部系统中
    • 启动Task将每台机器的数据进行输出或者写入外部系统

二:RDD的设计及定义

  • 本质:一个抽象的逻辑上的数据集合的概念,类似于Python中的list,但RDD是分布式的
    • Python中的list:数据只存在于list构建的节点
    • Spark中的RDD:数据是分布式存储在多台节点上的
  • 功能:实现分布式的数据存储,是一个对应多个物理分区的数据集合,每个分区的数据可以存储在不同的节点上
    • RDD本质上是一个逻辑的概念,代表多台机器上的多个分区的数据
    • RDD就类似于HDFS中的文件,RDD的分区就类似于HDFS中的Block块

实现

  • step1:SparkCore中所有的数据读取到程序中以后都会存储在一个RDD中,将数据划分到多个分区中
  • step2:所有的数据转换处理,都直接在代码中对RDD进行处理,底层会对RDD的每个分区进行并行处理

三:RDD的五大特性

  • 特性一:每个RDD都由一系列的分区构成
  • 特性二:RDD的计算操作本质上是对RDD每个分区的计算
  • 特性三:每个RDD都会保存与其他RDD之间的依赖关系:血链或者血脉
  • 特性四:可选的,如果是二元组【KV】类型的RDD,在Shuffle过程中可以自定义分区器
  • 特性五:可选的,Spark程序运行时,Task的分配可以指定实现最优路径解:最优计算位置
    • 思想:移动存储不如移动计算:计算过程中避免了大量数据在网络中传输,影响性能

    • Driver分配Task给Executor运行,怎么分配性能最好?

      • 尽量将Task分配到对应处理的数据所在的节点的Executor中运行
      • https://spark.apache.org/docs/latest/tuning.html#data-locality
      • PROCESS_LOCAL:Task直接运行在数据所在的Executor中
      • NODE_LOCAL:Task分配在与数据同机器的其他Executor中
      • RACK_LOCAL:Task分配在于数据同机架的不同机器的Executor中
      • NO_PREF:不做最优配置

四:RDD的缺陷是什么?

  • RDD不支持细粒度的操作,不支持行级操作
  • RDD不支持增量迭代操作,RDD本身是为了离线批处理设计的

五:RDD的弹性表现在哪几点?

  • 弹性:允许用户在性能和安全性之间自由灵活的选择,所有Task都可以基于容错机制恢复
  • 容错机制:血脉机制,如果RDD中分区的数据丢失,可以重新根据依赖关系重新构建RDD
  • 缓存机制:persist/cache/unpersist:允许用户将RDD进行缓存
  • 检查点机制:checkpoint:允许用户将RDD的数据放入HDFS可靠的系统中

六:Spark的算子分为几类?

  • 转换算子:定义RDD的转换过程,一般是Lazy模式,一般不会触发job,返回一定是RDD
  • 触发算子:将RDD数据返回给用户,一定会触发job,构建Task的运行,返回值一定不是RDD

七:Spark的常用算子有哪些?

  • 常用触发算子:count、first、foreach、foreachPartition、saveAsTextFile、take、collect、reduce……
  • 常用转换算子:map、flatMap、filter、xxxxByKey、join、union、distinct、repartition……
  • 面试: 算子区别和场景(得自己理解找答案)
    • repartition、coalesce区别和应用场景
    • persist、cache、checkpoint区别和应用场景
    • sortBy、sortByKey、top、takeOrdered区别和应用场景
    • map、mapPartitions、foreach、foreachPartition区别和应用场景
    • groupByKey、reduceByKey区别和应用场景

标签:Task,07,分区,Executor,RDD,算子,数据,定义
From: https://www.cnblogs.com/z-h-q/p/16586532.html

相关文章

  • 22第四章:07_消息发送重试机制
    一、消息发送重试机制说明Producer对发送失败的消息进行重新发送的机制,称为消息发送重试机制,也称为消息重投机制。对于消息重投,需要注意以下几点:生产者在发送消息时,若......
  • django中的自定义分页器
    1.什么是自定义分页器当我们需要在前端页面展示的数据太多的时候,我们总不能将数据展示在一页上面吧!这时,我们就需要自定义一个分页器,将数据分成特定的页数进行展示,每一页展......
  • 剑指 Offer 07. 重建二叉树
    1.题目:输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 示例1:  Input:pre......
  • Android自定义矩形View中任意拖动圆点获取色温值(RectangleWheel)
    如图所示:矩形色温条中,拖动圆点获取当前色温值  1、自定义属性res->values下创建attrs.xml文件<declare-styleablename="RectangleWheel"><!--矩形宽高......
  • Bug的定义和生命周期
    BUG的定义&生命周期1、bug的定义软件的Bug狭义概含是指软件程序的漏洞或缺陷,广义概念除此之外还包括测试工程师或用户所发现和提出的软件可改进的细节(增强性,建议性)、......
  • [AcWing 4507] 子数组异或和
    异或的性质点击查看代码#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;constintN=1e6+10;intn;inta[N];voidsolve(){......
  • sentinel 资源定义方式
    主流框架的适配dubbo<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-dubbo-adapter</artifactId><version>x.y.z</version></d......
  • Cannot find module ... or its corresponding type declarations.(ts2307)
    https://blog.csdn.net/lx1996082566/article/details/121595946?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~Ra......
  • java中为什么只存在值传递(以传入自定义引用类型为例)
    java中只有值传递为什么这么说?两个例子:publicclassStudent{intsage=20;Stringsname="云胡不归";publicstaticvoidchange(Students1){......
  • 1070 结绳——25分
    给定一段一段的绳子,你需要把它们串成一条绳。每次串连的时候,是把两段绳子对折,再如下图所示套接在一起。这样得到的绳子又被当成是另一段绳子,可以再次对折去跟另一段绳子串......