2016-04-05 95 views
0

我在本地PC上有一個主人,並使用兩臺服務器作爲工人。當我啓動Spark程序時,首先我必須導入我的輸入文件。對於正確的輸入(目前)我應該有我的輸入文件在主人和兩個工人的硬盤(路徑必須是相同的)。這意味着相同的數據集應該放在三個不同的地方。我怎樣才能避免這種情況,並將我的數據集存儲在獨特的地方,而不會出現輸入錯誤?火花,輸入文件的路徑

+0

使用分佈式文件系統? – zero323

+2

把你的文件放在hdfs上,然後從spark那裏加載。 – Mahendra

+0

@ zero323,Mahendra,非常感謝你 – Guforu

回答

1

爲了做到這一點,您需要使用分佈式文件系統,如HDFS(Hadoop)。的讀取文件的兩個實例如下:

tweets = sc.textFile("hdfs://scrapper.ccs.neu.edu/user/cbw/a1_tweets.txt") # load data from HDFS

words = sc.textFile("hdfs://scrapper.ccs.neu.edu/user/cbw/words*.txt") # load data from HDFS

第一個是一個常規文件讀取,而第二個具有*這將導致讀取多個文件(就像wholeTextFiles)。

請注意,當您在HDFS中引用文件時,必須指定一個包含主機名(例如scrapper)的完全限定URL。

HDFS中的數據存儲在塊中並存儲在所有數據節點中。有關此文件系統的元數據存儲在Namenode上。因此,您將數據傳播到不同的節點,並且hadoop會關心節點之間何時以及如何發送塊。

+0

如果在運行spark時HDFS和HADOOP_HOME設置正確,你*不需要完全限定的URL,因爲HDFS將是默認的FS。 –

+0

是真的,我忘記了。感謝您的提醒! – JorgeGlezLopez

1

一般要點是讓所有工作節點都可以看到文件系統。 (HDFS),MapR文件系統(MapR-FS),Cassandra,OpenStack Swift,Amazon S3,Kudu(取自here)的各種Spark接口。

本地文件系統是您提到的選項之一 - 所有工作人員的幾個副本。使用「本地」文件系統的另一種情況是安裝網絡驅動器或使用諸如NAS或SAN之類的東西。

所有這些方法需要的只是不同的URI輸入文件,但都結束了簡單的電話

sc.textFile("protocol://path/to/a/file");