关于大数据:图解大数据-基于Spark-RDD的大数据处理分析

8次阅读

共计 3497 个字符,预计需要花费 9 分钟才能阅读完成。

作者:韩信子 @ShowMeAI
教程地址:http://www.showmeai.tech/tutorials/84
本文地址:http://www.showmeai.tech/article-detail/174
申明:版权所有,转载请分割平台与作者并注明出处

1.RDD 介绍

要把握基于 Spark 的大数据处理操作,大家首先要理解 Spark 中的一个外围数据概念:RDD。

  • 《更多材料 → 数据迷信工具速查 | Spark 使用指南(RDD 版)》

1)RDD 介绍

RDD,全称为 Resilient Distributed Datasets(弹性分布式数据汇合),是一个容错的、并行的数据结构,能够让用户显式地将数据存储到磁盘和内存中,并能控制数据的分区。同时,RDD 还提供了一组丰盛的操作来操作这些数据。

RDD(弹性分布式数据汇合)是 Spark 的根本数据结构,Spark 中的所有数据都是通过 RDD 的模式进行组织。

  • RDD 是不可变的数据汇合,每个分区数据是只读的。
  • RDD 数据集要做逻辑分区(相似 hadoop 中的逻辑切片 split),每个分区能够独自在集群节点进行计算。
  • RDD 数据集中的数据类型能够蕴含任何 java 类型、scala 类型、python 类型或者自定义的类型。
  • RDD 善于的畛域:迭代式的数据处理,比方机器学习。

2)RDD 的 5 个属性

每个 RDD 有 5 个次要的属性:

  • 一组分片(partition),数据集的根本组成单位。
  • 一个函数,计算每个分片。
  • 对 parent RDD 的依赖,形容 RDD 之间的 lineage。
  • 一个 Partitioner,对于 key-value 的 RDD。
  • 一个列表,存储存取每个 partition 的 preferred 地位。例如对于一个 HDFS 文件来说,存储每个 partition 所在的块的地位。

3)RDD 与 Spark 工作

在 Spark 分布式数据处理工作中,RDD 提供数据,供工作解决。很多时候 hadoop 和 Spark 联合应用:hadoop 提供 hdfs 的分布式存储,Spark 解决 hdfs 中的数据。

咱们以 sc.textFile("hdfs://path/to/file") 模式生成 RDD 时,Spark 就曾经算好了数据的各个切片 (也叫分区),并把分区信息放在了一个列表(名单) 里,这个名单就属于 RDD 自带的其中一个属性。

  • RDD 不蕴含理论要解决的数据,而是在 RDD 中的分区名单中载明切片的信息。
  • 数据曾经在 Hadoop 的数据节点上了,只有在 RDD 中表明分区对应的数据所在位置、偏移量、数据长度即可,就相似元数据。

RDD 在被散发到每个执行计算的工作节点后,每个工作节点会依据元数据信息获取本身节点负责计算的分区数据,并把数据放到本节点的内存当中,而后对数据进行计算。

  • 每个分区由一个节点来计算,换句话说就是每个工作只计算 RDD 的其中一个分区。

个别咱们会把数据所在的节点和 Spark 的计算节点配成同一个主机,这样就实现了数据本地化。

  • 在 worker 节点将要运行 Spark 的计算工作时,只须要从本地加载数据,再对数据使用 Spark 的计算函数,就不须要从别处 (例如近程主机) 通过网络传输把须要计算的数据拿过去,从而防止了低廉的网络传输老本。“宁肯挪动函数,也不要挪动数据”。

2.RDD 创立形式

1)创立 RDD 的 3 种形式

RDD 的 3 种创立形式如下图所示(以 pyspark 代码为例):

2)从内部数据创立 RDD

spark 也反对从多种内部数据源读取数据,包含 HDFS、S3、Hbase、MongoDB 等,如下图所示:

3.RDD 播送与累加器

1)共享变量

在 Spark 程序中,当一个传递给 Spark 操作 (例如 map 和 reduce) 的函数在近程节点下面运行时,Spark 操作实际上操作的是这个函数所用变量的一个独立正本。
这些变量会被复制到每台机器上,并且这些变量在近程机器上的所有更新都不会传递回驱动程序。

通常跨工作的读写变量是低效的,然而,Spark 还是为两种常见的应用模式提供了两种无限的共享变量:

  • 播送变量(broadcast variable)
  • 累加器(accumulator)

2)播送变量

为什么要将变量定义成播送变量

在分布式计算中,由 Driver 端散发大对象(如字典、汇合、黑白名单等),个别,如果这个变量不是播送变量,那么每个 task 就会散发一份。在 task 数目非常多的状况下,Driver 的带宽会成为零碎的瓶颈,而且会大量耗费 task 服务器上的资源。

如果将这个变量申明为播送变量,那么常识每个 executor 领有一份,这个 executor 启动的 task 会共享这个变量,节俭了通信的老本和服务器的资源

3)累加器

为什么要将变量定义为累加器

在 Spark 应用程序中,异样监控、调试、记录合乎某个性的数据数目,这些需要都须要用到计数器。

如果变量不被申明为累加器,那么被扭转时不在 Driver 端进行全局汇总。即在分布式运行时每个 task 运行的只是原始变量的一个正本,并不能扭转原始变量的值。

然而,当这个变量被申明为累加器后,该变量就会有分布式计数的性能。

4.RDD transformation 与 action

要对大数据进行解决,咱们须要应用到一系列 Spark RDD 上能够变换与操作的算子,咱们来重点了解一下 spark 的 RDD transformation 和 action。

1)transformation 与 action

transformation 操作针对已有的 RDD 创立一个新的 RDD

  • 例如,map 就是一种 transformation 操作。它用于将已有 RDD 的每个元素传入一个自定义的函数,并获取一个新的元素,而后将所有新元素组成一个新的 RDD。

action 次要是对 RDD 进行最初的操作(如遍历、reduce、保留到文件等),并能够返回后果给 Driver 程序

  • 例如,reduce 就是一种 action 操作。它用于对 RDD 中的所有元素进行聚合操作,并获取一个最终的后果,而后返回给 Driver 程序。

2)高频 RDD 算子图解

map 与 flatMap

filter 与 distinct

sort 与 sortBy

sample 与 takeSample

union 与 intersection

groupby 与 cartesian

join 与 glom

collect 与 reduce

top 与 count

takeOrdered 与 take

reduceByKey 与 collectAsMap

5. 参考资料

  • 数据迷信工具速查 | Spark 使用指南(RDD 版) http://www.showmeai.tech/article-detail/106
  • 数据迷信工具速查 | Spark 使用指南(SQL 版) http://www.showmeai.tech/article-detail/107
  • 耿嘉安,Spark 内核设计的艺术:架构设计与实现,机械工业出版社,2018
  • 郭景瞻,图解 Spark:核心技术与案例实战,电子工业出版社
  • Spark 的根本数据结构 RDD 介绍: https://blog.csdn.net/qq\_31598113/article/details/70832701
  • Spark RDD(Resilient Distributed Datasets)论文:http://spark.apachecn.org/paper/zh/spark-rdd.html

ShowMeAI 相干文章举荐

  • 图解大数据 | 导论:大数据生态与利用
  • 图解大数据 | 分布式平台:Hadoop 与 Map-reduce 详解
  • 图解大数据 | 实操案例:Hadoop 零碎搭建与环境配置
  • 图解大数据 | 实操案例:利用 map-reduce 进行大数据统计
  • 图解大数据 | 实操案例:Hive 搭建与利用案例
  • 图解大数据 | 海量数据库与查问:Hive 与 HBase 详解
  • 图解大数据 | 大数据分析开掘框架:Spark 初步
  • 图解大数据 | Spark 操作:基于 RDD 的大数据处理剖析
  • 图解大数据 | Spark 操作:基于 Dataframe 与 SQL 的大数据处理剖析
  • 图解大数据 | 综合案例:应用 spark 剖析美国新冠肺炎疫情数据
  • 图解大数据 | 综合案例:应用 Spark 剖析开掘批发交易数据
  • 图解大数据 | 综合案例:应用 Spark 剖析开掘音乐专辑数据
  • 图解大数据 | 流式数据处理:Spark Streaming
  • 图解大数据 | Spark 机器学习(上)- 工作流与特色工程
  • 图解大数据 | Spark 机器学习(下)- 建模与超参调优
  • 图解大数据 | Spark GraphFrames:基于图的数据分析开掘

ShowMeAI 系列教程举荐

  • 图解 Python 编程:从入门到精通系列教程
  • 图解数据分析:从入门到精通系列教程
  • 图解 AI 数学根底:从入门到精通系列教程
  • 图解大数据技术:从入门到精通系列教程

正文完
 0