2014-05-08 46 views
1

我需要將流讀取到非常大的文件(TB中)。爲了獲得更高的吞吐量,如果我們可以將文件部分緩存在內存中。 Spark可以將數據緩存在分佈式內存中。我如何使用spark來緩存文件部分?如何將內存中的文件部分緩存爲Spark中的RDD?

文件比任何一臺計算機的本地存儲器大,並且大於羣集中的總內存容量。

回答

1
  1. 將數據存儲在像HDFS等分佈式存儲系統中。這將以分佈式方式存儲您的數據。您必須根據您的要求(本地或雲端等)選擇正確的文件系統

  2. 對HDFS文件中的數據運行Spark。從文件中創建RDD(請參閱spark文檔),過濾掉實際需要的部分數據(例如,僅包含大型日誌文件中包含「錯誤」的行),並將必要部分緩存在內存中(以便後續查詢速度更快)。

有一些緩存相關的參數可以幫助你調整數據到內存中(保持數據與kryo序列化序列化等)。請參閱Memory Tuning瑕疵指南。

您也可以考慮將數據拆分爲多個部分(單獨的文件,分區表等)並僅加載它的一部分Spark。

+0

感謝這一點,但如果我寫一個Spark作業,緩存的數據只有在這個驅動程序死亡之前纔會有效。例如,當作業完成緩存完成時,我使用SparkSQL運行一個查詢。我怎樣才能始終保持火花狀態? –

相關問題