使用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支持兩種類型的操作:
通過使用Spark轉換功能來創建Spark RDD。 Spark轉換功能可以從各種來源(例如文本文件)創建Spark RDD。 除了從文本文件創建Spark RDD外,還可以從外部存儲(例如RDBMS,HBase,Cassandra或與Hadoop輸入格式兼容的任何其他數據源)創建Spark RDD。
大多數時候,Spark RDD會從一個RDD轉換為另一個新的Spark RDD,以便為將來的處理準備數據集。 讓我們考慮一下Spark中的以下數據轉換步驟:
 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。
getPrefferredLocations以便RDD計算使用數據局部性。
在本系列的下一部分中,我們將安裝Apache Spark并執行以下操作:
wordcount示例來驗證Spark安裝。
翻譯自: https://www.javacodegeeks.com/2017/12/optimizing-spark-job-performance-apache-ignite-part-1.html
總結
以上是生活随笔為你收集整理的使用Apache Ignite优化Spark作业性能(第1部分)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: arm linux 系统调用(arm l
- 下一篇: 选择Java密码算法第1部分-散列
