2016-06-30 54 views
-1

我想知道在Spark應用程序中是否可以從驅動程序訪問HDFS。這意味着,如何在驅動程序中讀/寫HDFS文件。一種可能的解決方案是將文件讀取爲RDD(sc.textFile),然後將其收集到驅動程序中。但是,這不是我要找的。如何從驅動程序在spark中讀取/寫入HDFS

+0

收集的RDD究竟是如何一會做到這一點。有什麼理由反對嗎? – chrisaycock

+0

你的意思是沒有別的辦法?如果我採用這種方法,那麼在收集後如何將它寫入hdfs? –

+0

有['RDD.saveAsTextFile()'](http://spark.apache.org/docs/latest/programming-guide.html#actions),但我很困惑你爲什麼要收集任何東西給司機只是把它寫回來。 Spark希望在執行* action *之前在RDD上執行一系列*轉換*。除非你的目標只是看它,否則你通常不應該把數據帶回驅動程序。 – chrisaycock

回答

2

如果您想直接訪問從驅動程序,你可以簡單地做(Scala中)HDFS:

val hdfs = FileSystem.get(sc.hadoopConfiguration) 

然後你可以使用這樣創建的變量hdfs直接訪問HDFS作爲文件系統,而無需使用星火。

(代碼快照我假設你有一個叫SparkContext正確sc配置)

+0

我只是在星火1.6和2.1嘗試這樣: VAL sparkConf =新SparkConf() VAL HDFS = FileSystem.get(sparkConf.hadoopConfiguration) 結果是「無法解析符號hadoopConfiguration。 –

+0

嗯,但streamingContext.sparkContext.hadoopConfiguration工作正常,:) –

+0

不起作用,因爲你試圖從'SparkConf'對象獲取'hadoopConfiguration'而不是像你應該做的那樣形成'S​​parkContext'對象。 – mgaido

-1

只需在驅動程序中收集所有數據,然後使用hdfs的java api將其寫入hdfs即可。

相關問題