2016-04-05 97 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");