大數(shù)據(jù)技術(shù):Apache Spark學(xué)習(xí)研究

      網(wǎng)友投稿 938 2025-03-31

      1?????????引言


      Apache Spark是一個(gè)快速的大數(shù)據(jù)和機(jī)器學(xué)習(xí)統(tǒng)一分析引擎。

      Apache Spark是一個(gè)開源的分布式通用集群計(jì)算框架。

      Spark為整個(gè)集群的編程提供了一個(gè)隱式數(shù)據(jù)并行和容錯(cuò)的接口。

      Spark代碼庫(kù)最初是在加州大學(xué)伯克利分校的AMP實(shí)驗(yàn)室開發(fā)的,后來(lái)被捐贈(zèng)給了Apache軟件基金會(huì),并由該基金會(huì)維護(hù)至今。

      2?????????Apache Spark架構(gòu)

      在基本層面上,一個(gè)Apache Spark應(yīng)用由兩個(gè)主要組件組成:一個(gè)是驅(qū)動(dòng)程序,它將用戶的代碼轉(zhuǎn)換為多個(gè)任務(wù),這些任務(wù)可以分布在工人節(jié)點(diǎn)上。另一個(gè)是執(zhí)行器,它在這些節(jié)點(diǎn)上運(yùn)行并執(zhí)行分配給它們的任務(wù)。某種形式的集群管理器是必要的,以調(diào)解兩者之間的關(guān)系。

      開箱即用,Spark可以在獨(dú)立的集群模式下運(yùn)行,只需要在你的集群中的每臺(tái)機(jī)器上安裝Apache Spark框架和一個(gè)JVM。然而,更有可能的是,你會(huì)希望利用一個(gè)更強(qiáng)大的資源或集群管理系統(tǒng)來(lái)為你按需分配工作資源。在企業(yè)中,這通常意味著在Hadoop YARN上運(yùn)行(Cloudera和Hortonworks發(fā)行版就是這樣運(yùn)行Spark作業(yè)的),但Apache Spark也可以在Apache Mesos、Kubernetes和Docker Swarm上運(yùn)行。

      如果你尋求一個(gè)管理解決方案,那么Apache Spark可以作為Amazon EMR、Google Cloud Dataproc和Microsoft Azure HDInsight的一部分。聘請(qǐng)Apache Spark創(chuàng)始人的Databricks公司也提供了Databricks統(tǒng)一分析平臺(tái),這是一個(gè)全面的管理服務(wù),在標(biāo)準(zhǔn)的Apache Spark發(fā)行版上提供Apache Spark集群、流媒體支持、集成的基于Web的筆記本開發(fā)和優(yōu)化的云I/O性能。

      Apache Spark將用戶的數(shù)據(jù)處理命令構(gòu)建成一個(gè)定向無(wú)環(huán)圖,或稱DAG。DAG是Apache Spark的調(diào)度層。它決定在什么節(jié)點(diǎn)上以什么順序執(zhí)行什么任務(wù)。

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

      2.1.1????什么選擇Apache Spark?

      Spark從下而上的性能設(shè)計(jì),通過利用內(nèi)存計(jì)算和其他優(yōu)化,在大規(guī)模數(shù)據(jù)處理方面,Spark可以比Hadoop快100倍。當(dāng)數(shù)據(jù)存儲(chǔ)在磁盤上時(shí),Spark的速度也很快,目前保持著大規(guī)模磁盤上排序的世界紀(jì)錄。

      Spark擁有易于使用的API,用于對(duì)大型數(shù)據(jù)集進(jìn)行操作。這包括100多個(gè)用于轉(zhuǎn)換數(shù)據(jù)的操作符和熟悉的用于操作半結(jié)構(gòu)化數(shù)據(jù)的數(shù)據(jù)框架API的集合。

      Spark打包了更高級(jí)別的庫(kù),包括對(duì)SQL查詢、流數(shù)據(jù)、機(jī)器學(xué)習(xí)和圖形處理的支持。這些標(biāo)準(zhǔn)庫(kù)提高了開發(fā)人員的工作效率,并且可以無(wú)縫組合以創(chuàng)建復(fù)雜的工作流程。

      2.2????Spark Core

      與MapReduce和其他Apache Hadoop組件相比,Apache Spark API對(duì)開發(fā)者非常友好,將分布式處理引擎的大部分復(fù)雜性隱藏在簡(jiǎn)單的方法調(diào)用背后。這方面的典范例子是,近50行MapReduce代碼如何被簡(jiǎn)化為只有幾行的Apache Spark(這里用Scala):

      val?textFile?=?sparkSession.sparkContext.textFile(“hdfs:///tmp/words”)

      val?counts?=?textFile.flatMap(line?=>?line.split(“?“))

      .map(word?=>?(word,?1))

      .reduceByKey(_?+?_)

      counts.saveAsTextFile(“hdfs:///tmp/words_agg”)

      通過提供與Python和R等流行的數(shù)據(jù)分析語(yǔ)言的綁定,以及對(duì)企業(yè)更友好的Java和Scala,Apache Spark讓每個(gè)人,從應(yīng)用開發(fā)者到數(shù)據(jù)科學(xué)家,都能以一種可訪問的方式利用其可擴(kuò)展性和速度。

      2.3????Spark RDD

      Apache Spark的核心是彈性分布式數(shù)據(jù)集(RDD)的概念,這是一個(gè)編程抽象,它代表了一個(gè)不可改變的對(duì)象集合,可以在計(jì)算集群中分割。對(duì)RDDs的操作也可以跨集群分割,并以并行批處理的方式執(zhí)行,從而實(shí)現(xiàn)快速、可擴(kuò)展的并行處理。

      RDDs可以從簡(jiǎn)單的文本文件、SQL數(shù)據(jù)庫(kù)、NoSQL存儲(chǔ)(如Cassandra和MongoDB)、Amazon S3桶等創(chuàng)建,除此之外還有更多。Spark核心API的大部分內(nèi)容都是建立在這個(gè)RDD概念上的,不僅實(shí)現(xiàn)了傳統(tǒng)的map和reduce功能,還提供了對(duì)加入數(shù)據(jù)集、過濾、采樣和聚合的內(nèi)置支持。

      Spark以分布式的方式運(yùn)行,通過結(jié)合一個(gè)驅(qū)動(dòng)核心進(jìn)程,將Spark應(yīng)用分割成任務(wù),并將它們分配到許多執(zhí)行者進(jìn)程中進(jìn)行處理。這些執(zhí)行器可以根據(jù)應(yīng)用的需要進(jìn)行擴(kuò)展和縮減。

      2.4????Spark SQL

      Spark SQL最初被稱為Shark,它對(duì)于Apache Spark項(xiàng)目來(lái)說(shuō)已經(jīng)變得越來(lái)越重要。它很可能是今天的開發(fā)者在創(chuàng)建應(yīng)用程序時(shí)最常用的接口。Spark SQL專注于結(jié)構(gòu)化數(shù)據(jù)的處理,使用從R和Python(在Pandas中)借鑒的數(shù)據(jù)框架方法。但正如其名,Spark SQL還提供了一個(gè)符合SQL2003標(biāo)準(zhǔn)的數(shù)據(jù)查詢接口,為分析師以及開發(fā)人員帶來(lái)了Apache Spark的強(qiáng)大功能。

      除了標(biāo)準(zhǔn)的SQL支持,Spark SQL還提供了一個(gè)標(biāo)準(zhǔn)的接口來(lái)讀取和寫入其他數(shù)據(jù)存儲(chǔ),包括JSON、HDFS、Apache Hive、JDBC、Apache ORC和Apache Parquet,所有這些都是開箱即用的支持。其他流行的存儲(chǔ)--Apache Cassandra、MongoDB、Apache HBase和許多其他存儲(chǔ)--可以通過從Spark Packages生態(tài)系統(tǒng)中拉入單獨(dú)的連接器來(lái)使用。

      從一個(gè)數(shù)據(jù)框架中選擇一些列就像這一行一樣簡(jiǎn)單:

      citiesDF.select(“name”,?“pop”)

      使用SQL接口,我們將數(shù)據(jù)框注冊(cè)為一個(gè)臨時(shí)表,之后我們就可以對(duì)它發(fā)出SQL查詢:

      citiesDF.createOrReplaceTempView(“cities”)

      spark.sql(“SELECT?name,?pop?FROM?cities”)

      在幕后,Apache Spark使用了一個(gè)名為Catalyst的查詢優(yōu)化器,它可以檢查數(shù)據(jù)和查詢,以產(chǎn)生一個(gè)高效的數(shù)據(jù)定位和計(jì)算的查詢計(jì)劃,在整個(gè)集群中執(zhí)行所需的計(jì)算。在Apache Spark 2.x時(shí)代,數(shù)據(jù)框和數(shù)據(jù)集的Spark SQL接口(本質(zhì)上是一個(gè)類型化的數(shù)據(jù)框,可以在編譯時(shí)檢查其正確性,并在運(yùn)行時(shí)利用進(jìn)一步的內(nèi)存和計(jì)算優(yōu)化)是推薦的開發(fā)方法。RDD接口仍然可用,但只有在你的需求無(wú)法在Spark SQL范式中解決時(shí)才推薦使用。

      Spark 2.4引入了一組內(nèi)置的高階函數(shù),用于直接操作數(shù)組和其他高階數(shù)據(jù)類型。

      2.5????Spark MLlib

      Apache Spark還捆綁了用于將機(jī)器學(xué)習(xí)和圖形分析技術(shù)大規(guī)模應(yīng)用于數(shù)據(jù)的程序庫(kù)。Spark MLlib包括一個(gè)用于創(chuàng)建機(jī)器學(xué)習(xí)管道的框架,可以在任何結(jié)構(gòu)化數(shù)據(jù)集上輕松實(shí)現(xiàn)特征提取、選擇和轉(zhuǎn)換。MLlib帶有聚類和分類算法的分布式實(shí)現(xiàn),如k-means聚類和隨機(jī)森林,可以輕松地在自定義管道中交換。數(shù)據(jù)科學(xué)家可以使用R或Python在Apache Spark中訓(xùn)練模型,使用MLlib保存,然后導(dǎo)入到基于Java或基于Scala的流水線中進(jìn)行生產(chǎn)使用。

      請(qǐng)注意,雖然Spark MLlib涵蓋了基本的機(jī)器學(xué)習(xí),包括分類、回歸、聚類和過濾,但它并不包括用于建模和訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)的機(jī)制設(shè)施。不過,深度學(xué)習(xí)管道正在開發(fā)中。

      2.6????Spark GraphX

      Spark GraphX附帶了一系列處理圖結(jié)構(gòu)的分布式算法,包括Google的PageRank的實(shí)現(xiàn)。這些算法使用Spark Core的RDD方法對(duì)數(shù)據(jù)進(jìn)行建模。GraphFrames包允許你對(duì)數(shù)據(jù)框進(jìn)行圖操作,包括利用Catalyst優(yōu)化器進(jìn)行圖查詢。

      2.7????Spark Streaming

      Spark Streaming是Apache Spark的早期新增功能,它幫助Apache Spark在需要實(shí)時(shí)或接近實(shí)時(shí)處理的環(huán)境中獲得了吸引力。以前,在Apache Hadoop的世界里,批處理和流處理是分開的。你將為你的批處理需求編寫MapReduce代碼,并使用類似Apache Storm這樣的東西來(lái)滿足你的實(shí)時(shí)流處理需求。這顯然會(huì)導(dǎo)致不同的代碼庫(kù),盡管它們基于完全不同的框架,需要不同的資源,并涉及到運(yùn)行它們的不同操作關(guān)注點(diǎn),但需要為應(yīng)用領(lǐng)域保持同步。

      對(duì)Spark Streaming方法的批評(píng)是,在需要對(duì)傳入數(shù)據(jù)進(jìn)行低延遲響應(yīng)的場(chǎng)景中,微批處理可能無(wú)法與其他支持流媒體的框架(如Apache Storm、Apache Flink和Apache Apex)的性能相媲美,這些框架都使用純流媒體方法而不是微批處理。

      2.8????結(jié)構(gòu)化流

      Structured Streaming(在Spark 2.x中添加)對(duì)于Spark Streaming來(lái)說(shuō),就像Spark SQL對(duì)于Spark Core APIs一樣。一個(gè)更高級(jí)別的API和更容易編寫應(yīng)用的抽象。在結(jié)構(gòu)化流的情況下,更高級(jí)別的API本質(zhì)上允許開發(fā)者創(chuàng)建無(wú)限的流式數(shù)據(jù)框和數(shù)據(jù)集。它還解決了用戶在早期框架中苦惱的一些非常現(xiàn)實(shí)的痛點(diǎn),特別是關(guān)于處理事件時(shí)間聚合和消息延遲傳遞的問題。所有對(duì)結(jié)構(gòu)化流的查詢都要經(jīng)過Catalyst查詢優(yōu)化器,甚至可以以交互方式運(yùn)行,讓用戶對(duì)實(shí)時(shí)流數(shù)據(jù)進(jìn)行SQL查詢。

      結(jié)構(gòu)化流最初是依靠Spark Streaming的微批處理流數(shù)據(jù)的方案。但在Spark 2.3中,Apache Spark團(tuán)隊(duì)為Structured Streaming增加了低延遲的連續(xù)處理模式,使其可以處理延遲低至1ms的響應(yīng),這是非常了不起的。截至Spark 2.4,連續(xù)處理仍然被認(rèn)為是實(shí)驗(yàn)性的。結(jié)構(gòu)化流處理是建立在Spark SQL引擎之上的,而持續(xù)流處理只支持一組受限的查詢。

      結(jié)構(gòu)化流是未來(lái)的流應(yīng)用與平臺(tái),所以如果你正在構(gòu)建一個(gè)新的流應(yīng)用,你應(yīng)該使用結(jié)構(gòu)化流。傳統(tǒng)的Spark Streaming API將繼續(xù)得到支持,但項(xiàng)目建議移植到Structured Streaming上,因?yàn)樾碌姆椒ㄗ尵帉懞途S護(hù)流媒體代碼變得更加容易。

      2.9????深度學(xué)習(xí)管道

      Apache Spark?通過深度學(xué)習(xí)管道支持深度學(xué)習(xí)。利用?MLlib?現(xiàn)有的管道結(jié)構(gòu),你可以調(diào)用到低級(jí)的深度學(xué)習(xí)庫(kù),只需幾行代碼就可以構(gòu)建分類器,還可以將自定義的?TensorFlow?圖或?Keras?模型應(yīng)用到傳入的數(shù)據(jù)中。這些圖形和模型甚至可以注冊(cè)為自定義的Spark SQL UDF(用戶定義函數(shù)),這樣深度學(xué)習(xí)模型就可以作為SQL語(yǔ)句的一部分應(yīng)用到數(shù)據(jù)中。

      3?????????參考

      https://databricks.com/spark/

      https://en.wikipedia.org/wiki/Apache_Spark

      https://en.wikipedia.org/wiki/List_of_concurrent_and_parallel_programming_languages#APIs/frameworks

      https://en.wikipedia.org/wiki/Apache_Hadoop

      https://databricks.com/spark/about

      https://spark.apache.org/

      大數(shù)據(jù)技術(shù):Apache Spark學(xué)習(xí)研究

      Apache spark 大數(shù)據(jù)

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:WPS表格技巧—多種方式設(shè)置貨幣符號(hào)(wps中如何設(shè)置貨幣符號(hào))
      下一篇:工作流系統(tǒng)(工作流開發(fā))
      相關(guān)文章
      亚洲中文字幕乱码AV波多JI| 亚洲成av人在线观看网站| 亚洲小说区图片区| 国产AV无码专区亚洲AWWW| 亚洲日韩在线中文字幕第一页| 亚洲av色香蕉一区二区三区| 亚洲久悠悠色悠在线播放| 亚洲久悠悠色悠在线播放| 亚洲中文字幕无码av在线| 亚洲丝袜中文字幕| 亚洲乱码在线卡一卡二卡新区| ASS亚洲熟妇毛茸茸PICS| 亚洲综合国产成人丁香五月激情| 国产人成亚洲第一网站在线播放| 日韩亚洲产在线观看| 亚洲精品乱码久久久久蜜桃| 含羞草国产亚洲精品岁国产精品| 麻豆亚洲AV成人无码久久精品 | 亚洲av永久无码精品国产精品| 亚洲日韩中文无码久久| 亚洲日产韩国一二三四区| 国产亚洲精品精华液| 香蕉视频在线观看亚洲| 国产av天堂亚洲国产av天堂 | 亚洲依依成人精品| 中文字幕乱码亚洲无线三区| 亚洲国产精品成人AV在线| 亚洲AV无码成H人在线观看 | 亚洲激情视频网站| 狠狠色伊人亚洲综合网站色| 亚洲国产一区二区三区在线观看| 麻豆亚洲AV成人无码久久精品| 亚洲国产精品无码久久青草| 亚洲综合图色40p| 亚洲电影中文字幕| jlzzjlzz亚洲jzjzjz| 亚洲av永久无码| 国产成人亚洲精品影院| 久久精品亚洲一区二区| 亚洲国产视频网站| 亚洲va中文字幕|