日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 默认站点!

默认站点

當前位置: 首頁 >

使用Apache Ignite优化Spark作业性能(第1部分)

發布時間:2023/12/3 22 豆豆
默认站点 收集整理的這篇文章主要介紹了 使用Apache Ignite优化Spark作业性能(第1部分) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

快來看看他們是如何工作的!

本文的某些部分摘自我的書《 Apache Ignite的高性能內存計算》 。 如果您對這篇文章感興趣,請查看本書的其余部分,以獲取更多有用的信息。

Apache Ignite提供了幾種提高Spark作業性能的方法:Ignite RDD(將Ignite緩存表示為Spark RDD抽象)和Ignite IGFS(可透明地插入Spark部署中的內存文件系統)。 Ignite RDD允許輕松地在不同的Spark作業或應用程序之間共享內存中的狀態。 使用Ignite內存共享RDD,任何Spark作業都可以將一些數據放入Ignite緩存中,其他Spark作業以后可以訪問。 Ignite RDD是作為Ignite分布式緩存上的視圖實現的,該緩存可以部署在Spark作業執行過程中或Spark工作者上。

在繼續討論更高級的主題之前,讓我們看一下Spark的歷史以及Ignite RDD可以解決哪些類型的問題。

AMPLab發明了Apache Spark來進行快速計算。 它建立在Hadoop MapReduce之上,并擴展了MapReduce模型以有效使用更多類型的操作,例如交互式查詢和流處理。

Spark和Hadoop MapReduce之間的主要區別在于,在執行過程中,Spark嘗試將數據保留在內存中,而Hadoop MapReduce將數據混入和移出磁盤。 Hadoop MapReduce花費大量時間將中間數據寫入磁盤并回讀。 消除了這些冗余磁盤操作,使Spark幅值更快。 Spark可以將數據(中間)存儲到內存中,而無需任何I / O,因此您可以非常快速地對相同數據進行操作。

為了將數據存儲到內存中,Spark提供了名為Spark RDD的特殊數據集。 Spark RDD代表Spark彈性分布式數據集。 Spark RDD具有Apache Spark大規模數據處理框架的基本組件。 下圖顯示了Spark RDD上的迭代操作。

請注意,上圖是從Spark文檔獲得的。 Spark RDD是一個不變的,容錯的分布式數據元素集合。 您可以將Spark RDD想象為內存中的Hadoop HDFS。 Spark RDD支持兩種類型的操作:

  • 轉換,從現有數據集中創建新數據集
  • 動作,通過對RDD進行計算來返回值(如下圖所示)
  • 通過使用Spark轉換功能來創建Spark RDD。 Spark轉換功能可以從各種來源(例如文本文件)創建Spark RDD。 除了從文本文件創建Spark RDD外,還可以從外部存儲(例如RDBMS,HBase,Cassandra或與Hadoop輸入格式兼容的任何其他數據源)創建Spark RDD。

    大多數時候,Spark RDD會從一個RDD轉換為另一個新的Spark RDD,以便為將來的處理準備數據集。 讓我們考慮一下Spark中的以下數據轉換步驟:

  • 加載文本文件,其中包含RDD1中任何機場的航空公司名稱和到達時間。
  • 將包含任何機場的航空公司名稱和航班延誤信息的文本文件加載到RDD2中。
  • 通過航空公司名稱將RDD1和RDD2加入,以獲得RDD3。
  • 映射到RDD3以獲得每個航空公司的RDD4不錯的報告。
  • 將RDD4保存到文件。
  • 映射RDD2以提取某些航空公司的航班延誤信息,以獲取RDD5。
  • 將RDD5匯總起來,就可以算出每家航空公司的延誤航班數為RDD6。
  • 將RDD6保存到HDFS。
  • Spark RDD用于通過Spark操作(例如)對RDD數據集執行計算
    count或
    reduce 。 但是Spark RDD有一個問題:Spark RDD無法在Spark Jobs或SparkContext之間共享,因為Spark RDD已綁定到Spark應用程序。 使用本機Spark分發,在不同Spark作業之間共享RDD的唯一方法是將數據集寫入HDFS或文件系統中的某個位置,然后將RDD拉到其他作業中。 但是,通過使用Alluxio(以前稱為Tachyon)或Apache Ignite可以實現相同的功能。

    Apache Ignite的以內存為中心的體系結構以非常有效的方式實現了RDD共享。 Apache Ignite提供IgniteContext和IgniteRDD在Spark應用程序之間共享RDD。

  • IgniteContext :IgniteContext是Spark-Ignite集成的主要入口點。 要創建Ignite上下文的實例,用戶必須提供SparkContext的實例和創建IgniteConfiguration(配置工廠)的閉包。 Ignite上下文將確保所有涉及的作業實例中都存在服務器或客戶端Ignite節點。 或者,可以將XML配置文件的路徑傳遞給IgniteContext構造函數,該構造函數將用于正在啟動的節點。
  • IgniteRDD :IgniteRDD是Spark RDD抽象的實現,表示Ignite緩存的實時視圖。 IgniteRDD并非一成不變; Ignite緩存中的所有更改(無論它們是由另一個RDD還是由緩存的外部更改引起的)都將立即對RDD用戶可見。 IgniteRDD利用Ignite緩存的分區性質,并將分區信息提供給Spark執行程序。 IgniteRDD中的分區數量等于基礎Ignite緩存中的分區數量。 IgniteRDD還通過以下方式向Spark提供關聯信息
    getPrefferredLocations以便RDD計算使用數據局部性。
  • 在本系列的下一部分中,我們將安裝Apache Spark并執行以下操作:

  • 跑過
    wordcount示例來驗證Spark安裝。
  • 配置Apache Ignite以在Spark應用程序之間共享RDD。
  • 通過Spark Shell運行Spark應用程序以使用Ignite RDD。
  • 開發一個Scala Spark應用程序,將一些Ignite RDD放入Ignite群集中,然后從另一個Scala Spark應用程序中提取它們。
  • 翻譯自: https://www.javacodegeeks.com/2017/12/optimizing-spark-job-performance-apache-ignite-part-1.html

    總結

    以上是默认站点為你收集整理的使用Apache Ignite优化Spark作业性能(第1部分)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得默认站点網站內容還不錯,歡迎將默认站点推薦給好友。