Spark
文章平均质量分 94
我乐了.
这个作者很懒,什么都没留下…
展开
-
如何对 Spark 进行全方位性能调优?
根据课时 11 的内容,第 1 个配置是 Map 端输出的中间结果的缓冲区大小,默认 32K,第二个配置是 Map 端输出的中间结果的文件大小,默认为 48M,该文件还会与其他文件进行合并。对于那种分组统计的任务,可以通过两阶段聚合的方案来解决,首先将数据打上一个随机的键值,并根据键的哈希值进行分发,将数据均匀的分散到多个任务中去,然后在每个任务中按照真实的键值做局部聚合,最后再按照真实的键值分发一次,得到最后的结果,如下图所示,这样,最后一次分发的数据已经是聚合过后的数据,就不会出现数据倾斜的情况。原创 2024-02-15 19:07:20 · 1062 阅读 · 0 评论 -
列式存储:针对查询场景的极致优化
这样就能用尽可能少的存储空间来表达复杂的嵌套数据格式了。ORC 提供 ACID 支持、也提供不同级别的索引,如布隆过滤器、列统计信息(数量、最值等),和 Parquet 一样,它也是自描述的数据格式,但与 Parquet 不同的是,ORC 支持多种复杂数据结构,如集合、映射等。在文章中,Dremel 在一开始就指出其面对的是只读的嵌套数据,而嵌套数据属于半结构化数据,例如 JSON、XML,所以 Dremel 的创新之处在于提出了一种支持嵌套数据的列式存储,而如今互联网上的数据又正好多是嵌套结构。原创 2024-02-15 19:06:26 · 782 阅读 · 0 评论 -
如何使用用户自定义函数?
builder"A""B""C""D"else"ERROR"//指定输入的类型//指定中间输出的类型,可指定多个//指定最后输出的类型//初始化中间结果//实现作用在每个分区的结果//合并多个分区的结果//返回最后的结果.builder可以从代码看到 UDAF 的逻辑,还是类似于 MapReduce 的思想,先通过 update 函数处理每个分区,最后再通过 merge 函数汇总结果。原创 2024-02-15 19:05:28 · 807 阅读 · 0 评论 -
如何处理结构化数据:DataFrame 、Dataet和Spark SQL
在实际工作中,使用频率最高的当属 Spark SQL,通常一个大数据处理项目中,70% 的数据处理任务都是由 Spark SQL 完成,它贯穿于数据预处理、数据转换和最后的数据分析。DataFrame 在 Spark 1.3 被引入,它的出现取代了 SchemaRDD,Dataset 最开始在 Spark 1.6 被引入,当时还属于实验性质,在 2.0 版本时正式成为 Spark 的一部分,并且在 Spark 2.0 中,DataFrame API 与 Dataset API 在形式上得到了统一。原创 2024-02-15 19:03:01 · 699 阅读 · 0 评论 -
计算框架的分布式实现:剖析 Spark Shuffle 原理
Spark 在1.5 版本时开始了 Tungsten 计划,也在 1.5.0、 1.5.1、 1.5.2 的时候推出了一种 tungsten-sort 的选项,这是一种成果应用,类似于一种实验,该类型 Shuffle 本质上还是给予排序的 Shuffle,只是用 UnsafeShuffleWriter 进行 Map 任务输出,并采用了要在后面介绍的 BytesToBytesMap 相似的数据结构,把对数据的排序转化为对指针数组的排序,能够基于二进制数据进行操作,对 GC 有了很大提升。原创 2024-02-15 19:00:16 · 586 阅读 · 0 评论 -
共享变量:如何在数据管道中使用中间结果?
Spark 广播机制运作方式是这样的:Driver 将已序列化的数据切分成小块,然后将其存储在自己的块管理器 BlockManager 中,当 Executor 开始运行时,每个 Executor 首先从自己的内部块管理器中试图获取广播变量,如果以前广播过,那么直接使用;在 Spark 作业中,用户编写的高阶函数会在集群中的 Executor 里执行,这些 Executor 可能会用到相同的变量,这些变量被复制到每个 Executor 中,而 Executor 对变量的更新不会传回 Driver。原创 2024-02-15 18:59:18 · 676 阅读 · 0 评论 -
函数式编程思想:你用什么声明,你在声明什么?
定义新运算是小学奥赛的一个考点,也就是说,同学们,只要你小学上过奥数,那么大概率应该是学习过这个内容的,我们来看看。原创 2024-02-15 18:57:52 · 811 阅读 · 0 评论 -
算子:如何构建你的数据管道?
这样设计的原因首先是避免无谓的计算开销,更重要的是 Spark 可以了解所有执行的算子,从而设定并优化执行计划。flatMap 算子的字面意思是“展平”,flatMap 算子的函数 f 的作用是将 T 类型的数据元素转换为元素类型为 U 的集合,如果处理过程到此为止,我们将 RDD_1 的一个分区看成一个集合的话,分区数据结构相当于集合的集合,由于集合的集合是有层次的 你可以理解为一个年级有多个班级,而这种数据结构就不是“平”的,所以 flatMap 算子还做了一个操作:将集合的集合合并为一个集合。原创 2024-02-15 18:56:15 · 536 阅读 · 0 评论 -
Spark 核心数据结构:弹性分布式数据集 RDD
RDD 是 Spark 最核心的数据结构,RDD(Resilient Distributed Dataset)全称为弹性分布式数据集,是 Spark 对数据的核心抽象,也是最关键的抽象,它实质上是一组分布式的 JVM 不可变对象集合,不可变决定了它是只读的,所以 RDD 在经过变换产生新的 RDD 时,(如下图中 A-B),原有 RDD 不会改变。通过第三方库的支持,Spark 几乎能够读取所有的数据源,例如 Elasticsearch,所以你如果要尝试的话,尽量选用 Maven 来管理依赖。原创 2024-02-15 18:54:57 · 671 阅读 · 0 评论 -
Spark 抽象、架构与运行环境
因为在总量不变的情况下,每个 Executor 的资源减少为原来的十分之一,那么 Executor 有可能无法胜任单个计算任务的计算量(或许能,但是完成速度大大降低),这样你就不得不提升分区数来降低每个计算任务的计算量,所以完成作业的总时间有可能保持不变,也有可能还会增加,当然,也有可能降低。在上图中,灰色的方框就是我们所说的分区(partition),它和计算任务是一一对应的,也就是说,有多少个分区,就有多少个计算任务,显然的,一个作业,会有多个计算任务,这也是分布式计算的意义所在,原创 2024-02-15 18:54:06 · 754 阅读 · 0 评论 -
如何选择 Spark 编程语言以及部署 Spark
从下个模块开始,我们就会进入 Spark 的学习中,在正式开始学习 Spark 之前,首先需要选择自己要使用的 Spark 编程语言,了解如何部署 Spark,另外再根据选择搭建一个简单、方便的 Spark 运行环境。原创 2024-02-15 18:52:11 · 603 阅读 · 0 评论 -
解析 Spark 数据处理与分析场景
在讲解具体技术之前,先来谈谈数据处理的场景,以及 Spark 在这些场景与流程中发挥的作用。技术要在特定的场景下才能发挥作用,那么在数据科学与数据工程中,有哪些场景呢,下面来看看这张图:这张图从 3 个维度对目前常见的场景进行了分类,需要说明的是,由于场景这个概念不是一个易于定义且标准化的概念,所以并没有一个严谨且全面的分类方法,如图所示的分类方法并不十分严谨,其中的概念也有重合和交叉,但基本包含了数据处理中的所有场景,重合或者交叉之处会在后面说明。接下来,我们逐个进行分析。原创 2024-02-15 18:51:00 · 631 阅读 · 0 评论 -
如何设计与实现统一资源管理与调度系统
说到调度,就没那么简单了。原创 2024-02-15 18:50:21 · 1008 阅读 · 0 评论 -
Hadoop:集群的操作系统
所以在提到大数据平台的时候,我们要知道它首先是一个分布式系统,换言之底层是由一组计算机构成的,也就是一个集群。很快有公司注意到了这个问题中的商机,其中做的最好的是 Cloudera 和 Hortonworks 这两家公司,它们核心产品就是将上述 Hadoop 生态圈中最常用到的开源组件打包为一个 Hadoop 发行版,Clouera 的叫 CDH,Hortonworks 的叫 HDP,这个发行版中的所有组件不会有兼容性等其他莫名其妙的问题,供用户免费使用,当然也为那些技术实力不强的公司准备了收费版。原创 2024-02-15 18:48:52 · 552 阅读 · 0 评论 -
MapReduce:计算框架和编程模型
但是由于数据量的急剧扩大,相比于刚才的第 2 种情况,背后工程实现的复杂度会成倍增加,当整个数据集的容量和计算量达到 1 台计算机能处理的极限的时候,我们就会想办法把图中方框所代表的数据集分别交给不同的计算机来完成,那么如何调度计算机,如何实现 reduce 过程中不同计算机之间的数据传输等问题,就是 Spark 基于 MapReduce 编程模型的分布式实现,这也是我们常常所说的分布式计算。很多支持函数式编程的语言,对于语言本身自带的集合数据结构,都会提供 map、reduce 算子。原创 2024-02-15 18:47:42 · 637 阅读 · 0 评论