2016-03-28 77 views
0

我想在運行Spark任務時創建底層HDFS的快照。特定步驟涉及刪除一些鑲木地板文件的內容。我想創建一個快照執行刪除操作,驗證操作結果並繼續下一步。從Spark Job創建FS的快照

但是,我無法從我的spark工作中找到訪問HDFS API的好方法。我想要創建快照的目錄在HDFS中被標記/標記爲可快照。創建快照的命令行方法工作,但是我需要以編程方式執行此操作。

我在CDH 5.5上運行Spark 1.5。

有關我如何執行此操作的任何提示線索?

感謝

蘭德福

+0

我不知道Java(Runtime.getRuntime()。exec ???)的特定語法,但是您可以從您的代碼運行系統命令,使您可以使用HDFS命令,然後您可以通過標準輸入和輸出變量。 – Jared

+0

@Salmonerd有一個java API來創建快照。但是需要訪問HDFS api。我不確定我是否直接從Spark上下文訪問HDFS。大多數例子都創建了嵌入式hadoop集羣來訪問HDFS apis。 – Ramdev

+0

我在說的是,您可以通過在您的Java代碼中編寫HDFS命令而不是訪問任何API來訪問HDFS。 – Jared

回答

0

我還沒有證實這一點,但至少我沒有得到編譯錯誤,理論上這個解決方案應該工作。

這是Scala代碼:

val sc = new SparkContext(); 
val fs = FileSystem.get(sc.hadoopConfig) 
val snapshotPath = fs.createSnapshot("path to createsnapshot of","snapshot name") 

..... 
..... 
if (condition satisfied) { 
    fs.deleteSnapshot(snapshotPath,"snapshot name") 
} 

我認爲這將在理論工作。