2016-09-20 36 views
2

我有一種情況,我想每隔一小時從遠程存儲器下載一些數據,並將其作爲鍵值對存儲在執行器/工作者的RDD中。我想緩存這個RDD,以便在此執行者/工作者上運行的所有將來的作業/任務/批處理可以使用緩存的RDD進行查找。這在Spark Streaming中可能嗎?我們是否可以在執行器上跨批次使用緩存RDD

一些相關的代碼或指向相關代碼的指針將會有所幫助。

+0

1.舊數據會發生什麼? 2.當你說「跨批次」時,你的意思是其他火花應用程序?或在同一個應用程序中? 3.它總是追加還是插入? –

+0

1.舊數據應保留,新數據應添加/添加。 2.「在相同的火花應用程序中跨越」。 3.它總是會追加 – sunillp

回答

0

如果你只是需要一個巨大的,分佈式map,並且要使用星火,寫每下載小時內數據的獨立工作,並緩存由此獲得的(你可以unpersist老RDD)的RDD。讓我們稱這個工作爲DataRefresher

然後,您可以公開一個REST API(如果您使用的是Scala,請考慮使用Scalatra),它包裝DataRefresher,並返回給定密鑰的值。例如:http://localhost:9191/lookup/key,其他作業可以使用它來執行相對快速的查找。

0

考慮您的要求,這裏是我建議:

  1. 運行星火應用工作,每隔1小時,這將讓來自外部數據源的數據,並追加到蜂巢表。
  2. 使用星火節儉服務器訪問數據

注:您的概念「執行中的緩存跨應用程序使用」是不正確的。執行者涉及單個Spark應用程序,因此該應用程序中的任何RDD都是如此。

如果你真的需要緩存的數據投資分佈式節點上,你可能要考慮離堆內存數據庫,如超光速粒子和Alluxio

+0

我想用它作爲本地緩存查找。我想「在執行程序中緩存相同/單個應用程序」,以便此單個應用程序的所有作業都可以重用和/或重新使用緩存。 – sunillp

相關問題