大數據分析平臺解析:什麼是Apache Spark?

2021-01-15 IT168

【IT168資訊】Apache Spark是一款快速、靈活且對開發者友好的工具,也是大型SQL、批處理、流處理和機器學習的領先平臺。

2009年,Apache Spark從美國U.C. Berkeley的 AMPLab為起步,現在已經成為世界上主要的大數據分布式處理框架之一。Spark可以以各種方式進行部署,為Java、Scala、Python和R程式語言提供本地綁定,並支持SQL、流數據、機器學習和圖形處理。已經被銀行、電信公司、遊戲公司、政府以及蘋果、Facebook、IBM和微軟等領域的企業和科技巨頭所使用。

Spark開箱即用,可以在獨立的集群模式中運行,只需要在集群中的每臺計算機上使用Apache Spark框架和JVM即可。然而,用戶更希望利用資源或集群管理系統負責分配需求到員工手中。在企業中,這通常都是在Hadoop YARN上運行(這是Cloudera和Hortonworks發行版運行Spark作業的方式),但Apache Spark也可以在Apache Mesos上運行。同時,其在為Kubernetes添加本地支持方面也取得了進展。

如果正在處理一個託管解決方案,那麼可以在Amazon EMR,Google Cloud Dataproc和Microsoft Azure HDInsight中找到Apache Spark。擁有Apache Spark創始人的Databricks公司,也提供Databricks統一分析平臺。這是一個全面的託管服務,提供Apache Spark集群、流支持、集成的基於Web的notebook開發,以及在標準Apache Spark發行版中優化的雲I / O性能.

Spark VS Hadoop

目前,大多數Hadoop發行版中都包含了Spark。但是由於Spark本身的兩大優勢,使Spark在處理大數據時已經成為首選框架,超越了Hadoop 引入MapReduce範例。

第一個優勢是速度。Spark的內存數據引擎在某些情況下,可以執行比MapReduce快一百倍的任務,特別是與需要在stage之間將狀態寫回到磁碟的多級作業相比。即使Apache Spark的作業數據不能完全包含在內存中,但也比MapReduce快10倍左右。

第二個優勢是交互友好的Spark API。與Spark加速一樣重要的是,用戶認為Spark API的友好性更為重要。

Spark核心

與MapReduce和其他Apache Hadoop組件相比,Apache Spark API對開發人員非常友好,在簡單的方法調用後,隱藏了分布式處理引擎的許多複雜性。典型的例子是,幾乎50行MapReduce代碼在文檔中計算單詞的數量在可以減少到只有幾行代碼(這裡顯示在Scala中):

通過提供與Python和R等數據分析流行語言的綁定,以及對企業更友好的Java和Scala的綁定,Apache Spark使應用程式開發人員和數據科學家以可訪問的方式利用其可擴展性和速度。

Spark RDD

Apache Spark的核心是彈性分布式數據集(Resilient Distributed Dataset,RDD),是一中抽象編程,它是跨計算集群拆分的不可變對象的集合。在RDD上的操作也可以跨集群進行,並在並行處理過程中執行,從而實現快速可擴展的並行處理。

RDD可以通過簡單的文本文件、SQL資料庫、NoSQL存儲(如Cassandra和MongoDB)以及Amazon S3存儲等來創建。Spark Core API的大部分構建在RDD概念之上,支持傳統的映射,還為連接數據集、過濾、採樣和聚合提供了內置支持。

Spark通過結合驅動程序核心進程,以分布式方式運行,該進程將Spark應用程式分解成任務,並將其分發到工作的執行程序進程中,這些執行程序可以根據應用程式的需要進行擴展和縮減。

Spark SQL

Spark SQL最初被稱為「Shark」,現在對Apache Spark項目變得越來越重要。它可能是當今開發人員在創建應用程式時最常用的界面,Spark SQL專注於結構化數據處理,使用從R和Python(在Pandas中)借用的數據框架方法。正如它的名字,Spark SQL還提供了一個SQL2003兼容接口來查詢數據,將Apache Spark的強大功能帶給分析師和開發人員。

除了標準的SQL支持,Spark SQL還提供了一個標準接口,用於讀取和寫入其他數據存儲,包括JSON、HDFS、Apache Hive、JDBC、Apache ORC和Apache Parquet,所有這些都支持開箱即用。例如Apache Cassandra、MongoDB、Apache HBase以及其他許多受歡迎的資料庫,可以通過從Spark Packages生態系統中提取單獨的連接器來使用。

從dataframe中選擇列:

使用SQL接口,將dataframe註冊為臨時表,之後對它發出SQL查詢:

在後臺,Apache Spark使用名為Catalyst的查詢優化器來檢查數據和查詢,以便為數據局部性和計算提供高效的查詢計劃,在整個集群中執行所需的計算。在Apache Spark 2.x中,dataframes和datasets的Spark SQL接口(實質上是一個類型化的數據框,可以在編譯時檢查正確性,並在運行時利用進一步的內存和計算優化)是推薦的開發方法。RDD接口仍然可用,但只有在無法在Spark SQL範例中封裝的情況下才推薦使用。

Spark MLlib

Apache Spark還捆綁了一些用於將機器學習和圖形分析技術應用於數據的庫。Spark MLlib包含一個用於創建機器學習管道的框架,允許在任何結構化數據集上輕鬆實現特徵提取、選擇和轉換。MLLib採用分布式實現的集群和分類算法,如k均值聚類和隨機森林,可輕鬆地在自定義管道中交換。模型可以由Apache Spark的數據科學家使用R或Python進行培訓,MLLib保存,然後導入到基於Java或Scala的管道中供生產使用。

雖然Spark MLlib涵蓋了基本的機器學習,包括分類、回歸、聚類和過濾,但它不包含建模和訓練深度神經網絡的功能。

Spark GraphX

Spark GraphX提供了一系列用於處理圖形結構的分布式算法,包括Google的PageRank的實現。這些算法使用Spark Core的RDD方法來建模數據; GraphFrames包允許在dataframe上做圖形操作,包括利用Catalyst優化器進行圖查詢。

Spark Streaming

Spark Streaming是Apache Spark的早期添加物,它幫助在需要實時或接近實時處理的環境中獲得牽引力。以前,Apache Hadoop領域的批處理和流處理是分開的。可以為批處理需求編寫MapReduce代碼,並使用像Apache Storm這樣的實時流媒體。這顯然導致不同的代碼庫需要保持同步的應用程式域,儘管是基於完全不同的框架,需要不同的資源。

Spark Streaming將Apache Spark的批處理概念擴展到流,通過將流分解為連續的一系列微格式,然後使用Apache Spark API進行操作。通過這種方式,批處理和流操作中的代碼可以共享(大部分)相同的代碼,運行在同一個框架上,從而減少開發人員和操作員的開銷。

對Spark Streaming方法的一個批評是:在需要對傳入數據進行低延遲響應的情況下,microbatching可能無法與Apache Storm、Apache Flink和Apache Apex等其他支持流的框架的性能相匹配,所有這些都使用純粹的流媒體方法而不是微型媒體。

結構化流媒體

結構化流式處理(在Spark 2.x中添加)將影響Spark SQL對Spark API進行Spark流式處理,結果將是更高級別的API,更易於編寫應用程式。在結構化流的情況下,高級API本質上允許開發人員創建無限流式數據框和數據集。它還解決了用戶在早期框架中遇到的一些非常真實的痛點,尤其是在處理事件時間聚合和延遲傳遞消息方面。結構化流的所有查詢都通過Catalyst查詢優化器,甚至可以交互方式運行,允許用戶對實時流數據執行SQL查詢。

結構化數據流在Apache Spark中仍然是一個新部分,在Spark 2.2發行版中已經被標記為生產就緒。但是,結構化流是面向平臺的流媒體應用程式的未來,因此如果要構建新的流式傳輸應用程式,應該使用結構化流式處理。傳統的Spark Streaming API將繼續得到支持,但是該項目建議移植到結構化流式處理,因為新方法使得編寫和維護流代碼更容易。

Apache Spark的下一步是什麼?

儘管結構化流式傳輸為Spark Streaming提供了高級改進,但它目前依賴於處理流式數據的相同的微處理方案。Apache Spark團隊正在努力為平臺帶來連續的流媒體處理,這應該能夠解決許多處理低延遲響應的問題(聲稱大約1ms,這將會非常令人印象深刻)。

除此之外,Apache Spark還將通過深度學習管道增加對深度學習的支持。使用MLlib的現有管道結構,將能夠在幾行代碼中構建分類器,並自定義Tensorflow圖形或Keras模型應用於傳入數據。這些圖表和模型甚至可以註冊為自定義的Spark SQL UDF(用戶定義的函數),以便深度學習模型可以作為SQL語句的一部分應用於數據。

相關焦點

  • 大數據分析工程師入門9-Spark SQL
    大數據處理使用SQL進行大數據處理,使傳統的RDBMS人員也可以進行大數據處理,不需要掌握像mapreduce的編程方法。自動解析分區類型的參數為:spark.sql.sources.partitionColumnTypeInference.enabled,默認值為true。可以關閉該功能,直接將該參數設置為disabled。此時,分區列數據格式將被默認設置為string類型,不會再進行類型解析。
  • Spark在360商業數據部的應用實踐
    2) 不能很好的支持像機器學習、實時處理這種新的大數據處理需求。Spark作為新一代大數據處理的計算平臺,使得我們可以用Spark這一種平臺統一處理數據處理的各種複雜需求,非常好的支持了我們目前現有的業務。與原有MapReduce模型相比,其具有下面3個特點:1) 充分使用內存作為框架計算過程存儲的介質,與磁碟相比大大提高了數據讀取速度。
  • PySpark源碼解析,用Python調用高效Scala接口,搞定大規模數據分析
    ,auth_token=gateway_secret,auto_convert=True))#ImporttheclassesusedbyPySparkjava_import(gateway.jvm,"org.apache.spark.SparkConf")java_import(gateway.jvm,"org.apache.spark.api.java.*")java_import(gateway.jvm
  • 數據分析工程師面試集錦5——Spark面試指南
    對於任何一家已經部署好Hadoop基礎集群的企業來說,在不需要進行任何數據遷移和處理的情況下,就可以快速使用上Spark強大的數據處理和計算能力。可以說Spark幾乎是企業搭建大數據平臺必備組件,作為數據分析工程師在工作中執行程序、調試程序、查詢數據都會和Spark打交道,所以對Spark知識的考察也就順理成章了。
  • 大數據分析工程師面試集錦3-SQL/SparkSql/HiveQL
    大數據分析工程師80%的時間都在與SQL打交道,通過SQL完成業務方的各種臨時性需求分析和常規性報表統計。熟練的SQL技能能夠大大提高工作效率。本文將SQL/SparkSql/HiveQL放在一起來梳理一份常見題型的面試題庫。
  • 大數據掃盲——什麼是spark
    關於大數據技術之前的文章裡已經提到了HDFS和MapReduce。HDFS解決了大數據的存儲問題,MapReduce解決了大數據的運算問題。既能存儲又能運算,貌似這樣已經很完美了。spark的出現就彌補了MapReduce的不足。 spark是一種基於內存的快速、通用、可擴展的大數據計算引擎。它集批處理、實時流處理、交互式查詢、圖計算與機器學習於一體Spark應用場景批處理可用於ETL(抽取、轉換、加載)。 機器學習可用於自動判斷淘寶的買家評論是好評還是差評。 交互式分析可用於查詢Hive數據倉庫。
  • Spark運行模式——Local模式
    首先需要下載Spark1.官網地址 http://spark.apache.org/2.文檔查看地址 https://spark.apache.org/docs/2.1.1/3.下載地址 https://archive.apache.org/dist/spark/Local
  • 停止使用Pandas並開始使用Spark+Scala
    · 為什麼要在Spark上使用Scala和Pandas  · Scala Spark API與Pandas API的實際區別不大  · 如何開始使用Jupyter筆記本電腦或您喜歡的IDE  什麼是Spark?
  • 量化派基於Hadoop、Spark、Storm的大數據風控架構
    量化派的業務也決定了公司是數據驅動型的。為了更好的滿足公司日益增長變化的業務,在大數據平臺建設中全面擁抱開源的基礎上,進行了不停迭代設計,對數據平臺中採用的開源軟體進行了深度應用開發,同時還開發了很多契合業務需求的工具軟體,很好的支撐我們去實現普惠金融的理想。量化派公司的數據平臺架構如圖二所示。
  • 深入對比數據科學工具箱: SparkR vs Sparklyr
    SparkR 文檔:http://spark.apachecn.org/docs/cn/2.3.0/structured-streaming-programming-guide.html       Sparklyr 文檔:https://spark.rstudio.com
  • 大數據分析與數據分析的根本區別在哪裡?
    作者:CDA數據分析師大數據分析與數據分析這幾年一直都是個高頻詞,很多人都開始紛紛轉行到這個領域,也有不少人開始躍躍欲試,想找準時機進到大數據或數據分析領域。如今大數據分析和數據分析火爆,要說時機,可謂處處都是時機,關鍵要明了的一點是,大數據分析和數據分析兩者的根本區別在哪裡,只有真正了解了,才會知曉更加適合自己的領域是大數據分析師還是數據分析師。畢竟職場如戰場,時間就是生活,不容兒戲,更不容怠慢。下面我來好好告訴大家兩者的本質區別到底是什麼!大數據分析:指無法在可承受的時間範圍內用常規軟體工具進行捕捉、管理和處理的數據集合。
  • 手把手教你在本機安裝spark
    言歸正傳,spark鼎鼎大名,凡是搞分布式或者是大數據的應該都聽說過它的大名。它是apache公司開發的一個開源集群計算框架,也就是分布式計算框架。相比於Hadoop的MapReduce,它支持更多的功能,並且運算速度也更快,如今已經成了非常主流的大數據計算框架。幾乎各大公司當中都有它的身影。
  • 大數據開發是做什麼的?需要具備什麼技能?
    大數據開發、數據倉庫、數據安全、數據分析、數據挖掘等都是圍繞大數據的商業價值應運而生。大數據開發主要分為大數據平臺開發(研發級)、大數據應用開發和大數據分析(統計學和機器學習),不同崗位需要面對不同的崗位職責,也需要具備不同的知識結構。大數據開發做什麼?
  • 學習大數據分析要什麼基礎,零基礎入門ok嗎?
    CDA數據分析師原創作品身處21世紀的今天,數據分析行業急劇發展,越來越多的企業已經意識到大數據分析的重要性和發展潛力,同時越來越多的傳統行業公司開始轉型升級,開始引入並發展專屬自己的大數據分析部門及崗位。
  • 【大數據】最新大數據學習路線(完整詳細版】
    ,redis)Spark(scala,spark,spark core,spark sql,spark streaming,spark mllib,spark graphx)Python(python,spark python)?
  • 每個數據科學家都得會一點SparkMagic
    其實,數據科學家生產率低下的主要原因在於數據準備工作的雙重性:· 快速訪問、合併和聚合存儲在企業數據湖中的大數據· 探索和可視化數據中具有複雜依賴關係的Python數據包中的數據和統計信息大數據大多是非結構化的,常常存儲在具有企業管理和安全限制的生產環境中。
  • GPU上的隨機森林:比Apache Spark快2000倍
    SparkApache Spark是一個在Scala中構建的開源大數據處理引擎,它有一個Python接口,可以調用Scala/JVM代碼。它是Hadoop處理生態系統中的一個重要組成部分,圍繞MapReduce範例構建,並且具有用於數據幀和機器學習的接口。
  • Talking Data 閻志濤:流式大數據和即時交互分析技術
    大數據技術逐漸變成企業的標配,漫長的等待數據分析結果已經不合時宜,延遲更低的流式大數據處理技術,即時分析變得越來越重要。在本論壇將給大家帶來行業中領先的流式大數據,即時交互式分析技術的相關分享。大數據應用論壇以「流式大數據和即時交互分析技術」為主題,邀請閻志濤 (TalkingData研發副總裁)擔任論壇出品人,網易資深數據研發工程師黃祥為、蘇寧易購IT總部大數據平臺高級技術經理陳豐、中東新媒體首席架構師王成光、武漢光電國家研究中心謝長生教授等嘉賓發言探討。以下內容根據演講整理,未經本人審定。
  • 烏海spark培訓_博雅環球教育放心之選
    烏海spark培訓,博雅環球教育放心之選,是以網際網路企業技術研發、軟體開發、大數據分析、雲計算、人工智慧開發應用等網際網路技術為依託,以校企專業共建,崗前技能實訓,高薪就業安置,網際網路人才外包服務等業務為核心的高端就業培訓。烏海spark培訓, Oracle認證講師、Microsoft認證講師。