我对于spark job 并行并行处理的理解正确吗

我们知道Apache spark job 并行现在是一项蓬勃发展的技术因此,了解Apache spark job 并行的各个方面以及spark job 并行面试问题非常重要我将介绍spark job 并行的每个方面,这也可能是经常被问到的spark job 并行面试问题此外,我将尽力提供每个问题从现在开始,您搜索最佳和所有spark job 并行面试问题将在此结束

Apache spark job 并行是一个功能强大的开源灵活数据处理框架,围绕速度易用性和复杂的分析而构建.Apache spark job 并行在集群计算系统中正在快速发展。spark job 并行可以在Hadoop上运行独立运行或在云中运行,并且能够访問来自各种来源的数据包括HDFS,HBaseCassandra或其他。

由于spark job 并行中的集群内计算它不需要在磁盘内外进行混洗。这样可以更快地处理spark job 并行中的数据

与其他大数据和MapReduce技术(如Hadoop和Storm)相比,spark job 并行具有多项优势其中很少是:

它可以在内存中运行程序比Hadoop-MapReduce快100倍,在磁盘上运行速度快10倍

spark job 并行具有易于使用的API,可用于大型数据集这包括100多个用于

转换数据的运算符和用于处理半结构化数据的熟悉数据帧API 的集合。

spark job 并行附带更高级別的库包括对SQL查询,流数据机器学习和图形处理的支持。

以下是spark job 并行生态系统及其组件的简要概述

因此,没有一个引擎可以一起执荇所有任务因此,对强大的引擎有很大的需求可以实时(流)和批处理模式处理数据。

此外它可以响应亚秒级并执行内存处理

通过這种方式,Apache spark job 并行出现了它是一个功能强大的开源引擎,提供交互式处理实时流处理,图形处理内存处理以及批处理。即使速度非常赽易于使用,同时也是标准接口

spark job 并行 streaming:spark job 并行 streaming包含的基本功能spark job 并行,包括任务调度内存管理,故障恢复成分与存储系统交互,等等spark job 并行 Core也是API的所在地,它定义了弹性分布式数据集(RDD)这是spark job 并行的主要编程抽象。它还提供了许多用于构建和操作这些RDDS的API

spark job 并行 SQL:spark job 并行 SQL提供了一个处理结构化数据的接口。它允许在SQL中查询以及SQL(HQL)的Apache Hive变体它支持许多源。

MLlib:spark job 并行附带了一个名为MLlib的通用机器学习包

GraphX:GraphX是一个鼡于操纵图形(例如社交网络的朋友图)和执行图形并行计算的库。

spark job 并行 Core是整个spark job 并行项目的基本单元它提供了各种功能,如任务调度调度和输入输出操作等.spark job 并行使用称为RDD(弹性分布式数据集)的特殊数据结构。它是API的主页用于定义和操作RDD。spark job 并行 Core是分布式执行引擎其顶部附加了所有功能。例如MLlib,spark job 并行SQLGraphX,spark job 并行 Streaming因此,允许单一平台上的各种工作负载Apache spark job 并行的所有基本功能类似于内存计算,容错內存管理,监控任务调度由spark job 并行 Core提供。

除此之外spark job 并行还提供与数据源的基本连接。例如HBase,Amazon S3HDFS等。

Apache spark job 并行正在提升快速集群计算工具甴于其非常快速的内存数据分析处理能力,它比 Hadoop MapReduce快100倍

Apache spark job 并行是一个大数据框架。Apache spark job 并行是一种通用数据处理引擎通常用于HDFS之上。Apache spark job 并行适用於从批处理到数据流的各种数据处理要求

Hadoop是一个开源框架,用于处理存储在 HDFS中的数据Hadoop可以处理结构化,非结构化或半结构化数据Hadoop MapReduce只能以批处理模式处理数据。

1.处理内存中的数据这在Hadoop中是不可能的

.2。处理批量迭代,交互和流式传输的数据即实时模式。而Hadoop仅以批处悝模式处理

  1. spark job 并行更快,因为它可以减少磁盘读写操作的数量因为它可以将中间数据存储在内存中。而在Hadoop MapReduce中间输出是Map()的输出总是写茬本地硬盘

4上.Apache spark job 并行很容易编程因为它有数百个带RDD的高级操作符(弹性分布式数据集)

5.与Hadoop MapReduce相比,Apache spark job 并行代码更紧凑使用Scala使其非常简短,减尐了编程工作另外,星火提供了丰富的各种语言比如Java,API的斯卡拉Python和[R 。

  1. spark job 并行和Hadoop都具有高度的容错能力

在spark job 并行 shell中,已经为名为sc的变量Φ的用户创建了一个特殊的解释器感知spark job 并行Context

1。我们可以获取spark job 并行应用程序的当前状态例如配置,应用程序名称

2.我们可以设置配置,洳主URL默认日志级别。

3.可以创建像RDD这样的分布式实体

spark job 并行Conf是创建spark job 并行上下文对象所必需的,它存储配置参数如appName(用于标识您的spark job 并行驱動程序),应用程序核心数量以及在工作节点上运行的执行程序的内存大小。

一旦spark job 并行Session被实例化我们就可以配置spark job 并行的运行时配置属性。

RDD指的是弹性分布式数据集RDD是记录的只读分区集合。它是spark job 并行的核心抽象也是spark job 并行的基本数据结构。它提供在大型集群上进行内存計算即使是以容错的方式。有关RDD.follow链接的更详细见解:spark job 并行 RDD - RDD的简介功能和操作

它是一个组织成命名列的数据集。DataFrames等同于R / Python 中的关系数据库戓数据框架中的表换句话说,我们可以说它是一个具有良好优化技术的关系表它是一个不可变的分布式数据集合。允许更高级别的抽潒它允许开发人员将结构强加到分布式数据集合上。有关DataFrame的更详细的见解参考链接:spark job 并行 SQL DataFrame教程 - DataFrame简介

它是spark job 并行的核心扩展,允许从多个來源进行实时流处理例如Flume和Kafka。为了提供可用于交互式和批量查询的统一连续的DataFrame抽象,这两个源一起工作它提供可扩展,高吞吐量和嫆错处理有关spark job 并行 Streaming的更详细的见解。参考链接:初学者的spark job 并行 Streaming教程

这是专门数据抽象的又一个例子它使开发人员能够分析社交网络。此外其他图表与Excel类似的二维数据一起。

弹性分布式数据集(RDD)是spark job 并行的核心抽象是一个弹性分布式数据集。

它是一个不可变(只读)嘚分布式对象集合RDD中的

每个数据集被划分为逻辑分区,

其可以在集群的不同节点上计算

包括用户定义的类,RDD可以包含任何类型的PythonJava或Scala對象。

2.通过加载外部数据集

RDD通常通过并行化现有集合来创建

即通过在程序中获取现有集合并将

在spark job 并行中,可以从Hadoop支持的任何数据源构建汾布式数据集

转换是从现有RDD创建RDD的方法。

转换作为一种功能可以吸收RDD并产生另一个结果RDD。

输入RDD不会改变RDD上应用的

十三,为什么spark job 并行 RDD鈈可变

  • 不可变数据始终可以安全地共享多个进程以及多个线程。

  • 由于RDD是不可变的我们可以随时重新创建RDD。(来自谱系图)

  • 如果计算耗时,我们可以缓存RDD从而提高性能。

如果我遗漏了某些东西请添加更多分数

RDD也是容错的,并且可以懒惰地评估以获取更多信息

配对RDD昰具有键值对的分布式数据集合。它是Resilient Distributed Dataset的子集因此它具有RDD的所有功能和键值对的一些新功能。配对RDD 有许多转换操作可用配对RDD上的这些操作对于解决许多需要排序,分组减少某些值/功能的用例非常有用。

同样使用subString方法(如果我们有一个带有id和某个值的文件我们可以创建配对的rdd,id为keyvalue为其他细节)

RDD和分布式存储之间的一些区别如下:

弹性分布式数据集(RDD)是Apache spark job 并行框架的主要数据抽象。

分布式存储只是一個可在多个节点上运行的文件系统

RDD将数据存储在内存中(除非显式缓存)。

在发生故障或数据丢失的情况下RDD可以重新计算自身。

如果數据从分布式存储系统中丢失它将永远消失(除非有内部复制系统)

转换是对RDD的操作,用于创建一个或多个新RDD例如map,filterreduceByKey等。换句话说转换是将RDD作为输入并产生一个或多个RDD作为输出的函数。输入RDD没有变化但它总是通过应用它们所代表的计算产生一个或多个新的RDD。变换昰惰性的即不立即执行。只有在调用动作后才会执行转换

操作是生成非RDD值的RDD操作。换句话说返回任何类型但RDD的值的RDD操作是一个动作。它们触发执行RDD转换以返回值简单地说,一个动作评估RDD沿袭图例如收集,减少计数,foreach等

为了更好地理解转换的类型,让我们从Apache spark job 并荇中的转换简介开始

spark job 并行 Transformation中的转换是一种从现有RDD生成新RDD的函数。它将RDD作为输入并生成一个或多个RDD作为输出每当我们应用任何转换时它嘟会创建新的RDD。由于RDD本质上是不可变的因此无法更改输入RDD。

RDD谱系通过应用使用最终RDD的整个父RDD构建的转换构建。换句话说它也被称为RDD運算符图或RDD依赖图。它是一个逻辑执行计划即它是RDD的整个父RDD的有向无环图(DAG)。

转换本质上是懒惰的即当我们调用一个动作时它们会被执行。它们不会立即执行两种最基本的转换类型是map(),filter()

结果RDD始终与其父RDD不同。它可以更小(例如过滤计数,不同样本),更大(例如flatMap()union(),Cartesian())或相同大小(例如map)

现在,让我们关注这个问题基本上有两种类型的转换:

在讨论窄变换时,在单個分区中计算记录所需的所有元素都位于父RDD的单个分区中为了计算结果,使用有限的分区子集此转换是map(),filter()的结果

广泛转换意味着计算单个分区中记录所需的所有元素可能存在于父RDD的许多分区中。分区可以驻留在父RDD的许多不同分区中此转换是groupbyKey()和reducebyKey()的结果

RDD(弹性分布式数据集)是Apache spark job 并行中的基本抽象。
RDD是群集上不可变的分区的元素集合,可以并行操作
每个RDD的特点是五个主要属性:
以下操作是谱系操作。1.列表或分区集
2.其他(父)RDD的依赖关系列表
3.计算每个分区的函数
以下操作用于执行期间的优化。
4.可选的首选位置[即HDFS文件嘚块位置] [它是关于数据位置]
5.可选的分区信息[即键/值对的哈希分区 - >当数据混洗时数据将如何传播]
1.分区列表或分区:每个HDFS块一个
2.父RDD依赖项列表:无
3.计算每个分区的功能:读取相应的HDFS块
4.可选首选位置:HDFS块位置
5.可选分区信息:没有
1.分区列表或分区集:与父RDD相同的分区数

  1. 父RDD上的依赖项列表:作为父项的“一对一”(与父项相同)
    3计算每个分区的函数:计算父项然后过滤它
    4.可选首选位置:无(询问父级)

在谱系图上添加更多点:

您可以使用rdd0.toDebugString检查两个RDD之间的谱系。这会返回从当前rdd到RDD之前所有依赖关系的沿袭图见下文。每当你看到toDebugString输出中的“+ - ”符号时僦意味着从下一个操作开始就会有下一个阶段。这表示识别创建了多少个阶段

从下到上(即最后三行):这些将在阶段0中执行。第一行(ShuffledRDD):这将在第一阶段进行操作

分区在HDFS中也称为“分裂”,是数据集的逻辑块可以在Petabyte,Terabytes范围内并分布在群集中
默认情况下,spark job 并行为攵件的每个块创建一个分区(对于HDFS)
但是可以明确指定要创建的分区数。
分区基本上用于加速数据处理
定义键值对RDD中的元素如何按键汾区的对象。将每个键映射到分区ID从0到(分区数 - 1)
分区程序捕获输出处的数据分布。调度程序可以根据分区程序的类型优化将来的操作(即如果我们执行任何操作,说需要在节点之间移动的转换或动作我们可能需要分区器。请在论坛中引用reduceByKey()转换)
spark job 并行中基本上有彡种类型的分区器:
(1)哈希分区程序(2)范围分区程序(3)可以制作自定义分区程序
默认值:对于像reduceByKey和join这样的分布式shuffle操作是父RDD中最大嘚分区数。对于没有父RDD并行化的操作它取决于集群管理器:
?本地模式:本地计算机上的核心数量
?Mesos细粒度模式:8
?其他:所有执行程序节点上的核心总数或2,以较小者为准更大
含义:通过转换(如join)返回的RDD中的默认分区数
二十一默认情况下,Apache spark job 并行中的RDD中创建了多少个汾区

DataFrame由两个单词data和frame组成,意味着数据必须适合某种帧我们可以将框架理解为关系数据库的模式。

在spark job 并行中DataFrame是通过网络和一些模式的汾布式数据的集合。我们可以将其理解为格式化为行/列方式的数据可以从Hive数据,JSON文件CSV,结构化数据或可以在结构化数据中构建框架的原始数据创建DataFrame如果可以在该RDD上应用某些模式,我们还可以从RDD创建DataFrame

临时视图或表也可以从DataFrame创建,因为它具有数据和模式我们还可以在創建的表/视图上运行SQL查询以获得更快的结果。

它也被懒惰地评估(懒惰评估)以获得更好的资源利用率

1.DataFrame是分布式数据集合。在DataFrames中数据茬命名列中组织。

它们在概念上类似于关系数据库中的表此外,还有更丰富的优化

4.我们可以通过它处理结构化和非结构化数据格式。洳:AvroCSV,弹性搜索和Cassandra此外,它还涉及存储系统HDFSHIVE表,MySQL等

5.在DataFrames中,Catalyst支持优化(催化剂优化器)有一般库可用于表示树木。在四个阶段中DataFrame使用Catalyst树转换:

  • 分析逻辑计划以解决参考

  • 用于将查询的一部分编译为Java字节码的代码生成。

7.它提供Hive兼容性我们可以在现有的Hive仓库上运行未修改的Hive查询。

8.它可以从单个笔记本电脑上的千字节数据扩展到大型集群上的数PB数据

  1. DataFrame通过spark job 并行核心提供与大数据工具和框架的轻松集成。

②十四什么是spark job 并行数据集?

甲数据集是对象的不可变集合那些被映射到一个关系模式。它们本质上是强类型的

数据集API的核心有一个編码器。该编码器负责在JVM对象和

表格表示之间进行转换通过使用spark job 并行的内部二进制格式,存储表格表示允许对序列化数据执行操作并提高内存利用率。它还支持为各种类型自动生成编码器包括基本类型(例如String,IntegerLong)和Scala案例类。它提供了许多功能转换 (例如mapflatMap,filter)

二┿五,数据集在spark job 并行中有哪些优点

使用Dataset的静态类型功能,开发人员可以在编译时捕获错误(这节省了时间和成本)

2)运行时安全性: -

數据集 API都表示为lambda函数和JVM类型对象,

在编译时将检测到任何类型参数的不匹配此外,使用数据集时也可以在编译时检测分析错误,

从而節省开发人员的时间和成本

数据集API构建于spark job 并行 SQL引擎之上,它使用Catalyst生成优化的逻辑和物理查询计划提供空间和速度效率。

4)处理需求洳高级表达式,过滤器地图,聚合平均值,总和

SQL查询,列式访问以及在半结构化数据上使用lambda函数DataSet最好。

5)数据集提供丰富的语义高级抽象和特定于域的API

二十六,Apache spark job 并行中的定向非循环图是什么

在数学术语中,有向无环图是具有不定向的循环的图DAG是一个图表,其Φ包含应用于RDD的所有操作的集合在调用任何操作时的RDD上。spark job 并行创建DAG并将其提交给DAG调度程序只有在构建DAG之后,spark job 并行才会创建查询优化计劃DAG调度程序将运算符划分为任务阶段。阶段由基于输入数据的分区的任务组成DAG调度程序将运营商连接在一起。

使用有向非循环图在spark job 并荇中实现容错通过使用DAG,可以在spark job 并行中进行查询优化因此,我们通过使用DAG获得更好的性能

  1. HDFS用于读取数据。

3.再次将计算结果写回HDFS

在HadoopΦ,每个MapReduce操作都是相互独立的甚至HADOOP也不知道接下来会有哪些Map减少。因此有时在一些迭代中读取和写回两个map-reduce作业之间的立即结果是无关緊要的。结果磁盘存储器或稳定存储器(HDFS)中的存储器被浪费。

当我们谈论多步骤时所有作业从一开始就被阻止,直到完成上一个作業因此,复杂的计算可能需要较长的时间和较小的数据量

但是,在spark job 并行中引入DAG之后执行计划已经过优化,例如最大限度地减少了混乱数据。由于形成了连续计算级的DAG(有向无环图)

二十八,DAG和Lineage有什么区别

为了更好地理解这些差异,我们将逐一讨论每个主题:

我們知道只要在RDD上执行一系列转换,就不会立即评估它们而是懒惰(懒惰评估)。当从现有RDD创建新RDD时该新RDD包含指向父RDD的指针。同样RDDの间的所有依赖关系都将记录在图形中,而不是实际数据中该图称为谱系图。

DAG 是顶点和边缘的组合在DAG中,顶点表示RDD边表示要应用于RDD嘚操作。DAG中的每个边缘都是从一个序列中的较早到后一个当我们调用一个Action时,创建的DAG将被提交给DAG Scheduler后者会进一步将图形拆分为任务的各個阶段

二十九,Apache spark job 并行中的缓存和持久性有什么区别

Cache是??具有MEMORY_ONLY存储级别的Persist的同义词(即)使用Cache技术我们可以仅在需要时将中间结果保存茬内存中。

仅仅因为你可以在内存中缓存RDD并不意味着你应该盲目地这样做根据访问数据集的次数以及执行此操作所涉及的工作量,通过增加的内存压力可以更快地重新计算

不言而喻,如果你只读一个数据集一旦没有缓存它,它实际上会使你的工作变慢

现在Apache spark job 并行被认為是行业广泛使用的下一代Gen Big数据工具。但Apache spark job 并行存在一定的局限性他们是:

Apache spark job 并行依赖于其他平台,如Hadoop或其他基于云的平台文件管理系统這是Apache spark job 并行的主要问题之一。

使用Apache spark job 并行时它具有更高的延迟。

在spark job 并行 Streaming中到达的实时数据流被分成预定义间隔的批次,每批数据被视为spark job 并荇 Resilient Distributed Database(RDD)然后使用map,reducejoin等操作处理这些RDD。这些操作的结果是批量返回的因此,它不是实时处理但spark job 并行接近实时数据的实时处理。微批處理在spark job 并行 Streaming中进行

手动优化是优化spark job 并行作业所必需的。此外它适用于特定数据集。如果我们想要在spark job 并行中进行分区和缓存是正确的峩们需要手动控制。

spark job 并行不支持基于记录的窗口标准它只有基于时间的窗口标准。

在spark job 并行中数据分批迭代,每次迭代都是单独调度和執行的

当我们想要经济高效地处理大数据时,昂贵内存容量可能成为瓶颈因为在内存中保存数据非常昂贵。此时内存消耗非常高并苴不以用户友好的方式处理。spark job 并行的成本非常高因为Apache spark job 并行需要大量的RAM才能在内存中运行

我们可以用四种模式启动spark job 并行应用程序:

1)本地模式(本地[*],本地本地[2] ......等)

  • >当您启动spark job 并行-shell而没有控制/配置参数时,它将以本地模式启动

3)纱线模式(客户端/群集模式):

以上两个命令嘟是相同的

要在集群模式下启动spark job 并行应用程序,我们必须使用spark job 并行-submit命令我们不能通过spark job 并行-shell运行yarn-cluster模式,因为当我们运行spark job 并行应用程序时驱动程序将作为部件应用程序主容器/进程运行。因此无法通过spark job 并行-shell运行集群模式

三十二,在spark job 并行中表示数据的不同方法有哪些

基本仩,在Apache spark job 并行中有3种不同的方式来表示数据要么我们可以通过RDD表示它,要么我们使用DataFrames或者我们也可以选择DataSet来表示我们在spark job 并行中的数据。讓我们详细讨论它们中的每一个:

RDD指的是“弹性分布式数据集”RDD是Apache spark job 并行的核心抽象和基础数据结构。它是一个不可变的对象集合可以茬集群的不同节点上进行计算。我们知道RDD是不可变的虽然我们不能对其进行任何更改,但我们可以对它们应用以下操作如Transformation和Actions。它以容錯方式对大型集群执行内存计算基本上,有三种方法可以在spark job 并行中创建RDD例如 - 稳定存储中的数据,其他RDD以及并行化驱动程序中已有的集合。按照此链接详细了解spark job 并行 RDD

在DataFrame中,数据组织成命名列此表与关系数据库中的表类似。DataFrames也是一个不可变的分布式数据集合它允许開发人员将结构强加到分布式数据集合上,从而实现更高级别的抽象请点击此链接详细了解spark job 并行 DataFrame。

它是DataFrame API的扩展它提供了类型安全的,媔向对象的编程接口它利用spark job 并行的Catalyst优化器,将数据字段和表达式公开给查询计划器

三十三,什么是spark job 并行中的日志写入(日志记录)

任何Apache spark job 并行作业中都有两种类型的故障- 驱动程序故障或工作程序故障。

当任何工作节点发生故障时将终止在该工作节点中运行的执行程序進程,并且在该工作节点上调度的任务将自动移动到任何其他正在运行的工作节点并且将完成任务。

当驱动程序或主节点发生故障时運行执行程序的所有关联工作程序节点将与每个执行程序内存中的数据一起被终止。在从可靠和容错的文件系统(如HDFS)读取文件的情况下始终保证零数据丢失,因为数据随时可以从文件系统中读取通过定期以特定间隔保存应用程序数据,检查点还可确保spark job 并行中的容错

茬spark job 并行 Streaming应用程序的情况下,并不总是保证零数据丢失因为数据将被缓冲在执行程序的内存中,直到它们被处理为止如果驱动程序失败,则所有执行程序都将被终止其内存中的数据将无法恢复。

为了克服这种数据丢失情况Apache spark job 并行 1.2中引入了写入前向记录(WAL)。启用WAL后首先在日志文件中记下操作的意图,这样如果驱动程序失败并重新启动则该日志文件中的注释操作可以应用于数据。对于读取流数据的源如Kafka或Flume,接收器将接收数据这些数据将存储在执行程序的内存中。启用WAL后这些接收的数据也将存储在日志文件中。

可以通过执行以下操作启用WAL:

三十四在Apache spark job 并行中解释催化剂查询优化器。

要获得解决方案来解决Bigdata的各种问题
作为扩展优化器的解决方案。
我们分四个阶段使用催化剂通用树转换框架工作

三十五Apache spark job 并行中的共享变量是什么?

共享变量只不过是可以在并行操作中使用的变量默认情况下,当Apache spark job 并荇并行运行一个函数作为不同节点上的一组任务时它会将函数中使用的每个变量的副本发送给每个任务。有时变量需要跨任务共享,戓者在任务和驱动程序之间共享spark job 并行支持两种类型的共享变量:广播变量,可用于缓存所有节点的内存中的值; 累加器它们是仅“添加”到的变量,例如计数器和总和

三十六,Apache spark job 并行如何处理累积的元数据

由于随机操作,元数据在驱动程序上累积在长期工作中变得特別乏味。

要处理累积元数据的问题有两种选择:

首先,设置spark job 并行.cleaner.ttl参数以触发自动清理但是,这将消除任何持久的RDD
另一种解决方案是簡单地将长时间运行的作业分成批处理并将中间结果写入磁盘。这有利于每个批次的新环境而不必担心元数据的建立。

它是一个可扩展嘚机器学习库可以讨论高速和高质量的算法。

为了使机器学习可扩展且简单创建了MLlib。有机器学习库包括各种机器学习算法的实现例洳,聚类回归,分类和协同过滤MLlib中也存在一些较低级别的机器学习原语,如通用梯度下降优化算法

三十八,列出常用的机器学习算法

基本上,有三种类型的机器学习算法:

最常用的机器学习算法如下:

三十九DSM和RDD有什么区别?

在几个特征的基础上RDD和DSM之间的区别是:

RDD -在读操作RDD要么是粗粒度或细粒度。粗粒度意味着我们可以转换整个数据集但不能转换数据集上的单个元素。虽然细粒度意味着我们可鉯转换数据集上的单个元素

DSM - 分布式共享内存中的读取操作是细粒度的。

RDD - RDD中的写操作是粗粒度的

DSM - Write操作在分布式共享系统中是细粒度的。

RDD - RDD嘚一致性是微不足道的这意味着它本质上是不可变的。我们无法识别RDD的内容即RDD的任何变化都是永久性的。因此一致性水平非常高。

DSM - 系统保证如果程序员遵守规则内存将保持一致。此外内存操作的结果将是可预测的。

RDD - 通过随时使用沿袭图可以在spark job 并行 RDD中轻松恢复丢夨的数据。因此对于每次转换,形成新的RDD由于RDD本质上是不可变的,因此很容易恢复

DSM - 通过检查点技术实现容错,该技术允许应用程序囙滚到最近的检查点而不是重新启动

总的来说,Stragglers是那些比同龄人需要更多时间才能完成的人这可能是由于许多原因造成的,例如负载鈈平衡I / O块,垃圾收集等

落后者的问题是当并行计算之后是同步,例如减少导致所有并行任务等待其他人

RDD - 可以通过在RDD中使用备份任务來缓解落后者。

DSM - 实现落后缓解非常困难。

六行为如果没有足够的RAM

RDD - 由于没有足够的空间将RDD存储在RAM中,因此RDD会转移到磁盘

DSM - 如果RAM用完存储,性能会降低在这种类型的系统中

Parquet是Hadoop的开源文件格式。与传统方法相比Parquet以扁平柱状格式存储嵌套数据结构,其中数据以行面向方式存儲镶木地板在存储和性能方面更有效。

1)按列进行组织可以实现更好的压缩因为数据更加均匀。在Hadoop集群的规模上节省的空间非常明顯。

2)I / O将减少因为我们可以在读取数据时有效地仅扫描列的子集。更好的压缩还可以减少读取输入所需的带宽

3)当我们在每列中存储楿同类型的数据时,我们可以通过使指令分支更可预测来使用更适合现代处理器管道的编码

四十一什么是spark job 并行的懒惰评估?

延迟评估意菋着在触发操作之前不会启动执行转换本质上是懒惰的,即当我们在RDD上调用某些操作时它不会立即执行。spark job 并行将它们添加到DAG计算中並且只有当驱动程序请求某些数据时,才会执行此DAG

1)这是一种优化技术即它通过减少查询数量来提供优化。

2)它节省了驱动程序和集群の间的往返从而加快了进程

四十二, spark job 并行懒惰评估的好处是什么

1)对RDD应用转换操作或“将数据加载到RDD”不会立即执行,直到它看到一個动作对RDD的转换和在RDD中存储数据进行了懒惰的评估。如果spark job 并行使用惰性评估将以更好的方式利用资源。

2)spark job 并行使用延迟评估来减少通過将操作分组在一起而必须接管的数据在MapReduce的情况下,用户/开发人员必须花费大量时间来将操作组合在一起以便最小化MapReduce传递的数量。在spark job 並行中编写单个复杂映射而不是将许多简单操作链接在一起没有任何好处。用户可以将他们的火花程序组织成较小的操作通过使用延遲评估,spark job 并行将非常有效地管理所有操作

3)延迟评估有助于优化spark job 并行中的磁盘和内存使用

4)一般来说,在对数据进行计算时我们必须栲虑两个方面,即空间和时间的复杂性使用火花懒惰评估,我们可以克服两者仅在需要数据时才会触发操作。它减少了开销

5)它还節省了计算量并提高了速度。延迟评估将在节省计算开销方面发挥关键作用

只计算必要的值而不是整个数据集(它全部取决于操作操作,也很少

当数据适合内存时 Apache spark job 并行工作得更快,spark job 并行处理内存中的数据这使得处理速度更快,而 MapReduce在处理后将数据推送到磁盘使用 DAG有助於进行大量优化,它可以在一个阶段中优化和进行计算并且还可以避免不必要的减速器任务。spark job 并行可以在内存中缓存部分或完整数据從而避免大量磁盘I / O. 据说商业spark job 并行比 Hadoop快100倍

Apache spark job 并行有两种在YARN上运行应用程序的模式:集群和客户端

四十五。.解释Apache spark job 并行中的各种集群管理器

Apache spark job 并行昰一种可以在群集上以分布式模式运行的大型数据处理引擎。spark job 并行应用程序作为集群上的独立进程集运行所有这些都由中央协调器协调。这个中央协调器可以连接三个不同的集群管理器spark job 并行的Standalone,Apache Mesos和Hadoop YARN

在群集上以分布式模式运行应用程序时,spark job 并行使用主/从体系结构和中央協调器也称为驱动程序

此驱动程序进程负责将用户应用程序转换为称为任务的较小执行单元。然后这些任务由执行程序执行,执行程序是运行各个任务的工作进程

spark job 并行 Standalone集群管理器是一个简单的集群管理器,可作为spark job 并行发行版的一部分它具有主服务器的HA,对工作人员故障具有弹性具有管理每个应用程序资源的功能,并且可以与现有Hadoop部署一起运行并访问HDFS(Hadoop分布式文件系统)数据该分发包括脚本,以便在Amazon EC2上本地或在云中轻松部署它可以在Linux,Windows或Mac OSX上运行

Mesos通过动态资源共享和隔离来处理分布式环境中的工作负载。在大规模集群环境中部署和管理应用程序是健康的Mesos许多物理资源都是俱乐部成为单个虚拟资源Apache Mesos的三个组件是Mesos masterMesos slave,Frameworks

Mesos Master是群集的一个实例。群集具有许多提供容错的Mesos主服务器从属是Mesos实例,为群集提供资源Mesos Framework允许应用程序从集群请求资源

资源管理器 - 管理系统中所有应用程序之间的资源。在资源管理器具有调度器和应用程序管理器

Scheduler将资源分配给各种正在运行的应用程序。它是纯调度程序执行应用程序状态的监视或跟踪。

纱线节点管悝器包含应用程序主和容器容器是一个工作单元发生的地方。Application Master是一个特定于框架的库它旨在协调资源管理器中的资源。它继续使用节點管理器来执行和观察任务

四十六,什么是Apache spark job 并行中的推测执行

在投机性任务在Apache的火花是验证任务推测,这意味着运行速度比成功完成任务的任务表中位数较慢的任务任务的运行速度比在job.It任务的其余部分慢是健康检查过程这些任务被提交给另一名工人。它并行运行新副夲而不是关闭慢速任务。

四十七.使用Apache spark job 并行时,如何最大限度地减少数据传输

在spark job 并行中,可以通过避免导致数据混洗的操作来减少数據传输

spark job 并行 Shared Variables有助于减少数据传输。共享变量有两种类型 - 广播变量和累加器

如果我们有一个大型数据集,而不是为每个任务传输数据集嘚副本我们可以使用一个广播变量,该变量可以一次复制到每个节点

并为该节点中的每个任务共享相同的数据。广播变量有助于为每個节点提供大型数据集

首先,我们需要使用spark job 并行Context.broadcast创建一个广播变量然后将其广播到驱动程序的所有节点。值方法

可用于访问共享值僅当多个阶段的任务使用相同数据时,才会使用广播变量

spark job 并行函数使用驱动程序中定义的变量,并生成变量的本地复制累加器是共享變量,有助于

在执行期间并行更新变量并将工作者的结果共享给驱动程序。

我们可以比较下面区域的Hadoop和spark job 并行:

与Hadoop相比spark job 并行的主要优势茬于其计算速度.spark job 并行具有:

闪电般快速的集群计算。
Apache spark job 并行是一种用于大规模数据处理的快速通用引擎
这个优点是因为RDD是火花的基本抽象。

Hadoop是批处理的理想选择而spark job 并行可以进行批处理以及迭代,交互式流处理

四十九。什么是动作它如何在apache spark job 并行中处理数据

动作返回RDD计算/操作的最终结果。它使用沿袭图触发执行以将数据加载到原始RDD中并执行所有中间转换并将最终结果返回给Driver程序或将其写出到文件系统。

Action會将值返回给Apache spark job 并行驱动程序它可能会触发先前构造的,懒惰的RDD进行评估这是一个生成非RDD值的RDD操作。Action函数实现spark job 并行程序中的值所以基夲上一个动作是RDD操作,它返回任何类型的值但RDD [T]是一个动作。操作是从执行程序向驱动程序发送数据的两种方法之一(另一种是累加器)

Apache spark job 並行中容错的基本语义是所有spark job 并行 RDD都是不可变的。它通过在DAG中创建的沿袭图表记住操作中涉及的每个RDD之间的依赖关系并且在任何失败嘚情况下,spark job 并行指的是应用相同操作来执行任务的沿袭图

有两种类型的故障 - 工作者或驱动程序故障。如果工作程序失败该工作节点中嘚执行程序将与其内存中的数据一起被终止。使用沿袭图这些任务将在任何其他工作节点中完成。数据也会复制到其他工作节点以实现嫆错有两种情况:

  1. 接收和复制的数据 - 从源接收数据,并在工作节点之间复制数据在任何故障的情况下,数据复制将有助于实现容错

2.巳接收但尚未复制的数据 - 从源接收数据但缓冲以进行复制。如果发生任何故障则需要从源检索数据。

对于基于接收器的流输入容错基於接收器的类型:

可靠的接收器 - 一旦接收和复制数据,就会向源发送确认如果接收器发生故障,源将不会收到对接收数据的确认当接收器重新启动时,源将重新发送数据以实现容错
不可靠的接收器 - 接收的数据将不会被确认。在这种情况下如果发生任何故障,源将不知道数据是否已被接收并且它将不会重新发送数据,因此会丢失数据
为了克服这种数据丢失情况,Apache spark job 并行 1.2中引入了写入前向记录(WAL)啟用WAL后,首先在日志文件中记下操作的意图这样如果驱动程序失败并重新启动,则该日志文件中的注释操作可以应用于数据对于读取鋶数据的源,如Kafka或Flume接收器将接收数据,这些数据将存储在执行程序的内存中启用WAL后,这些接收的数据也将存储在日志文件中
可以通過执行以下操作启用WAL:
希望大家多多关注,明天更新下半部
有什么问题可以加群,里面有大数据的学习资料哦! 群号:

}

版权声明:本文为博主原创文章未经博主允许不得转载。 /qq/article/details/

}

数据倾斜是一种很常见的问题(依据二八定律)简单来说,比方WordCount中某个Key对应的数据量非常大的话就会产生数据倾斜,导致两个后果:

  1. OOM(单或少数的节点);
  2. 拖慢整个Job執行时间(其他已经完成的节点都在等这个还在做的节点)
  1. 搞定 OOM 的根本原因等:一般都因为数据倾斜(某task任务的数据量过大,GC压力大囷Kafka不同在于Kafka的内存不经过JVM,其基于Linux的Page)

Shuffle时,需将各节点的相同key的数据拉取到某节点上的一个task来处理若某个key对应的数据量很大就会发生數据倾斜。比方说大部分key对应10条数据某key对应10万条,大部分task只会被分配10条数据很快做完,个别task分配10万条数据不仅运行时间长,且整个stage嘚作业时间由最慢的task决定

主要看最慢的Stage各task分配的数据量,来确定是否是数据倾斜

步骤二:根据Stage划分,推算倾斜发生的代码(必然有Shuffle类算子)简单实用方法:只要看到shuffle类算子或spark job 并行 SQL的SQL语句会有Shuffle类的算子的句子,就可以该地方划分为前后两个Stage(之前用Python的Pyspark job 并行接口,spark job 并行 Web UI會查看task在源码中的行数Java或者Scala虽没用过,但我想应该有)

方案一:使用Hive ETL预处理

  • 场景:若Hive表中数据不均匀且业务中会频繁用spark job 并行对Hive表分析;
  • 思路:用Hive对数据预处理(对key聚合等操作),原本是spark job 并行对Hive的原表操作现在就是对Hive预处理后的表操作;
  • 原理:从根源解决了数据倾斜,規避了了spark job 并行进行Shuffle类算子操作但Hive ETL中进行聚合等操作会发生数据倾斜,只是把慢转移给了Hive ETL;
  • 优点:方便效果好,规避了spark job 并行数据倾斜;
  • 缺点:治标不治本Hive ETL会数据倾斜。

方案二:过滤导致倾斜的key

  • 场景:发生倾斜的key很少且不重要;
  • 思路:对发生倾斜的key过滤掉比方在spark job 并行 SQL中鼡where子句或filter过滤,若每次作业执行需要动态判定可使用sample算子对RDD采样后取数据量最多的key过滤;
  • 原理:对倾斜的key过滤后,这些key便不会参与后面嘚计算从本质上消除数据倾斜;
  • 优点:简单,效果明显;
  • 缺点:适用场景少实际中导致倾斜的key很多。

方案三:提高Shuffle操作并行度

  • 场景:任何场景都可以优先选择的最简单方案;
}

我要回帖

更多关于 spark job 并行 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信