大数据-83 Spark 集群 RDD编程简介 RDD特点 Spark编程模子介绍 ...

打印 上一主题 下一主题

主题 553|帖子 553|积分 1659

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:



  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(已更完)
  • Spark(正在更新!)
章节内容

上节我们完成了如下的内容:


  • Hadoop 集群启动
  • Spark 集群启动
  • h121 h122 h123 节点启动
  • 集群启动测试 SparkShell

什么是RDD

RDD是Spark的基石,是实现Spark数据处理的核心现象。
RDD是一个抽象类,它代表一个不可变、可分区、里面的元素可并行计算的聚集。
RDD(Resilient Distributed Dataset)是Spark中的核心概念,它是一个容错、可以并行实行的分布式数据集。
它有如下的5个特性:


  • 一个分区的列表
  • 一个计算函数compute,对每个分区进行计算
  • 对其他RDDs的依靠(宽依靠、窄依靠)列表
  • 对Key-Value RDDs来说,存在一个分区器(Partitioner)【可选】
  • 对每个分区由一个优先位置的列表【可选】
RDD 特点介绍

不可变性(Immutability)

RDD一旦创建,就不能被修改。每次对RDD进行利用(比方过滤、映射等)都会产生一个新的RDD。这种不可变性简化了并行处理,因为无需担心多个计算节点间的数据竞争。
分布式(Distributed)

RDD的数据分布在多个节点上,这使得Spark可以或许处理大规模的数据集。RDD的每个分区都可以在差别的节点上独立处理。
容错性(Fault Tolerance)

RDD通过“血统”(Lineage)记录其天生方式。假如RDD的某些分区在计算过程中丢失,可以根据这些血统信息重新计算丢失的数据。通过这种方式,RDD可以或许在节点故障时自动恢复。
惰性求值(Lazy Evaluation)

RDD的利用被分为两类:转换利用(Transformations) 和 行动利用(Actions)。转换利用是惰性求值的,即不会立刻实行,而是比及遇到行动利用时才触发计算。这样做的利益是可以通过合并多个转换利用来优化计算过程,减少不须要的中心计算。
范例安全(Type Safety)

在Scala语言中,RDD是范例安全的,意味着你可以在编译时捕获范例错误,这对开发者来说非常有帮助。
并行利用(Parallel Operation)

RDD的每个分区可以独立进行处理,允许多线程或多节点并行实行,充实利用集群的计算资源。
缓存与长期化(Caching and Persistence)

可以将RDD缓存或长期化到内存或磁盘中,以便在多次使用时避免重复计算,从而提高性能。
丰富的API

RDD提供了丰富的API支持各种利用,包罗map、filter、reduceByKey、groupBy、join等,可以或许满足大部门分布式数据处理的需求。
RDD的特点

分区

RDD逻辑上是分区的,每个分区的数据是抽象存在的,计算的时候通过一个compute函数得到每个分区的数据。假如RDD是通过己有的文件系统构建,则compute函数是读取指定文件系统中的数据,假如RDD是通过其他RDD转换而来,则compute函数是实行转换逻辑将其他RDD的数据进行转换。

只读

RDD是只读的,要想改变RDD中的数据,只能在现有的RDD基础上创建新的RDD。
一个RDD转换为另一个RDD,通过丰富的算子(map filter union join reduceByKey等等)实现,不再像MR那样写Map和Reduce了。

RDD的利用算子包罗两类:


  • Transformation:用来对RDD进行转化,延迟实行(Lazy)
  • Action:用来出发RDD的计算,得到相关计算结果或者将RDD生存的文件系统中
依靠

RDDs通过利用算子进行转换,转换得到的新RDD包含了从其他RDDs衍生出所必须得信息,RDDs之间维护着这种学院关系(lineage),也称为依靠。


  • 窄依靠:RDDs之间的分区是一一对应的(1对1 或者 n对1)
  • 宽依靠:子RDD每个分区与父RDD的每个分区都有关,是多对多的关系

缓存

可以控制存储级别(内存、磁盘等)来进行缓存
假如在应用程序中多次使用同一个RDD,可以将RDD缓存起来,该RDD只有在第一次计算的时候会根据血缘关系得到分区的数据,在后续其他地方用到该RDD的时候,会直接从缓存取而不用再根据血缘计算,加速后期的重用。

CheckPoint

虽然RDD的血缘关系天然的可以实现容错,当RDD的某个分区失败或者丢失,可以通过血缘关系来进行重修。
但是对于长时间迭代型的应用来说,随着迭代的进行,RDDs之间的血缘关系会越来越长,一旦在后续迭代的过程中出错,则需要 通过非常长的血缘关系去重修,影响性能。
RDD支持CheckPoint将数据生存到长期化的存储中,这样就可以堵截之前的血缘关系,因为CheckPoint后的RDD不需要知道它的父RDDs了,可以直接从CheckPoint拿到数据。
Spark编程模子




  • RDD表示数据对象
  • 通过对象上的方法调用来对RDD进行转换
  • 终极表现结果或者将结果输出到外部数据源
  • RDD转换算子称为Transformation是Lazy的(延迟实行)
  • 只有遇到 Action算子,才会实行RDD的转换利用
假如要使用Spark,就需要编写Driver程序,它被提交到集群运行。


  • Driver中界说了一个或多个RDD,并调用RDD上的各种算子
  • Worker则实行RDD分区计算任务


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用户云卷云舒

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表