我有一種情況,我想每隔一小時從遠程存儲器下載一些數據,並將其作爲鍵值對存儲在執行器/工作者的RDD中。我想緩存這個RDD,以便在此執行者/工作者上運行的所有將來的作業/任務/批處理可以使用緩存的RDD進行查找。這在Spark Streaming中可能嗎?我們是否可以在執行器上跨批次使用緩存RDD
一些相關的代碼或指向相關代碼的指針將會有所幫助。
我有一種情況,我想每隔一小時從遠程存儲器下載一些數據,並將其作爲鍵值對存儲在執行器/工作者的RDD中。我想緩存這個RDD,以便在此執行者/工作者上運行的所有將來的作業/任務/批處理可以使用緩存的RDD進行查找。這在Spark Streaming中可能嗎?我們是否可以在執行器上跨批次使用緩存RDD
一些相關的代碼或指向相關代碼的指針將會有所幫助。
如果你只是需要一個巨大的,分佈式map
,並且要使用星火,寫每下載小時內數據的獨立工作,並緩存由此獲得的(你可以unpersist老RDD
)的RDD
。讓我們稱這個工作爲DataRefresher
。
然後,您可以公開一個REST API(如果您使用的是Scala
,請考慮使用Scalatra
),它包裝DataRefresher
,並返回給定密鑰的值。例如:http://localhost:9191/lookup/key
,其他作業可以使用它來執行相對快速的查找。
考慮您的要求,這裏是我建議:
注:您的概念「執行中的緩存跨應用程序使用」是不正確的。執行者涉及單個Spark應用程序,因此該應用程序中的任何RDD都是如此。
如果你真的需要緩存的數據投資分佈式節點上,你可能要考慮離堆內存數據庫,如超光速粒子和Alluxio
我想用它作爲本地緩存查找。我想「在執行程序中緩存相同/單個應用程序」,以便此單個應用程序的所有作業都可以重用和/或重新使用緩存。 – sunillp
Alluxio是一個內存爲中心的分佈式存儲系統。 Alluxio可用於緩存內存中的Spark RDD,以供多個和未來的Spark應用程序和作業訪問。
Spark can store RDDs in Alluxio memory,未來的Spark作業可以從Alluxio內存中讀取它們。該博客文章詳細介紹了該如何運作。這裏是關於how to setup and configure Alluxio with Spark的信息。
1.舊數據會發生什麼? 2.當你說「跨批次」時,你的意思是其他火花應用程序?或在同一個應用程序中? 3.它總是追加還是插入? –
1.舊數據應保留,新數據應添加/添加。 2.「在相同的火花應用程序中跨越」。 3.它總是會追加 – sunillp