2016-10-08 4 views
0

RDDパーティションとHDFS入力スプリットの違いを理解するのは苦労しています。したがって、本質的にSparkアプリケーションを提出するときスパークRDDパーティションとHadoopスプリット

SparkアプリケーションがHDFSから読み込みたい場合、HDFS上のファイルは入力分割を持ちます(それぞれ64mbと言います)。これらの入力分割はそれぞれ異なるデータノードに存在します)。

ここで、Sparkアプリケーションが(sc.textFile(PATH_IN_HDFS))を使用してHDFSからそのファイルをロードするとします。ファイルは約256MBで、4つの入力スプリットがあり、スプリットの2つがデータノード1にあり、他の2つのスプリットはデータノード2にあります。

Sparkがこの256 MBをRDD抽象化にロードすると、will各入力スプリット(64mb)を4つの別々のRDDにロードします(データノード1に64MBのデータを持つ2つのRDDと、データノード2に64MBのデータを持つ2つのRDDがあります)。あるいは、RDDは、入力分割をHadoopでさらに分割しますか?また、これらのパーティションはどのようにして再配布されますか? RDDパーティションとHDFS入力分割の間に相関があるかどうかわかりませんか?

答えて

2

私はSparkの新機能ですが、分割はMapReduceジョブと厳密に関連しています。 Sparkは分散した形でメモリにデータをロードし、どのマシンがデータをロードするかは、データの場所によって異なります(読み込み:データブロックの場所によって異なりますが、分割アイデアに非常に近い)。 Sparks APIを使用すると、RDDの観点から考えることができ、分割がなくなります。 あなたはRDDで作業しますが、どのようにRDDにデータを配布するかはプログラマの問題ではなくなりました。 火花の下のデータセット全体がRDDと呼ばれます。

+0

しかし、パーティション分割はどのようにRDDで機能しますか?あなたが言ったように、あなたの全体のデータセットはスパークの下で、RDDと呼ばれます。では、RDDパーティションは、HDFSから取得したデータ全体がRDDのパーティションにどのように分割されますか? – CapturedTree

+0

各ノードがその部分をロードします。 SparkはYARNと話し合い、要求されたリソースを割り当てます。データの局所性は常に最高のものですが、必ずしも保証されません。このレベルでは、データブロックで作業している分割はありません。ファイルのブロックは、YARNによって割り当てられたコンテナを持つデータノードにロードされます。うまくいけば、これらのノードはデータを保持するノードと同じです。 – ozw1z5rd

+0

SparkはYARNと話をして、要求されたリソースを割り当てて、Sparkの変換とアクションをHDFSの指定されたデータセットで実行します。 Sparkアプリケーションがエグゼキュータ(HDFSのデータノード)に送られ、HDFS入力のデータがRDD抽象化されている場合、RDDはそれをさらに分割するという意味で私の質問に答えているとは思わないそれはHDFS分割から得られるすべてのデータですか? – CapturedTree

関連する問題