2016-12-05 93 views
0

我有一個四節點spark羣集。一個節點既是主站又是從站,其他三個從站節點。我寫了一個示例應用程序,它載入文件並創建一個數據框並運行一些Spark SQL。當我從主節點提交申請類似下面,它正在生產輸出: -在獨立羣集中的spark中加載文件

./spark-submit /root/sample.py 

,但是當我與主像下面提交,提示「文件不存在錯誤

./spark-submit --master spark://<IP>:PORTNO /root/sample.py 

我創建的示例文本文件的RDD: - 。

lines = sc.textFile("/root/testsql.txt"); 

我是否需要將文件複製到所有節點?它是如何將生產系統的工作,例如,如果要處理一些CDRS,哪裏我應該收到這些CDRS。

回答

3

你是對的,它無法讀取該文件,因爲它不存在於你的服務器上。

您需要確保該文件可以通過相同的url /路徑訪問spark的所有節點。

這就是像hdfs這樣的分佈式文件系統使事情變得容易一些,但即使沒有它們,也可以做到這一點。

向Spark提交Spark作業時,Master會分配所需的執行者和工作者。他們每個人都會嘗試並行化任務,這是sc.textFile告訴它做的事情。 所以,文件路徑需要可以從所有節點訪問。

您可以在同一位置的所有節點上安裝文件,也可以使用基於URL的位置來讀取文件。基本的東西是文件需要可用並且可以從所有節點讀取。

+0

..我有點困惑..如果我有一個1000行的文件,我會將它複製到所有位置..所有的奴隸工作在同一個文件?他們之間的負載如何平衡......另外,如果我有一個共享的位置,我將保留100個CDR文件..如何將這些文件分發給奴隸? –

+1

那麼,我從來沒有複製過一個文件到每個節點,理想情況下,你應該讓所有節點都可以訪問同一個文件,通過我之前解釋過的方式。關於分配,它適用於分區。基本上這樣認爲,如果文件中有1000行,並且你明確地說lines.repartition(10)。它將創建10個並行分區,每個分區100行,4個工作人員一次處理4個分區。如果您不指定分區,則使用它的內部算法來計算分區數量。 –

+0

..感謝您的解釋.. –

相關問題