2016-04-05 11 views
0

私はローカルPCにマスタを持っており、2つのサーバをワーカーとして使用しています。 Sparkプログラムを起動すると、まず入力ファイルをインポートする必要があります。正しい入力(現在)のために、私は自分の入力ファイルをマスターと両方の作業者のハードディスクに保存する必要があります(パスは同じでなければなりません)。つまり、同じデータセットを3つの異なる場所に配置する必要があります。どのように私はこれを避けることができ、入力エラーを取得することなく、独自の場所に私のデータセットを格納する?スパーク、入力ファイルへのパス

+0

使用分散ファイルシステムで終わりますか? – zero323

+2

ファイルをhdfsに置き、そこからspark-jobでロードします。 – Mahendra

+0

@ zero323、Mahendra、ありがとうございます – Guforu

答えて

1

これを実行するには、HDFS(Hadoop)などの分散ファイルシステムを使用する必要があります。ファイルの読み込みの2つの例は次のとおりです。

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のデータはブロックに格納され、すべてのデータノードに格納されます。このファイルシステムに関するメタデータは、ネームノードに格納されます。したがって、データを異なるノードに分散させることになります。また、hadoopはノード間でブロックを送信するタイミングと方法を気にします。

+0

sparkの実行時にHDFSとHADOOP_HOMEが正しく設定されていれば、HDFSがデフォルトのFSになるため、完全なURLは必要ありません。 –

+0

本当、忘れました。念押し有難う! – JorgeGlezLopez

1

一般的な点は、すべてのワーカーノードから見えるファイルシステムを持つことです。

Sparkは、Hadoop分散ファイルシステム(MapFS)、MapR-FS(MapR-FS)、Cassandra、OpenStack Swift、Amazon S3、Kudu(hereから取得)など幅広い種類のインターフェースが可能です。

ローカルファイルシステムは、前述のようなオプションの1つです。すべてのワーカーに複数のコピーがあります。 「ローカル」ファイルシステムを使用するもう1つのケースは、ネットワークドライブをマウントするか、NASまたはSANのようなものを使用することです。

これらのアプローチのすべて

は、入力ファイルにちょうど別のURIを必要とするが、すべてがシンプルなコール

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