溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

2018年前100名Apache Spark面試問(wèn)題和解答(上)

發(fā)布時(shí)間:2020-04-05 13:19:32 來(lái)源:網(wǎng)絡(luò) 閱讀:13460 作者:wx5b850d01da0c3 欄目:大數(shù)據(jù)

我們知道Apache Spark現(xiàn)在是一項(xiàng)蓬勃發(fā)展的技術(shù)。因此,了解Apache Spark的各個(gè)方面以及Spark面試問(wèn)題非常重要。我將介紹Spark的每個(gè)方面,這也可能是經(jīng)常被問(wèn)到的Spark面試問(wèn)題。此外,我將盡力提供每個(gè)問(wèn)題,從現(xiàn)在開(kāi)始,您搜索最佳和所有Spark面試問(wèn)題將在此結(jié)束。

Apache Spark面試問(wèn)題答案

一,什么是Apache Spark?

Apache Spark是一個(gè)功能強(qiáng)大的開(kāi)源靈活數(shù)據(jù)處理框架,圍繞速度,易用性和復(fù)雜的分析而構(gòu)建.Apache Spark在集群計(jì)算系統(tǒng)中正在快速發(fā)展。Spark可以在Hadoop上運(yùn)行,獨(dú)立運(yùn)行或在云中運(yùn)行,并且能夠訪(fǎng)問(wèn)來(lái)自各種來(lái)源的數(shù)據(jù),包括HDFS,HBase,Cassandra或其他。

由于Spark中的集群內(nèi)計(jì)算,它不需要在磁盤(pán)內(nèi)外進(jìn)行混洗。這樣可以更快地處理spark中的數(shù)據(jù)。

與其他大數(shù)據(jù)和MapReduce技術(shù)(如Hadoop和Storm)相比,Spark具有多項(xiàng)優(yōu)勢(shì)。其中很少是:

1.Speed

它可以在內(nèi)存中運(yùn)行程序比Hadoop-MapReduce快100倍,在磁盤(pán)上運(yùn)行速度快10倍。

2.易用性

Spark具有易于使用的API,可用于大型數(shù)據(jù)集。這包括100多個(gè)用于

轉(zhuǎn)換數(shù)據(jù)的運(yùn)算符和用于處理半結(jié)構(gòu)化數(shù)據(jù)的熟悉數(shù)據(jù)幀API 的集合。

我們可以用Java,Scala,Python,R編寫(xiě)應(yīng)用程序。

  1. Unified Engine

Spark附帶更高級(jí)別的庫(kù),包括對(duì)SQL查詢(xún),流數(shù)據(jù),機(jī)器學(xué)習(xí)和圖形處理的支持。

4.Runs Everywhere

Spark可以在Hadoop,Mesos,獨(dú)立或云端運(yùn)行。

Spark生態(tài)系統(tǒng)

以下是Spark生態(tài)系統(tǒng)及其組件的簡(jiǎn)要概述。

它包括:

Spark Streaming: Spark Streaming用于處理實(shí)時(shí)流數(shù)據(jù)。

Spark SQL: Spark SQL組件是一個(gè)位于Spark集群之上的庫(kù),通過(guò)使用我們可以在Spark數(shù)據(jù)上運(yùn)行SQL查詢(xún)。

Spark MLlib: MLlib是Spark的可擴(kuò)展機(jī)器學(xué)習(xí)庫(kù)。

Spark GraphX: GraphX用于圖形和圖形并行計(jì)算。

二.為何選擇Apache Spark?

基本上,我們有很多通用的集群計(jì)算工具。例如Hadoop MapReduce,Apache Storm,Apache Impala,Apache Storm,Apache Giraph等等。但每個(gè)人的功能也有一些限制。如:

  1. Hadoop MapReduce只允許批量處理。

2.如果我們談?wù)摿魈幚?,只有Apache Storm / S4可以執(zhí)行。

3.再次進(jìn)行交互式處理,我們需要Apache Impala / Apache Tez。

4.雖然我們需要執(zhí)行圖形處理,但我們選擇Neo4j / Apache Giraph。

因此,沒(méi)有一個(gè)引擎可以一起執(zhí)行所有任務(wù)。因此,對(duì)強(qiáng)大的引擎有很大的需求,可以實(shí)時(shí)(流)和批處理模式處理數(shù)據(jù)。

此外,它可以響應(yīng)亞秒級(jí)并執(zhí)行內(nèi)存處理

通過(guò)這種方式,Apache Spark出現(xiàn)了。它是一個(gè)功能強(qiáng)大的開(kāi)源引擎,提供交互式處理,實(shí)時(shí)流處理,圖形處理,內(nèi)存處理以及批處理。即使速度非???,易于使用,同時(shí)也是標(biāo)準(zhǔn)接口。

三. Apache Spark Ecosystem的組件是什么?

Apache spark由以下組件組成:

1.Spark Core

2.Spark SQL

3.Spark Streaming

4.MLlib

5.GraphX

spark streaming:spark streaming包含的基本功能spark,包括任務(wù)調(diào)度,內(nèi)存管理,故障恢復(fù)成分,與存儲(chǔ)系統(tǒng)交互,等等。Spark Core也是API的所在地,它定義了彈性分布式數(shù)據(jù)集(RDD),這是Spark的主要編程抽象。它還提供了許多用于構(gòu)建和操作這些RDDS的API。

Spark SQL:Spark SQL提供了一個(gè)處理結(jié)構(gòu)化數(shù)據(jù)的接口。它允許在SQL中查詢(xún)以及SQL(HQL)的Apache Hive變體。它支持許多源。

Spark Streaming:Spark組件,可以處理實(shí)時(shí)數(shù)據(jù)流。

MLlib:Spark附帶了一個(gè)名為MLlib的通用機(jī)器學(xué)習(xí)包

GraphX:GraphX是一個(gè)用于操縱圖形(例如,社交網(wǎng)絡(luò)的朋友圖)和執(zhí)行圖形并行計(jì)算的庫(kù)。

四,.什么是Spark Core?

Spark Core是整個(gè)Spark項(xiàng)目的基本單元。它提供了各種功能,如任務(wù)調(diào)度,調(diào)度和輸入輸出操作等.Spark使用稱(chēng)為RDD(彈性分布式數(shù)據(jù)集)的特殊數(shù)據(jù)結(jié)構(gòu)。它是API的主頁(yè),用于定義和操作RDD。Spark Core是分布式執(zhí)行引擎,其頂部附加了所有功能。例如,MLlib,SparkSQL,GraphX,Spark Streaming。因此,允許單一平臺(tái)上的各種工作負(fù)載。Apache Spark的所有基本功能類(lèi)似于內(nèi)存計(jì)算,容錯(cuò),內(nèi)存管理,監(jiān)控,任務(wù)調(diào)度由Spark Core提供。

除此之外,Spark還提供與數(shù)據(jù)源的基本連接。例如,HBase,Amazon S3,HDFS等。

五,Apache Spark支持哪些語(yǔ)言?

Apache Spark是用Scala語(yǔ)言編寫(xiě)的。Spark在Scala,Python和Java中提供了一個(gè)API,以便與Spark進(jìn)行交互。它還提供R語(yǔ)言的API。

六,Apache Spark如何比Hadoop更好?

Apache Spark正在提升快速集群計(jì)算工具。由于其非??焖俚膬?nèi)存數(shù)據(jù)分析處理能力,它比 Hadoop MapReduce快100倍。

Apache Spark是一個(gè)大數(shù)據(jù)框架。Apache Spark是一種通用數(shù)據(jù)處理引擎,通常用于HDFS之上。Apache Spark適用于從批處理到數(shù)據(jù)流的各種數(shù)據(jù)處理要求。

Hadoop是一個(gè)開(kāi)源框架,用于處理存儲(chǔ)在 HDFS中的數(shù)據(jù)。Hadoop可以處理結(jié)構(gòu)化,非結(jié)構(gòu)化或半結(jié)構(gòu)化數(shù)據(jù)。Hadoop MapReduce只能以批處理模式處理數(shù)據(jù)。

在許多情況下,Apache Spark超過(guò)Hadoop,例如

1.處理內(nèi)存中的數(shù)據(jù),這在Hadoop中是不可能的

.2。處理批量,迭代,交互和流式傳輸?shù)臄?shù)據(jù),即實(shí)時(shí)模式。而Hadoop僅以批處理模式處理。

  1. Spark更快,因?yàn)樗梢詼p少磁盤(pán)讀寫(xiě)操作的數(shù)量,因?yàn)樗梢詫⒅虚g數(shù)據(jù)存儲(chǔ)在內(nèi)存中。而在Hadoop MapReduce中間輸出是Map()的輸出總是寫(xiě)在本地硬盤(pán)

4上.Apache Spark很容易編程,因?yàn)樗袛?shù)百個(gè)帶RDD的高級(jí)操作符(彈性分布式數(shù)據(jù)集)

5.與Hadoop MapReduce相比,Apache Spark代碼更緊湊。使用Scala使其非常簡(jiǎn)短,減少了編程工作。另外,星火提供了豐富的各種語(yǔ)言,比如Java,API的斯卡拉,Python和[R 。

  1. Spark和Hadoop都具有高度的容錯(cuò)能力。

7.在Hadoop集群中運(yùn)行的Spark應(yīng)用程序在磁盤(pán)上的速度比Hadoop MapReduce快10倍。

七,在Apache Hadoop上運(yùn)行Spark有哪些不同的方法?

而不是MapReduce,我們可以在Hadoop生態(tài)系統(tǒng)上使用spark -spark with HDFS 你可以在HDFS中讀取和寫(xiě)入數(shù)據(jù) -spark with Hive 你可以讀取和分析并寫(xiě)回到hive

八,Apache Spark中的SparkContext是什么?

SparkContext是Spark執(zhí)行環(huán)境的客戶(hù)端,它充當(dāng)Spark應(yīng)用程序的主服務(wù)器。SparkContext設(shè)置內(nèi)部服務(wù)并建立與Spark執(zhí)行環(huán)境的連接。您可以在創(chuàng)建SparkContext之后創(chuàng)建RDD,累加器和廣播變量,訪(fǎng)問(wèn)Spark服務(wù)并運(yùn)行作業(yè)(直到SparkContext停止)。每個(gè)JVM只能激活一個(gè)SparkContext。您必須在創(chuàng)建新的SparkContext之前停止()活動(dòng)的SparkContext。

在Spark shell中,已經(jīng)為名為sc的變量中的用戶(hù)創(chuàng)建了一個(gè)特殊的解釋器感知SparkContext。

任何Spark驅(qū)動(dòng)程序應(yīng)用程序的第一步是創(chuàng)建SparkContext。SparkContext允許Spark驅(qū)動(dòng)程序應(yīng)用程序通過(guò)資源管理器訪(fǎng)問(wèn)集群。資源管理器可以是YARN,也可以是Spark的Cluster Manager。

SparkContext提供的功能很少:

1。我們可以獲取Spark應(yīng)用程序的當(dāng)前狀態(tài),例如配置,應(yīng)用程序名稱(chēng)。

2.我們可以設(shè)置配置,如主URL,默認(rèn)日志級(jí)別。

3.可以創(chuàng)建像RDD這樣的分布式實(shí)體。

九, Apache Spark中的SparkSession是什么?

從Apache Spark 2.0開(kāi)始,Spark Session是Spark應(yīng)用程序的新入口點(diǎn)。

在2.0之前,SparkContext是spark工作的切入點(diǎn)。RDD是當(dāng)時(shí)的主要API之一,它是使用Spark Context創(chuàng)建和操作的。對(duì)于每個(gè)其他API,都需要不同的上下文 - 對(duì)于SQL,需要SQL上下文; 對(duì)于Streaming,需要Streaming Context; 對(duì)于Hive,需要Hive Context。

但是從2.0開(kāi)始,RDD以及DataSet及其子集DataFrame API正在成為標(biāo)準(zhǔn)API,并且是Spark中數(shù)據(jù)抽象的基本單元。所有用戶(hù)定義的代碼都將根據(jù)DataSet和DataFrame API以及RDD進(jìn)行編寫(xiě)和評(píng)估。

因此,需要一個(gè)新的入口點(diǎn)構(gòu)建來(lái)處理這些新的API,這就是引入Spark Session的原因。Spark Session還包括不同上下文中可用的所有API - Spark Context,SQL Context,Streaming Context,Hive Context。

十,Apache Spark中的SparkSession vs SparkContext。

在 Spark 2.0.0之前,sparkContext被用作訪(fǎng)問(wèn)所有spark功能的通道。

spark驅(qū)動(dòng)程序使用spark context通過(guò)資源管理器( YARN或 Mesos ..)連接到集群。

sparkConf是創(chuàng)建spark上下文對(duì)象所必需的,它存儲(chǔ)配置參數(shù),如appName(用于標(biāo)識(shí)您的spark驅(qū)動(dòng)程序),應(yīng)用程序,核心數(shù)量以及在工作節(jié)點(diǎn)上運(yùn)行的執(zhí)行程序的內(nèi)存大小。

為了使用SQL,HIVE和Streaming的 API, 需要?jiǎng)?chuàng)建單獨(dú)的上下文。

示例:

創(chuàng)建sparkConf:

val conf = new SparkConf().setAppName(“RetailDataAnalysis”).setMaster(“spark://master:7077”).set(“spark.executor.memory”, “2g”)

creation of sparkContext:

val sc = new SparkContext(conf)

Spark會(huì)議:

從SPARK 2.0.0開(kāi)始,SparkSession提供了與基礎(chǔ)Spark功能交互的單一入口點(diǎn),并

允許使用DataFrame和Dataset API 編寫(xiě)Spark 。sparkContext中提供的所有功能也可在sparkSession中使用。

為了使用SQL,HIVE和Streaming的API,不需要?jiǎng)?chuàng)建單獨(dú)的上下文,因?yàn)閟parkSession包含所有API。

一旦SparkSession被實(shí)例化,我們就可以配置Spark的運(yùn)行時(shí)配置屬性。

例:

創(chuàng)建Spark會(huì)話(huà):

val spark = SparkSession

.builder

.appName(“

WorldBankIndex ”)。getOrCreate()

配置屬性:

spark.conf.set(“spark.sql.shuffle.partitions”,6)

spark.conf.set(“spark.executor.memory”,“2g”)

從Spark 2.0.0開(kāi)始,最好使用sparkSession,因?yàn)樗峁┝藢?duì)sparkContext所具有的所有spark功能的訪(fǎng)問(wèn)。此外,它還提供了API來(lái)處理DataFrame和數(shù)據(jù)集。

十一,Apache Spark的抽象是什么?

Apache Spark有幾個(gè)抽象:

  1. RDD:

RDD指的是彈性分布式數(shù)據(jù)集。RDD是記錄的只讀分區(qū)集合。它是Spark的核心抽象,也是Spark的基本數(shù)據(jù)結(jié)構(gòu)。它提供在大型集群上進(jìn)行內(nèi)存計(jì)算。即使是以容錯(cuò)的方式。有關(guān)RDD.follow鏈接的更詳細(xì)見(jiàn)解:Spark RDD - RDD的簡(jiǎn)介,功能和操作

  1. DataFrames:

它是一個(gè)組織成命名列的數(shù)據(jù)集。DataFrames等同于R / Python 中的關(guān)系數(shù)據(jù)庫(kù)或數(shù)據(jù)框架中的表。換句話(huà)說(shuō),我們可以說(shuō)它是一個(gè)具有良好優(yōu)化技術(shù)的關(guān)系表。它是一個(gè)不可變的分布式數(shù)據(jù)集合。允許更高級(jí)別的抽象,它允許開(kāi)發(fā)人員將結(jié)構(gòu)強(qiáng)加到分布式數(shù)據(jù)集合上。有關(guān)DataFrame的更詳細(xì)的見(jiàn)解。參考鏈接:Spark SQL DataFrame教程 - DataFrame簡(jiǎn)介

  1. Spark Streaming:

它是Spark的核心擴(kuò)展,允許從多個(gè)來(lái)源進(jìn)行實(shí)時(shí)流處理。例如Flume和Kafka。為了提供可用于交互式和批量查詢(xún)的統(tǒng)一,連續(xù)的DataFrame抽象,這兩個(gè)源一起工作。它提供可擴(kuò)展,高吞吐量和容錯(cuò)處理。有關(guān)Spark Streaming的更詳細(xì)的見(jiàn)解。參考鏈接:初學(xué)者的Spark Streaming教程

  1. GraphX

這是專(zhuān)門(mén)數(shù)據(jù)抽象的又一個(gè)例子。它使開(kāi)發(fā)人員能夠分析社交網(wǎng)絡(luò)。此外,其他圖表與Excel類(lèi)似的二維數(shù)據(jù)一起。

十二,如何在Apache Spark中創(chuàng)建RDD?

彈性分布式數(shù)據(jù)集(RDD)是spark的核心抽象,是一個(gè)彈性分布式數(shù)據(jù)集。

它是一個(gè)不可變(只讀)的分布式對(duì)象集合。RDD中的

每個(gè)數(shù)據(jù)集被劃分為邏輯分區(qū),

其可以在集群的不同節(jié)點(diǎn)上計(jì)算。

包括用戶(hù)定義的類(lèi),RDD可以包含任何類(lèi)型的Python,Java或Scala對(duì)象。

我們可以通過(guò)3種方式在Apache Spark中創(chuàng)建RDD :

1。通過(guò)分發(fā)對(duì)象集合

2.通過(guò)加載外部數(shù)據(jù)集

3.從現(xiàn)有的Apache Spark RDDs

  1. 使用并行化集合

RDD通常通過(guò)并行化現(xiàn)有集合來(lái)創(chuàng)建,

即通過(guò)在程序中獲取現(xiàn)有集合并將

其傳遞給SparkContext的 parallelize()方法。

scala> val data = Array(1,2,3,4,5)

scala> val dataRDD = sc.parallelize(data)

scala> dataRDD.count

  1. 外部數(shù)據(jù)集

在Spark中,可以從Hadoop支持的任何數(shù)據(jù)源構(gòu)建分布式數(shù)據(jù)集。

val dataRDD = spark.read.textFile(“F:/BigData/DataFlair/Spark/Posts.xml”)。rdd

  1. 從現(xiàn)有RDD創(chuàng)建RDD

轉(zhuǎn)換是從現(xiàn)有RDD創(chuàng)建RDD的方法。

轉(zhuǎn)換作為一種功能,可以吸收RDD并產(chǎn)生另一個(gè)結(jié)果RDD。

輸入RDD不會(huì)改變,RDD上應(yīng)用的

一些操作是:filter,Map,F(xiàn)latMap

val dataRDD = spark.read.textFile(“F:/Mritunjay/BigData/DataFlair/Spark/Posts.xml”)。rdd

val resultRDD = data.filter {line => {line.trim()。startsWith(“<row”)} }

十三,為什么Spark RDD不可變?

以下是原因:

  • 不可變數(shù)據(jù)始終可以安全地共享多個(gè)進(jìn)程以及多個(gè)線(xiàn)程。

  • 由于RDD是不可變的,我們可以隨時(shí)重新創(chuàng)建RDD。(來(lái)自譜系圖)。

  • 如果計(jì)算耗時(shí),我們可以緩存RDD,從而提高性能。

如果我遺漏了某些東西,請(qǐng)?zhí)砑痈喾謹(jǐn)?shù)

RDD也是容錯(cuò)的,并且可以懶惰地評(píng)估以獲取更多信息。

十四,在Apache Spark中解釋配對(duì)RDD這個(gè)術(shù)語(yǔ)

簡(jiǎn)介

配對(duì)RDD是具有鍵值對(duì)的分布式數(shù)據(jù)集合。它是Resilient Distributed Dataset的子集。因此它具有RDD的所有功能和鍵值對(duì)的一些新功能。配對(duì)RDD 有許多轉(zhuǎn)換操作可用。配對(duì)RDD上的這些操作對(duì)于解決許多需要排序,分組,減少某些值/功能的用例非常有用。

配對(duì)RDD上常用的操作有:groupByKey()reduceByKey()countByKey()join()等

創(chuàng)建配對(duì)RDD:

val pRDD:[(String),(Int)] = sc.textFile(“path_of_your_file”)。

flatMap( line => line.split(“”))。map

{word =>(word,word.length)}

同樣使用subString方法(如果我們有一個(gè)帶有id和某個(gè)值的文件,我們可以創(chuàng)建配對(duì)的rdd,id為key,value為其他細(xì)節(jié))

val pRDD2 [(Int),(String)] = sc.textFile(“path_of_your_file”)。

keyBy(line => line.subString(1,5).trim()。toInt)

。mapValues(line => line.subString (10,30).trim())

十五,Spark中的RDD與Distributed Storage Management有何不同?

RDD和分布式存儲(chǔ)之間的一些區(qū)別如下:

彈性分布式數(shù)據(jù)集(RDD)是Apache Spark框架的主要數(shù)據(jù)抽象。

分布式存儲(chǔ)只是一個(gè)可在多個(gè)節(jié)點(diǎn)上運(yùn)行的文件系統(tǒng)。

RDD將數(shù)據(jù)存儲(chǔ)在內(nèi)存中(除非顯式緩存)。

Distributed Storage將數(shù)據(jù)存儲(chǔ)在持久存儲(chǔ)中。

在發(fā)生故障或數(shù)據(jù)丟失的情況下,RDD可以重新計(jì)算自身。

如果數(shù)據(jù)從分布式存儲(chǔ)系統(tǒng)中丟失,它將永遠(yuǎn)消失(除非有內(nèi)部復(fù)制系統(tǒng))

十六,在Apache Spark中解釋RDD中的轉(zhuǎn)換和操作

轉(zhuǎn)換是對(duì)RDD的操作,用于創(chuàng)建一個(gè)或多個(gè)新RDD。例如map,filter,reduceByKey等。換句話(huà)說(shuō),轉(zhuǎn)換是將RDD作為輸入并產(chǎn)生一個(gè)或多個(gè)RDD作為輸出的函數(shù)。輸入RDD沒(méi)有變化,但它總是通過(guò)應(yīng)用它們所代表的計(jì)算產(chǎn)生一個(gè)或多個(gè)新的RDD。變換是惰性的,即不立即執(zhí)行。只有在調(diào)用動(dòng)作后才會(huì)執(zhí)行轉(zhuǎn)換。

操作是生成非RDD值的RDD操作。換句話(huà)說(shuō),返回任何類(lèi)型但RDD的值的RDD操作是一個(gè)動(dòng)作。它們觸發(fā)執(zhí)行RDD轉(zhuǎn)換以返回值。簡(jiǎn)單地說(shuō),一個(gè)動(dòng)作評(píng)估RDD沿襲圖。例如收集,減少,計(jì)數(shù),foreach等。

十七,Apache Spark轉(zhuǎn)換的類(lèi)型有哪些?

為了更好地理解轉(zhuǎn)換的類(lèi)型,讓我們從Apache Spark中的轉(zhuǎn)換簡(jiǎn)介開(kāi)始 。

Spark

Spark Transformation中的轉(zhuǎn)換是一種從現(xiàn)有RDD生成新RDD的函數(shù)。它將RDD作為輸入并生成一個(gè)或多個(gè)RDD作為輸出。每當(dāng)我們應(yīng)用任何轉(zhuǎn)換時(shí)它都會(huì)創(chuàng)建新的RDD。由于RDD本質(zhì)上是不可變的,因此無(wú)法更改輸入RDD。

RDD譜系,通過(guò)應(yīng)用使用最終RDD的整個(gè)父RDD構(gòu)建的轉(zhuǎn)換構(gòu)建。換句話(huà)說(shuō),它也被稱(chēng)為RDD運(yùn)算符圖或RDD依賴(lài)圖。它是一個(gè)邏輯執(zhí)行計(jì)劃,即它是RDD的整個(gè)父RDD的有向無(wú)環(huán)圖(DAG)。

轉(zhuǎn)換本質(zhì)上是懶惰的,即當(dāng)我們調(diào)用一個(gè)動(dòng)作時(shí)它們會(huì)被執(zhí)行。它們不會(huì)立即執(zhí)行。兩種最基本的轉(zhuǎn)換類(lèi)型是map(),filter()。

結(jié)果RDD始終與其父RDD不同。它可以更?。ɡ邕^(guò)濾,計(jì)數(shù),不同,樣本),更大(例如flatMap(),union(),Cartesian())或相同大?。ɡ鏼ap)。

現(xiàn)在,讓我們關(guān)注這個(gè)問(wèn)題,基本上有兩種類(lèi)型的轉(zhuǎn)換:

1.窄變換 -

在討論窄變換時(shí),在單個(gè)分區(qū)中計(jì)算記錄所需的所有元素都位于父RDD的單個(gè)分區(qū)中。為了計(jì)算結(jié)果,使用有限的分區(qū)子集。此轉(zhuǎn)換是map(),filter()的結(jié)果。

2.廣泛轉(zhuǎn)換 -

廣泛轉(zhuǎn)換意味著計(jì)算單個(gè)分區(qū)中記錄所需的所有元素可能存在于父RDD的許多分區(qū)中。分區(qū)可以駐留在父RDD的許多不同分區(qū)中。此轉(zhuǎn)換是groupbyKey()和reducebyKey()的結(jié)果

十八,解釋RDD屬性

RDD(彈性分布式數(shù)據(jù)集)是Apache Spark中的基本抽象。
RDD是群集上不可變的,分區(qū)的元素集合,可以并行操作。
每個(gè)RDD的特點(diǎn)是五個(gè)主要屬性:
以下操作是譜系操作。1.列表或分區(qū)集。
2.其他(父)RDD的依賴(lài)關(guān)系列表
3.計(jì)算每個(gè)分區(qū)的函數(shù)
以下操作用于執(zhí)行期間的優(yōu)化。
4.可選的首選位置[即HDFS文件的塊位置] [它是關(guān)于數(shù)據(jù)位置]
5.可選的分區(qū)信息[即鍵/值對(duì)的哈希分區(qū) - >當(dāng)數(shù)據(jù)混洗時(shí)數(shù)據(jù)將如何傳播]
示例:
#HadoopRDD:
HadoopRDD 使用舊版MapReduce API(org.apache.hadoop.mapred)提供讀取存儲(chǔ)在Hadoop(HDFS,HBase,Amazon S3 ..)中的數(shù)據(jù)的核心功能
HadoopRDD的屬性:
1.分區(qū)列表或分區(qū):每個(gè)HDFS塊一個(gè)
2.父RDD依賴(lài)項(xiàng)列表:無(wú)
3.計(jì)算每個(gè)分區(qū)的功能:讀取相應(yīng)的HDFS塊
4.可選首選位置:HDFS塊位置
5.可選分區(qū)信息:沒(méi)有
#FilteredRDD:
FilteredRDD的屬性:
1.分區(qū)列表或分區(qū)集:與父RDD相同的分區(qū)數(shù)

  1. 父RDD上的依賴(lài)項(xiàng)列表:作為父項(xiàng)的“一對(duì)一”(與父項(xiàng)相同)
    3。計(jì)算每個(gè)分區(qū)的函數(shù):計(jì)算父項(xiàng)然后過(guò)濾它
    4.可選首選位置:無(wú)(詢(xún)問(wèn)父級(jí))
    5??蛇x分區(qū)信息:無(wú)
    十九, Apache Spark中的血統(tǒng)圖是什么?

在譜系圖上添加更多點(diǎn):

您可以使用rdd0.toDebugString檢查兩個(gè)RDD之間的譜系。這會(huì)返回從當(dāng)前rdd到RDD之前所有依賴(lài)關(guān)系的沿襲圖。見(jiàn)下文。每當(dāng)你看到toDebugString輸出中的“+ - ”符號(hào)時(shí),就意味著從下一個(gè)操作開(kāi)始就會(huì)有下一個(gè)階段。這表示識(shí)別創(chuàng)建了多少個(gè)階段。

scala> val rdd0 = sc.parallelize(List(“Ashok Vengala”,“Ashok Vengala”,“DataFlair”))

rdd0:org.apache.spark.rdd.RDD [String] = ParallelCollectionRDD [10]并行化在<console >:31

scala> val count = rdd0.flatMap(rec => rec.split(“”))。map(word =>(word,1))。reduceByKey( +

count:org.apache.spark.rdd.RDD [(String,Int)] =在<console>:33處的reduceByKey處的ShuffledRDD [13]

scala> count.toDebugString

res24:String =

(2)在<console>處的reduceByKey處的ShuffledRDD [13]:33 []

    • (2)MapPartitionsRDD [12]在地圖處<console>:33 []

| MapPartitionsRDD [11]在flatMap的<console>:33 []

| ParallelCollectionRDD [10]并行化在<console>:31 []

從下到上(即最后三行):這些將在階段0中執(zhí)行。第一行(ShuffledRDD):這將在第一階段進(jìn)行操作。

在toDebugString輸出中,我們看到的是ParallelCollectionRDD,MapPartitionsRDD和ShuffleRDD。這些都是RDD抽象

二十,解釋術(shù)語(yǔ)Spark Partitions和Partitioners

分區(qū):

分區(qū)在HDFS中也稱(chēng)為“分裂”,是數(shù)據(jù)集的邏輯塊,可以在Petabyte,Terabytes范圍內(nèi)并分布在群集中。
默認(rèn)情況下,Spark為文件的每個(gè)塊創(chuàng)建一個(gè)分區(qū)(對(duì)于HDFS)
HDFS塊的默認(rèn)塊大小為64 MB(Hadoop版本1)/ 128 MB(Hadoop版本2),因此分割大小。
但是,可以明確指定要?jiǎng)?chuàng)建的分區(qū)數(shù)。
分區(qū)基本上用于加速數(shù)據(jù)處理。
分區(qū):
定義鍵值對(duì)RDD中的元素如何按鍵分區(qū)的對(duì)象。將每個(gè)鍵映射到分區(qū)ID,從0到(分區(qū)數(shù) - 1)
分區(qū)程序捕獲輸出處的數(shù)據(jù)分布。調(diào)度程序可以根據(jù)分區(qū)程序的類(lèi)型優(yōu)化將來(lái)的操作。(即如果我們執(zhí)行任何操作,說(shuō)需要在節(jié)點(diǎn)之間移動(dòng)的轉(zhuǎn)換或動(dòng)作,我們可能需要分區(qū)器。請(qǐng)?jiān)谡搲幸胷educeByKey()轉(zhuǎn)換)
Spark中基本上有三種類(lèi)型的分區(qū)器:
(1)哈希分區(qū)程序(2)范圍分區(qū)程序(3)可以制作自定義分區(qū)程序
屬性名稱(chēng): spark.default.parallelism
默認(rèn)值:對(duì)于像reduceByKey和join這樣的分布式shuffle操作,是父RDD中最大的分區(qū)數(shù)。對(duì)于沒(méi)有父RDD并行化的操作,它取決于集群管理器:
?本地模式:本地計(jì)算機(jī)上的核心數(shù)量
?Mesos細(xì)粒度模式:8
?其他:所有執(zhí)行程序節(jié)點(diǎn)上的核心總數(shù)或2,以較小者為準(zhǔn)更大
含義:通過(guò)轉(zhuǎn)換(如join)返回的RDD中的默認(rèn)分區(qū)數(shù)
二十一,默認(rèn)情況下,Apache Spark中的RDD中創(chuàng)建了多少個(gè)分區(qū)?

默認(rèn)情況下,Spark為文件的每個(gè)塊創(chuàng)建一個(gè)分區(qū)(對(duì)于HDFS)
HDFS塊的默認(rèn)塊大小為64 MB(Hadoop版本1)/ 128 MB(Hadoop版本2)。
但是,可以明確指定要?jiǎng)?chuàng)建的分區(qū)數(shù)。
例1:
沒(méi)有指定分區(qū)
val rdd1 = sc.textFile("/home/hdadmin/wc-data.txt")
例2:
以下代碼創(chuàng)建了10個(gè)分區(qū)的RDD,因?yàn)槲覀冎付薾o。分區(qū)。
val rdd1 = sc.textFile("/home/hdadmin/wc-data.txt", 10)
可以通過(guò)以下方式查詢(xún)分區(qū)數(shù):
rdd1.partitions.length
<strong>
OR
</strong>
rdd1.getNumPartitions
最佳情況是我們應(yīng)該按照以下方式制作RDD:
Cluster中的核心數(shù)量=否。分區(qū)
二十二,什么是Spark DataFrames?

DataFrame由兩個(gè)單詞data和frame組成,意味著數(shù)據(jù)必須適合某種幀。我們可以將框架理解為關(guān)系數(shù)據(jù)庫(kù)的模式。

在Spark中,DataFrame是通過(guò)網(wǎng)絡(luò)和一些模式的分布式數(shù)據(jù)的集合。我們可以將其理解為格式化為行/列方式的數(shù)據(jù)??梢詮腍ive數(shù)據(jù),JSON文件,CSV,結(jié)構(gòu)化數(shù)據(jù)或可以在結(jié)構(gòu)化數(shù)據(jù)中構(gòu)建框架的原始數(shù)據(jù)創(chuàng)建DataFrame。如果可以在該RDD上應(yīng)用某些模式,我們還可以從RDD創(chuàng)建DataFrame 。

臨時(shí)視圖或表也可以從DataFrame創(chuàng)建,因?yàn)樗哂袛?shù)據(jù)和模式。我們還可以在創(chuàng)建的表/視圖上運(yùn)行SQL查詢(xún)以獲得更快的結(jié)果。

它也被懶惰地評(píng)估(懶惰評(píng)估)以獲得更好的資源利用率。

二十三,Spark中DataFrame的好處是什么?

以下是DataFrames的優(yōu)點(diǎn)。

1.DataFrame是分布式數(shù)據(jù)集合。在DataFrames中,數(shù)據(jù)在命名列中組織。

它們?cè)诟拍钌项?lèi)似于關(guān)系數(shù)據(jù)庫(kù)中的表。此外,還有更豐富的優(yōu)化。

  1. DataFrames授權(quán)SQL查詢(xún)和DataFrame API。

4.我們可以通過(guò)它處理結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)格式。如:Avro,CSV,彈性搜索和Cassandra。此外,它還涉及存儲(chǔ)系統(tǒng)HDFS,HIVE表,MySQL等。

5.在DataFrames中,Catalyst支持優(yōu)化(催化劑優(yōu)化器)。有一般庫(kù)可用于表示樹(shù)木。在四個(gè)階段中,DataFrame使用Catalyst樹(shù)轉(zhuǎn)換:

  • 分析邏輯計(jì)劃以解決參考

  • 邏輯計(jì)劃優(yōu)化

  • 物理規(guī)劃

  • 用于將查詢(xún)的一部分編譯為Java字節(jié)碼的代碼生成。
  1. DataFrame API有各種編程語(yǔ)言版本。例如爪哇,Scala中,Python和- [R 。

7.它提供Hive兼容性。我們可以在現(xiàn)有的Hive倉(cāng)庫(kù)上運(yùn)行未修改的Hive查詢(xún)。

8.它可以從單個(gè)筆記本電腦上的千字節(jié)數(shù)據(jù)擴(kuò)展到大型集群上的數(shù)PB數(shù)據(jù)。

  1. DataFrame通過(guò)Spark核心提供與大數(shù)據(jù)工具和框架的輕松集成。

二十四,什么是Spark數(shù)據(jù)集?

甲數(shù)據(jù)集是對(duì)象的不可變集合,那些被映射到一個(gè)關(guān)系模式。它們本質(zhì)上是強(qiáng)類(lèi)型的。

數(shù)據(jù)集API的核心有一個(gè)編碼器。該編碼器負(fù)責(zé)在JVM對(duì)象和

表格表示之間進(jìn)行轉(zhuǎn)換。通過(guò)使用Spark的內(nèi)部二進(jìn)制格式,存儲(chǔ)表格表示,允許對(duì)序列化數(shù)據(jù)執(zhí)行操作并提高內(nèi)存利用率。它還支持為各種類(lèi)型自動(dòng)生成編碼器,包括基本類(lèi)型(例如String,Integer,Long)和Scala案例類(lèi)。它提供了許多功能轉(zhuǎn)換 (例如map,flatMap,filter)。

二十五,數(shù)據(jù)集在spark中有哪些優(yōu)點(diǎn)?

1)靜態(tài)類(lèi)型 -

使用Dataset的靜態(tài)類(lèi)型功能,開(kāi)發(fā)人員可以在編譯時(shí)捕獲錯(cuò)誤(這節(jié)省了時(shí)間和成本)。

2)運(yùn)行時(shí)安全性: -

數(shù)據(jù)集 API都表示為lambda函數(shù)和JVM類(lèi)型對(duì)象,

在編譯時(shí)將檢測(cè)到任何類(lèi)型參數(shù)的不匹配。此外,使用數(shù)據(jù)集時(shí),也可以在編譯時(shí)檢測(cè)分析錯(cuò)誤,

從而節(jié)省開(kāi)發(fā)人員的時(shí)間和成本。

3)性能和優(yōu)化

數(shù)據(jù)集API構(gòu)建于Spark SQL引擎之上,它使用Catalyst生成優(yōu)化的邏輯和物理查詢(xún)計(jì)劃,提供空間和速度效率。

4)處理需求,如高級(jí)表達(dá)式,過(guò)濾器,地圖,聚合,平均值,總和,

SQL查詢(xún),列式訪(fǎng)問(wèn)以及在半結(jié)構(gòu)化數(shù)據(jù)上使用lambda函數(shù),DataSet最好。

5)數(shù)據(jù)集提供豐富的語(yǔ)義,高級(jí)抽象和特定于域的API

二十六,Apache Spark中的定向非循環(huán)圖是什么?

在數(shù)學(xué)術(shù)語(yǔ)中,有向無(wú)環(huán)圖是具有不定向的循環(huán)的圖。DAG是一個(gè)圖表,其中包含應(yīng)用于RDD的所有操作的集合。在調(diào)用任何操作時(shí)的RDD上。Spark創(chuàng)建DAG并將其提交給DAG調(diào)度程序。只有在構(gòu)建DAG之后,Spark才會(huì)創(chuàng)建查詢(xún)優(yōu)化計(jì)劃。DAG調(diào)度程序?qū)⑦\(yùn)算符劃分為任務(wù)階段。階段由基于輸入數(shù)據(jù)的分區(qū)的任務(wù)組成。DAG調(diào)度程序?qū)⑦\(yùn)營(yíng)商連接在一起。

使用有向非循環(huán)圖在Spark中實(shí)現(xiàn)容錯(cuò)。通過(guò)使用DAG,可以在Spark中進(jìn)行查詢(xún)優(yōu)化。因此,我們通過(guò)使用DAG獲得更好的性能。

二十七, Spark DAG需要什么?

在Spark中需要DAG

我們知道Hadoop MapReduce存在一些局限性。為了克服這些限制,Apache Software在Spark中引入了DAG 。讓我們首先研究MapReduce的計(jì)算過(guò)程。它通常分三步進(jìn)行:

  1. HDFS用于讀取數(shù)據(jù)。

2.之后,我們應(yīng)用Map和Reduce操作。

3.再次將計(jì)算結(jié)果寫(xiě)回HDFS。

在Hadoop中,每個(gè)MapReduce操作都是相互獨(dú)立的。甚至HADOOP也不知道接下來(lái)會(huì)有哪些Map減少。因此,有時(shí)在一些迭代中讀取和寫(xiě)回兩個(gè)map-reduce作業(yè)之間的立即結(jié)果是無(wú)關(guān)緊要的。結(jié)果,磁盤(pán)存儲(chǔ)器或穩(wěn)定存儲(chǔ)器(HDFS)中的存儲(chǔ)器被浪費(fèi)。

當(dāng)我們談?wù)摱嗖襟E時(shí),所有作業(yè)從一開(kāi)始就被阻止,直到完成上一個(gè)作業(yè)。因此,復(fù)雜的計(jì)算可能需要較長(zhǎng)的時(shí)間和較小的數(shù)據(jù)量。

但是,在Spark中引入DAG之后,執(zhí)行計(jì)劃已經(jīng)過(guò)優(yōu)化,例如,最大限度地減少了混亂數(shù)據(jù)。由于形成了連續(xù)計(jì)算級(jí)的DAG(有向無(wú)環(huán)圖)。

二十八,DAG和Lineage有什么區(qū)別?

為了更好地理解這些差異,我們將逐一討論每個(gè)主題:

譜系圖

我們知道,只要在RDD上執(zhí)行一系列轉(zhuǎn)換,就不會(huì)立即評(píng)估它們,而是懶惰(懶惰評(píng)估)。當(dāng)從現(xiàn)有RDD創(chuàng)建新RDD時(shí),該新RDD包含指向父RDD的指針。同樣,RDD之間的所有依賴(lài)關(guān)系都將記錄在圖形中,而不是實(shí)際數(shù)據(jù)中。該圖稱(chēng)為譜系圖。

現(xiàn)在來(lái)到DAG,

Apache Spark中的定向非循環(huán)圖(DAG)

DAG 是頂點(diǎn)和邊緣的組合。在DAG中,頂點(diǎn)表示RDD,邊表示要應(yīng)用于RDD的操作。DAG中的每個(gè)邊緣都是從一個(gè)序列中的較早到后一個(gè)。當(dāng)我們調(diào)用一個(gè)Action時(shí),創(chuàng)建的DAG將被提交給DAG Scheduler,后者會(huì)進(jìn)一步將圖形拆分為任務(wù)的各個(gè)階段

二十九,Apache Spark中的緩存和持久性有什么區(qū)別?

Cache和Persist都是Spark計(jì)算的優(yōu)化技術(shù)。

Cache是??具有MEMORY_ONLY存儲(chǔ)級(jí)別的Persist的同義詞(即)使用Cache技術(shù)我們可以?xún)H在需要時(shí)將中間結(jié)果保存在內(nèi)存中。

Persist 使用存儲(chǔ)級(jí)別為持久性標(biāo)記RDD,存儲(chǔ)級(jí)別可以是MEMORY,MEMORY_AND_DISK,MEMORY_ONLY_SER,MEMORY_AND_DISK_SER,DISK_ONLY,MEMORY_ONLY_2,MEMORY_AND_DISK_2

僅僅因?yàn)槟憧梢栽趦?nèi)存中緩存RDD并不意味著你應(yīng)該盲目地這樣做。根據(jù)訪(fǎng)問(wèn)數(shù)據(jù)集的次數(shù)以及執(zhí)行此操作所涉及的工作量,通過(guò)增加的內(nèi)存壓力可以更快地重新計(jì)算。

不言而喻,如果你只讀一個(gè)數(shù)據(jù)集,一旦沒(méi)有緩存它,它實(shí)際上會(huì)使你的工作變慢

三十,Apache Spark有哪些限制?

現(xiàn)在,Apache Spark被認(rèn)為是行業(yè)廣泛使用的下一代Gen Big數(shù)據(jù)工具。但Apache Spark存在一定的局限性。他們是:

Apache Spark的局限性:

1.無(wú)文件管理系統(tǒng)

Apache Spark依賴(lài)于其他平臺(tái),如Hadoop或其他基于云的平臺(tái)文件管理系統(tǒng)。這是Apache Spark的主要問(wèn)題之一。

2.延遲

使用Apache Spark時(shí),它具有更高的延遲。

3.不支持實(shí)時(shí)處理

在Spark Streaming中,到達(dá)的實(shí)時(shí)數(shù)據(jù)流被分成預(yù)定義間隔的批次,每批數(shù)據(jù)被視為Spark Resilient Distributed Database(RDD)。然后使用map,reduce,join等操作處理這些RDD。這些操作的結(jié)果是批量返回的。因此,它不是實(shí)時(shí)處理,但Spark接近實(shí)時(shí)數(shù)據(jù)的實(shí)時(shí)處理。微批處理在Spark Streaming中進(jìn)行。

4.手動(dòng)優(yōu)化

手動(dòng)優(yōu)化是優(yōu)化Spark作業(yè)所必需的。此外,它適用于特定數(shù)據(jù)集。如果我們想要在Spark中進(jìn)行分區(qū)和緩存是正確的,我們需要手動(dòng)控制。

少一點(diǎn)。算法

Spark MLlib在Tanimoto距離等許多可用算法方面落后。

6.窗口標(biāo)準(zhǔn)

Spark不支持基于記錄的窗口標(biāo)準(zhǔn)。它只有基于時(shí)間的窗口標(biāo)準(zhǔn)。

7.迭代處理

在Spark中,數(shù)據(jù)分批迭代,每次迭代都是單獨(dú)調(diào)度和執(zhí)行的。

8.

當(dāng)我們想要經(jīng)濟(jì)高效地處理大數(shù)據(jù)時(shí),昂貴內(nèi)存容量可能成為瓶頸,因?yàn)樵趦?nèi)存中保存數(shù)據(jù)非常昂貴。此時(shí)內(nèi)存消耗非常高,并且不以用戶(hù)友好的方式處理。Spark的成本非常高,因?yàn)锳pache Spark需要大量的RAM才能在內(nèi)存中運(yùn)行

三十一,Apache Spark的不同運(yùn)行模式

我們可以用四種模式啟動(dòng)spark應(yīng)用程序:

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

  • >當(dāng)您啟動(dòng)spark-shell而沒(méi)有控制/配置參數(shù)時(shí),它將以本地模式啟動(dòng)

spark-shell --master local [1 ]

  • > spark-submit --class com.df.SparkWordCount SparkWC.jar local [1]

2)Spark Standalone集群管理器:

  • > spark-shell --master spark:// hduser:7077

  • > spark-submit --class com.df.SparkWordCount SparkWC.jar spark:// hduser:7077

3)紗線(xiàn)模式(客戶(hù)端/群集模式):

  • > spark-shell --master yarn或

(或)

  • > spark-shell --master yarn --deploy-mode client

以上兩個(gè)命令都是相同的。

要在集群模式下啟動(dòng)spark應(yīng)用程序,我們必須使用spark-submit命令。我們不能通過(guò)spark-shell運(yùn)行yarn-cluster模式,因?yàn)楫?dāng)我們運(yùn)行spark應(yīng)用程序時(shí),驅(qū)動(dòng)程序?qū)⒆鳛椴考?yīng)用程序主容器/進(jìn)程運(yùn)行。因此無(wú)法通過(guò)spark-shell運(yùn)行集群模式。

  • > spark-submit --class com.df.SparkWordCount SparkWC.jar yarn-client

  • > spark-submit --class com.df.SparkWordCount SparkWC.jar yarn-cluster

4)Mesos模式:

  • > spark-shell --master mesos:// HOST:5050

三十二,在Spark中表示數(shù)據(jù)的不同方法有哪些?

基本上,在Apache Spark中有3種不同的方式來(lái)表示數(shù)據(jù)。要么我們可以通過(guò)RDD表示它,要么我們使用DataFrames,或者我們也可以選擇DataSet來(lái)表示我們?cè)赟park中的數(shù)據(jù)。讓我們?cè)敿?xì)討論它們中的每一個(gè):

  1. RDD

RDD指的是“彈性分布式數(shù)據(jù)集”。RDD是Apache Spark的核心抽象和基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)。它是一個(gè)不可變的對(duì)象集合,可以在集群的不同節(jié)點(diǎn)上進(jìn)行計(jì)算。我們知道RDD是不可變的,雖然我們不能對(duì)其進(jìn)行任何更改,但我們可以對(duì)它們應(yīng)用以下操作,如Transformation和Actions。它以容錯(cuò)方式對(duì)大型集群執(zhí)行內(nèi)存計(jì)算?;旧希腥N方法可以在Spark中創(chuàng)建RDD,例如 - 穩(wěn)定存儲(chǔ)中的數(shù)據(jù),其他RDD,以及并行化驅(qū)動(dòng)程序中已有的集合。按照此鏈接詳細(xì)了解Spark RDD。

  1. DataFrame

在DataFrame中,數(shù)據(jù)組織成命名列。此表與關(guān)系數(shù)據(jù)庫(kù)中的表類(lèi)似。DataFrames也是一個(gè)不可變的分布式數(shù)據(jù)集合。它允許開(kāi)發(fā)人員將結(jié)構(gòu)強(qiáng)加到分布式數(shù)據(jù)集合上,從而實(shí)現(xiàn)更高級(jí)別的抽象。請(qǐng)點(diǎn)擊此鏈接詳細(xì)了解Spark DataFrame。

  1. Spark數(shù)據(jù)集API

它是DataFrame API的擴(kuò)展。它提供了類(lèi)型安全的,面向?qū)ο蟮木幊探涌?。它利用Spark的Catalyst優(yōu)化器,將數(shù)據(jù)字段和表達(dá)式公開(kāi)給查詢(xún)計(jì)劃器。

三十三,什么是Spark中的日志寫(xiě)入(日志記錄)?

任何Apache Spark作業(yè)中都有兩種類(lèi)型的故障- 驅(qū)動(dòng)程序故障或工作程序故障。

當(dāng)任何工作節(jié)點(diǎn)發(fā)生故障時(shí),將終止在該工作節(jié)點(diǎn)中運(yùn)行的執(zhí)行程序進(jìn)程,并且在該工作節(jié)點(diǎn)上調(diào)度的任務(wù)將自動(dòng)移動(dòng)到任何其他正在運(yùn)行的工作節(jié)點(diǎn),并且將完成任務(wù)。

當(dāng)驅(qū)動(dòng)程序或主節(jié)點(diǎn)發(fā)生故障時(shí),運(yùn)行執(zhí)行程序的所有關(guān)聯(lián)工作程序節(jié)點(diǎn)將與每個(gè)執(zhí)行程序內(nèi)存中的數(shù)據(jù)一起被終止。在從可靠和容錯(cuò)的文件系統(tǒng)(如HDFS)讀取文件的情況下,始終保證零數(shù)據(jù)丟失,因?yàn)閿?shù)據(jù)隨時(shí)可以從文件系統(tǒng)中讀取。通過(guò)定期以特定間隔保存應(yīng)用程序數(shù)據(jù),檢查點(diǎn)還可確保Spark中的容錯(cuò)。

在Spark Streaming應(yīng)用程序的情況下,并不總是保證零數(shù)據(jù)丟失,因?yàn)閿?shù)據(jù)將被緩沖在執(zhí)行程序的內(nèi)存中,直到它們被處理為止。如果驅(qū)動(dòng)程序失敗,則所有執(zhí)行程序都將被終止,其內(nèi)存中的數(shù)據(jù)將無(wú)法恢復(fù)。

為了克服這種數(shù)據(jù)丟失情況,Apache Spark 1.2中引入了寫(xiě)入前向記錄(WAL)。啟用WAL后,首先在日志文件中記下操作的意圖,這樣如果驅(qū)動(dòng)程序失敗并重新啟動(dòng),則該日志文件中的注釋操作可以應(yīng)用于數(shù)據(jù)。對(duì)于讀取流數(shù)據(jù)的源,如Kafka或Flume,接收器將接收數(shù)據(jù),這些數(shù)據(jù)將存儲(chǔ)在執(zhí)行程序的內(nèi)存中。啟用WAL后,這些接收的數(shù)據(jù)也將存儲(chǔ)在日志文件中。

可以通過(guò)執(zhí)行以下操作啟用WAL:

1.使用streamingContext.checkpoint(path)設(shè)置檢查點(diǎn)目錄

2.通過(guò)將spark.stream.receiver.WriteAheadLog.enable設(shè)置為T(mén)rue來(lái)啟用WAL日志記錄

三十四,在Apache Spark中解釋催化劑查詢(xún)優(yōu)化器。

pache Spark最重要的組件是Spark SQL,它處理DataFrame API和SQL查詢(xún)。在Spark SQL中,有一個(gè)名為Catalyst Query Optimizer的優(yōu)化器。使用此Spark創(chuàng)建可擴(kuò)展的查詢(xún)優(yōu)化器。此查詢(xún)優(yōu)化器Spark基于Scala的函數(shù)式編程構(gòu)造。

需要查詢(xún)優(yōu)化器:

要獲得解決方案來(lái)解決Bigdata的各種問(wèn)題。
作為擴(kuò)展優(yōu)化器的解決方案。
我們分四個(gè)階段使用催化劑通用樹(shù)轉(zhuǎn)換框架工作

分析
邏輯優(yōu)化。
物理規(guī)劃。
代碼生成。
三十五,Apache Spark中的共享變量是什么?

共享變量只不過(guò)是可以在并行操作中使用的變量。默認(rèn)情況下,當(dāng)Apache Spark并行運(yùn)行一個(gè)函數(shù)作為不同節(jié)點(diǎn)上的一組任務(wù)時(shí),它會(huì)將函數(shù)中使用的每個(gè)變量的副本發(fā)送給每個(gè)任務(wù)。有時(shí),變量需要跨任務(wù)共享,或者在任務(wù)和驅(qū)動(dòng)程序之間共享。Spark支持兩種類(lèi)型的共享變量:廣播變量,可用于緩存所有節(jié)點(diǎn)的內(nèi)存中的值; 累加器,它們是僅“添加”到的變量,例如計(jì)數(shù)器和總和。

三十六,Apache Spark如何處理累積的元數(shù)據(jù)?

由于隨機(jī)操作,元數(shù)據(jù)在驅(qū)動(dòng)程序上累積。在長(zhǎng)期工作中變得特別乏味。

要處理累積元數(shù)據(jù)的問(wèn)題,有兩種選擇:

首先,設(shè)置spark.cleaner.ttl參數(shù)以觸發(fā)自動(dòng)清理。但是,這將消除任何持久的RDD。
另一種解決方案是簡(jiǎn)單地將長(zhǎng)時(shí)間運(yùn)行的作業(yè)分成批處理并將中間結(jié)果寫(xiě)入磁盤(pán)。這有利于每個(gè)批次的新環(huán)境,而不必?fù)?dān)心元數(shù)據(jù)的建立。
三十七,什么是Apache Spark Machine學(xué)習(xí)庫(kù)?

Apache Spark中的機(jī)器學(xué)習(xí)庫(kù)

它是一個(gè)可擴(kuò)展的機(jī)器學(xué)習(xí)庫(kù),可以討論高速和高質(zhì)量的算法。

為了使機(jī)器學(xué)習(xí)可擴(kuò)展且簡(jiǎn)單,創(chuàng)建了MLlib。有機(jī)器學(xué)習(xí)庫(kù)包括各種機(jī)器學(xué)習(xí)算法的實(shí)現(xiàn)。例如,聚類(lèi),回歸,分類(lèi)和協(xié)同過(guò)濾。MLlib中也存在一些較低級(jí)別的機(jī)器學(xué)習(xí)原語(yǔ),如通用梯度下降優(yōu)化算法。

在Apache Spark Version 2.0中,基于RDD的API在spark中。MLlib包進(jìn)入維護(hù)模式。在此版本中,基于DataFrame的API是Spark的主要機(jī)器學(xué)習(xí)API。因此,MLlib不會(huì)向基于RDD的API添加任何新功能。

基于 DataFrame的API是它比 RDD更加用戶(hù)友好,因此MLlib正在切換到DataFrame API。使用DataFrames的一些好處是它包括Spark數(shù)據(jù)源, Spark SQL DataFrame查詢(xún)Tungsten和 Catalyst優(yōu)化,以及跨語(yǔ)言的統(tǒng)一API。這個(gè)機(jī)器學(xué)習(xí)庫(kù)也使用線(xiàn)性代數(shù)包Breeze。Breeze是用于數(shù)值計(jì)算和機(jī)器學(xué)習(xí)的庫(kù)的集合。

三十八,列出常用的機(jī)器學(xué)習(xí)算法。

基本上,有三種類(lèi)型的機(jī)器學(xué)習(xí)算法:

(1)監(jiān)督學(xué)習(xí)算法

(2)無(wú)監(jiān)督學(xué)習(xí)算法

(3)強(qiáng)化學(xué)習(xí)算法

最常用的機(jī)器學(xué)習(xí)算法如下:

(1)線(xiàn)性回歸

(2)Logistic回歸

(3)決策樹(shù)

(4)K-Means

(5)KNN

(6)SVM

(7)隨機(jī)森林

(8)樸素貝葉斯

(9) 降維算法

(10)梯度升壓和Adaboos

三十九,DSM和RDD有什么區(qū)別?

在幾個(gè)特征的基礎(chǔ)上,RDD和DSM之間的區(qū)別是:

一世。讀

RDD -在讀操作RDD要么是粗粒度或細(xì)粒度。粗粒度意味著我們可以轉(zhuǎn)換整個(gè)數(shù)據(jù)集,但不能轉(zhuǎn)換數(shù)據(jù)集上的單個(gè)元素。雖然細(xì)粒度意味著我們可以轉(zhuǎn)換數(shù)據(jù)集上的單個(gè)元素。

DSM - 分布式共享內(nèi)存中的讀取操作是細(xì)粒度的。

II。寫(xiě)

RDD - RDD中的寫(xiě)操作是粗粒度的。

DSM - Write操作在分布式共享系統(tǒng)中是細(xì)粒度的。

III。一致性

RDD - RDD的一致性是微不足道的,這意味著它本質(zhì)上是不可變的。我們無(wú)法識(shí)別RDD的內(nèi)容,即RDD的任何變化都是永久性的。因此,一致性水平非常高。

DSM - 系統(tǒng)保證如果程序員遵守規(guī)則,內(nèi)存將保持一致。此外,內(nèi)存操作的結(jié)果將是可預(yù)測(cè)的。

IV。故障恢復(fù)機(jī)制

RDD - 通過(guò)隨時(shí)使用沿襲圖,可以在Spark RDD中輕松恢復(fù)丟失的數(shù)據(jù)。因此,對(duì)于每次轉(zhuǎn)換,形成新的RDD。由于RDD本質(zhì)上是不可變的,因此很容易恢復(fù)。

DSM - 通過(guò)檢查點(diǎn)技術(shù)實(shí)現(xiàn)容錯(cuò),該技術(shù)允許應(yīng)用程序回滾到最近的檢查點(diǎn)而不是重新啟動(dòng)。

v。斯特拉格勒減災(zāi)

總的來(lái)說(shuō),Stragglers是那些比同齡人需要更多時(shí)間才能完成的人。這可能是由于許多原因造成的,例如負(fù)載不平衡,I / O塊,垃圾收集等。

落后者的問(wèn)題是當(dāng)并行計(jì)算之后是同步,例如減少導(dǎo)致所有并行任務(wù)等待其他人。

RDD - 可以通過(guò)在RDD中使用備份任務(wù)來(lái)緩解落后者。

DSM - 實(shí)現(xiàn)落后緩解,非常困難。

六。行為如果沒(méi)有足夠的RAM

RDD - 由于沒(méi)有足夠的空間將RDD存儲(chǔ)在RAM中,因此RDD會(huì)轉(zhuǎn)移到磁盤(pán)。

DSM - 如果RAM用完存儲(chǔ),性能會(huì)降低,在這種類(lèi)型的系統(tǒng)中

四十,列出Apache Spark中Parquet文件的優(yōu)點(diǎn)

Parquet是Hadoop的開(kāi)源文件格式。與傳統(tǒng)方法相比,Parquet以扁平柱狀格式存儲(chǔ)嵌套數(shù)據(jù)結(jié)構(gòu),其中數(shù)據(jù)以行面向方式存儲(chǔ),鑲木地板在存儲(chǔ)和性能方面更有效。

柱狀格式有幾個(gè)優(yōu)點(diǎn):

1)按列進(jìn)行組織可以實(shí)現(xiàn)更好的壓縮,因?yàn)閿?shù)據(jù)更加均勻。在Hadoop集群的規(guī)模上,節(jié)省的空間非常明顯。

2)I / O將減少,因?yàn)槲覀兛梢栽谧x取數(shù)據(jù)時(shí)有效地僅掃描列的子集。更好的壓縮還可以減少讀取輸入所需的帶寬。

3)當(dāng)我們?cè)诿苛兄写鎯?chǔ)相同類(lèi)型的數(shù)據(jù)時(shí),我們可以通過(guò)使指令分支更可預(yù)測(cè)來(lái)使用更適合現(xiàn)代處理器管道的編碼

四十一,什么是Spark的懶惰評(píng)估?

簡(jiǎn)介

延遲評(píng)估意味著在觸發(fā)操作之前不會(huì)啟動(dòng)執(zhí)行。轉(zhuǎn)換本質(zhì)上是懶惰的,即當(dāng)我們?cè)赗DD上調(diào)用某些操作時(shí),它不會(huì)立即執(zhí)行。Spark將它們添加到DAG計(jì)算中,并且只有當(dāng)驅(qū)動(dòng)程序請(qǐng)求某些數(shù)據(jù)時(shí),才會(huì)執(zhí)行此DAG

懶惰評(píng)估的優(yōu)點(diǎn)。

1)這是一種優(yōu)化技術(shù),即它通過(guò)減少查詢(xún)數(shù)量來(lái)提供優(yōu)化。

2)它節(jié)省了驅(qū)動(dòng)程序和集群之間的往返,從而加快了進(jìn)程

四十二, Spark懶惰評(píng)估的好處是什么?

Apache Spark使用延遲評(píng)估以獲得好處:

1)對(duì)RDD應(yīng)用轉(zhuǎn)換操作或“將數(shù)據(jù)加載到RDD”不會(huì)立即執(zhí)行,直到它看到一個(gè)動(dòng)作。對(duì)RDD的轉(zhuǎn)換和在RDD中存儲(chǔ)數(shù)據(jù)進(jìn)行了懶惰的評(píng)估。如果Spark使用惰性評(píng)估,將以更好的方式利用資源。

2)Spark使用延遲評(píng)估來(lái)減少通過(guò)將操作分組在一起而必須接管的數(shù)據(jù)。在MapReduce的情況下,用戶(hù)/開(kāi)發(fā)人員必須花費(fèi)大量時(shí)間來(lái)將操作組合在一起,以便最小化MapReduce傳遞的數(shù)量。在spark中,編寫(xiě)單個(gè)復(fù)雜映射而不是將許多簡(jiǎn)單操作鏈接在一起沒(méi)有任何好處。用戶(hù)可以將他們的火花程序組織成較小的操作。通過(guò)使用延遲評(píng)估,Spark將非常有效地管理所有操作

3)延遲評(píng)估有助于優(yōu)化Spark中的磁盤(pán)和內(nèi)存使用。

4)一般來(lái)說(shuō),在對(duì)數(shù)據(jù)進(jìn)行計(jì)算時(shí),我們必須考慮兩個(gè)方面,即空間和時(shí)間的復(fù)雜性。使用火花懶惰評(píng)估,我們可以克服兩者。僅在需要數(shù)據(jù)時(shí)才會(huì)觸發(fā)操作。它減少了開(kāi)銷(xiāo)。

5)它還節(jié)省了計(jì)算量并提高了速度。延遲評(píng)估將在節(jié)省計(jì)算開(kāi)銷(xiāo)方面發(fā)揮關(guān)鍵作用。

只計(jì)算必要的值而不是整個(gè)數(shù)據(jù)集(它全部取決于操作操作,也很少

轉(zhuǎn)換)

四十三,Apache火花比Hadoop快多少?

當(dāng)數(shù)據(jù)適合內(nèi)存時(shí), Apache Spark工作得更快,Spark處理內(nèi)存中的數(shù)據(jù),這使得處理速度更快,而 MapReduce在處理后將數(shù)據(jù)推送到磁盤(pán)。使用 DAG有助于進(jìn)行大量?jī)?yōu)化,它可以在一個(gè)階段中優(yōu)化和進(jìn)行計(jì)算,并且還可以避免不必要的減速器任務(wù)。Spark可以在內(nèi)存中緩存部分或完整數(shù)據(jù),從而避免大量磁盤(pán)I / O. 據(jù)說(shuō)商業(yè)Spark比 Hadoop快100倍

四十四,通過(guò)YARN啟動(dòng)Apache Spark有哪些方法?

Apache Spark有兩種在YARN上運(yùn)行應(yīng)用程序的模式:集群和客戶(hù)端

spark-submit或spark-shell --master yarn-cluster或--master yarn-client

四十五。.解釋Apache Spark中的各種集群管理器?

Apache Spark是一種可以在群集上以分布式模式運(yùn)行的大型數(shù)據(jù)處理引擎。Spark應(yīng)用程序作為集群上的獨(dú)立進(jìn)程集運(yùn)行,所有這些都由中央?yún)f(xié)調(diào)器協(xié)調(diào)。這個(gè)中央?yún)f(xié)調(diào)器可以連接三個(gè)不同的集群管理器,Spark的Standalone,Apache Mesos和Hadoop YARN。

在群集上以分布式模式運(yùn)行應(yīng)用程序時(shí),Spark使用主/從體系結(jié)構(gòu)和中央?yún)f(xié)調(diào)器,也稱(chēng)為驅(qū)動(dòng)程序

此驅(qū)動(dòng)程序進(jìn)程負(fù)責(zé)將用戶(hù)應(yīng)用程序轉(zhuǎn)換為稱(chēng)為任務(wù)的較小執(zhí)行單元。然后,這些任務(wù)由執(zhí)行程序執(zhí)行,執(zhí)行程序是運(yùn)行各個(gè)任務(wù)的工作進(jìn)程。

Spark Standalone

Spark Standalone集群管理器是一個(gè)簡(jiǎn)單的集群管理器,可作為Spark發(fā)行版的一部分。它具有主服務(wù)器的HA,對(duì)工作人員故障具有彈性,具有管理每個(gè)應(yīng)用程序資源的功能,并且可以與現(xiàn)有Hadoop部署一起運(yùn)行并訪(fǎng)問(wèn)HDFS(Hadoop分布式文件系統(tǒng))數(shù)據(jù)。該分發(fā)包括腳本,以便在Amazon EC2上本地或在云中輕松部署。它可以在Linux,Windows或Mac OSX上運(yùn)行。

Apache Mesos

Mesos通過(guò)動(dòng)態(tài)資源共享和隔離來(lái)處理分布式環(huán)境中的工作負(fù)載。在大規(guī)模集群環(huán)境中部署和管理應(yīng)用程序是健康的Mesos許多物理資源都是俱樂(lè)部成為單個(gè)虛擬資源Apache Mesos的三個(gè)組件是Mesos master,Mesos slave,F(xiàn)rameworks。

Mesos Master是群集的一個(gè)實(shí)例。群集具有許多提供容錯(cuò)的Mesos主服務(wù)器。從屬是Mesos實(shí)例,為群集提供資源。Mesos Framework允許應(yīng)用程序從集群請(qǐng)求資源

YARN> / strong>

YARN數(shù)據(jù)計(jì)算框架是ResourceManager,Nodemanager的組合。

資源管理器 - 管理系統(tǒng)中所有應(yīng)用程序之間的資源。在資源管理器具有調(diào)度器和應(yīng)用程序管理器。

Scheduler將資源分配給各種正在運(yùn)行的應(yīng)用程序。它是純調(diào)度程序,執(zhí)行應(yīng)用程序狀態(tài)的監(jiān)視或跟蹤。

Application Manager管理所有節(jié)點(diǎn)上的應(yīng)用程序。

紗線(xiàn)節(jié)點(diǎn)管理器包含應(yīng)用程序主和容器。容器是一個(gè)工作單元發(fā)生的地方。Application Master是一個(gè)特定于框架的庫(kù)。它旨在協(xié)調(diào)資源管理器中的資源。它繼續(xù)使用節(jié)點(diǎn)管理器來(lái)執(zhí)行和觀察任務(wù)。

四十六,什么是Apache Spark中的推測(cè)執(zhí)行?

在投機(jī)性任務(wù)在Apache的火花是驗(yàn)證任務(wù)推測(cè),這意味著運(yùn)行速度比成功完成任務(wù)的任務(wù)表中位數(shù)較慢的任務(wù)任務(wù)的運(yùn)行速度比在job.It任務(wù)的其余部分慢是健康檢查過(guò)程。這些任務(wù)被提交給另一名工人。它并行運(yùn)行新副本,而不是關(guān)閉慢速任務(wù)。

在集群部署模式,線(xiàn)程開(kāi)始為T(mén)askSchedulerImp1 與啟用spark.speculation 。它在初始spark.speculation.interval通過(guò)后定期執(zhí)行每個(gè)spark.speculation.interval

四十七,.使用Apache Spark時(shí),如何最大限度地減少數(shù)據(jù)傳輸?

在Spark中,可以通過(guò)避免導(dǎo)致數(shù)據(jù)混洗的操作來(lái)減少數(shù)據(jù)傳輸。

避免重新分區(qū)和合并,ByBey操作(如groupByKey和reduceByKey)以及聯(lián)合操作(如cogroup和join)之類(lèi)的操作。

Spark Shared Variables有助于減少數(shù)據(jù)傳輸。共享變量有兩種類(lèi)型 - 廣播變量和累加器。

廣播變量:

如果我們有一個(gè)大型數(shù)據(jù)集,而不是為每個(gè)任務(wù)傳輸數(shù)據(jù)集的副本,我們可以使用一個(gè)廣播變量,該變量可以一次復(fù)制到每個(gè)節(jié)點(diǎn),

并為該節(jié)點(diǎn)中的每個(gè)任務(wù)共享相同的數(shù)據(jù)。廣播變量有助于為每個(gè)節(jié)點(diǎn)提供大型數(shù)據(jù)集。

首先,我們需要使用SparkContext.broadcast創(chuàng)建一個(gè)廣播變量,然后將其廣播到驅(qū)動(dòng)程序的所有節(jié)點(diǎn)。值方法

可用于訪(fǎng)問(wèn)共享值。僅當(dāng)多個(gè)階段的任務(wù)使用相同數(shù)據(jù)時(shí),才會(huì)使用廣播變量。

累加器:

Spark函數(shù)使用驅(qū)動(dòng)程序中定義的變量,并生成變量的本地復(fù)制。累加器是共享變量,有助于

在執(zhí)行期間并行更新變量,并將工作者的結(jié)果共享給驅(qū)動(dòng)程序。

四十八。 Apache Spark超越Hadoop的情況是什么?

我們可以比較下面區(qū)域的Hadoop和Spark:

存儲(chǔ)
計(jì)算
計(jì)算速度
資源
與Hadoop相比,Spark的主要優(yōu)勢(shì)在于其計(jì)算速度.Spark具有:

閃電般快速的集群計(jì)算。
Apache Spark是一種用于大規(guī)模數(shù)據(jù)處理的快速通用引擎。
這個(gè)優(yōu)點(diǎn)是因?yàn)镽DD是火花的基本抽象。

除此之外,Spark架構(gòu)和Spark執(zhí)行引擎是Apache Spark與Hadoop相比速度更快的兩個(gè)原因。

Hadoop是批處理的理想選擇,而Spark可以進(jìn)行批處理以及迭代,交互式流處理。

四十九。什么是動(dòng)作,它如何在apache spark中處理數(shù)據(jù)

動(dòng)作返回RDD計(jì)算/操作的最終結(jié)果。它使用沿襲圖觸發(fā)執(zhí)行以將數(shù)據(jù)加載到原始RDD中,并執(zhí)行所有中間轉(zhuǎn)換并將最終結(jié)果返回給Driver程序或?qū)⑵鋵?xiě)出到文件系統(tǒng)。

例如:首先,take,reduce,collect,count,aggregate是spark中的一些動(dòng)作。

Action會(huì)將值返回給Apache Spark驅(qū)動(dòng)程序。它可能會(huì)觸發(fā)先前構(gòu)造的,懶惰的RDD進(jìn)行評(píng)估。這是一個(gè)生成非RDD值的RDD操作。Action函數(shù)實(shí)現(xiàn)Spark程序中的值。所以基本上一個(gè)動(dòng)作是RDD操作,它返回任何類(lèi)型的值,但RDD [T]是一個(gè)動(dòng)作。操作是從執(zhí)行程序向驅(qū)動(dòng)程序發(fā)送數(shù)據(jù)的兩種方法之一(另一種是累加器)

五十,如何在Apache Spark中實(shí)現(xiàn)容錯(cuò)?

Apache Spark中容錯(cuò)的基本語(yǔ)義是,所有Spark RDD都是不可變的。它通過(guò)在DAG中創(chuàng)建的沿襲圖表記住操作中涉及的每個(gè)RDD之間的依賴(lài)關(guān)系,并且在任何失敗的情況下,Spark指的是應(yīng)用相同操作來(lái)執(zhí)行任務(wù)的沿襲圖。

有兩種類(lèi)型的故障 - 工作者或驅(qū)動(dòng)程序故障。如果工作程序失敗,該工作節(jié)點(diǎn)中的執(zhí)行程序?qū)⑴c其內(nèi)存中的數(shù)據(jù)一起被終止。使用沿襲圖,這些任務(wù)將在任何其他工作節(jié)點(diǎn)中完成。數(shù)據(jù)也會(huì)復(fù)制到其他工作節(jié)點(diǎn)以實(shí)現(xiàn)容錯(cuò)。有兩種情況:

  1. 接收和復(fù)制的數(shù)據(jù) - 從源接收數(shù)據(jù),并在工作節(jié)點(diǎn)之間復(fù)制數(shù)據(jù)。在任何故障的情況下,數(shù)據(jù)復(fù)制將有助于實(shí)現(xiàn)容錯(cuò)。

2.已接收但尚未復(fù)制的數(shù)據(jù) - 從源接收數(shù)據(jù)但緩沖以進(jìn)行復(fù)制。如果發(fā)生任何故障,則需要從源檢索數(shù)據(jù)。

對(duì)于基于接收器的流輸入,容錯(cuò)基于接收器的類(lèi)型:

可靠的接收器 - 一旦接收和復(fù)制數(shù)據(jù),就會(huì)向源發(fā)送確認(rèn)。如果接收器發(fā)生故障,源將不會(huì)收到對(duì)接收數(shù)據(jù)的確認(rèn)。當(dāng)接收器重新啟動(dòng)時(shí),源將重新發(fā)送數(shù)據(jù)以實(shí)現(xiàn)容錯(cuò)。
不可靠的接收器 - 接收的數(shù)據(jù)將不會(huì)被確認(rèn)。在這種情況下,如果發(fā)生任何故障,源將不知道數(shù)據(jù)是否已被接收,并且它將不會(huì)重新發(fā)送數(shù)據(jù),因此會(huì)丟失數(shù)據(jù)。
為了克服這種數(shù)據(jù)丟失情況,Apache Spark 1.2中引入了寫(xiě)入前向記錄(WAL)。啟用WAL后,首先在日志文件中記下操作的意圖,這樣如果驅(qū)動(dòng)程序失敗并重新啟動(dòng),則該日志文件中的注釋操作可以應(yīng)用于數(shù)據(jù)。對(duì)于讀取流數(shù)據(jù)的源,如Kafka或Flume,接收器將接收數(shù)據(jù),這些數(shù)據(jù)將存儲(chǔ)在執(zhí)行程序的內(nèi)存中。啟用WAL后,這些接收的數(shù)據(jù)也將存儲(chǔ)在日志文件中。
可以通過(guò)執(zhí)行以下操作啟用WAL:
使用streamingContext.checkpoint(path)設(shè)置檢查點(diǎn)目錄
通過(guò)將spark.stream.receiver.WriteAheadLog.enable設(shè)置為T(mén)rue來(lái)啟用WAL日志記錄
希望大家多多關(guān)注,明天更新下半部。
有什么問(wèn)題可以加群,里面有大數(shù)據(jù)的學(xué)習(xí)資料哦! 群號(hào):871056591

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI