2016-12-05 9 views
0

私は4ノードのスパーククラスタを持っています。 1つのノードはマスタとスレーブの両方であり、他の3つはスレーブノードです。私はファイルをロードし、データフレームを作成し、spark SQLを実行するサンプルアプリケーションを作成しました。私は、マスターノードから以下のような申請書を提出していた場合、それが生産され、出力: -ファイルをスタンドアロンクラスタのsparkでロードする

./spark-submit /root/sample.py 

しかし、私は以下のようなマスターに提出していた場合は、「ファイルが存在しないというエラー

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

私はサンプルテキストファイルからRDDを作成しています: - 、

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

私は、それは例えば、生産システムのために働くだろうどのように??すべてのノードにファイルをコピーする必要がありますいくつかのCDRを処理する必要があります。どこで私はこれらのCDRSを受け取るべきですか?

答えて

3

あなたのサーバーに存在しないため、このファイルを読み取ることはできません。

スパークのすべてのノードに対して同じURL /パスでファイルにアクセスできることを確認する必要があります。

これは、hdfsのような分散ファイルシステムでは、操作が簡単になりますが、ファイルシステムがなくても実行できます。

sparkジョブをmasterに送信すると、masterは必要なexecutorとworkerを割り当てます。それぞれがsc.textFileが行うことを指示しているタスクを並列化しようとします。 したがって、すべてのノードからファイルパスにアクセスできる必要があります。

すべてのノードに同じ場所にファイルをマウントするか、URLベースの場所を使用してファイルを読み取ることができます。基本的なことは、ファイルがすべてのノードから利用可能であり、読み取り可能である必要があることです。

+0

..私は1000行のファイルが1つあり、すべての場所にコピーします。すべてのスレーブが同じファイルで動作していますか?どのようにそれらの間の負荷がバランスされている...また、私は100のCDRファイルを保持する共有場所がある場合..どのようにこれらのファイルは、スレーブの間で配布されますか? –

+1

まあ、すべてのノードにファイルをコピーしたことはありません。理想的には、前に説明したやり方で、すべてのノードで同じファイルにアクセスできるようにする必要があります。配布に関しては、パーティション上で動作します。ファイルに1000行があり、明示的にlines.repartition(10)と言うと、基本的にはこのように考えてください。それは、それぞれ100行の10並列パーティションを作成し、4人の作業者が同時に4つのプロセスを処理します。パーティションを指定しない場合は、内部アルゴリズムを使用してパーティションの数を計算します。 –

+0

..説明のための感謝.. –

関連する問題