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入力分割の間に相関があるかどうかわかりませんか?
しかし、パーティション分割はどのようにRDDで機能しますか?あなたが言ったように、あなたの全体のデータセットはスパークの下で、RDDと呼ばれます。では、RDDパーティションは、HDFSから取得したデータ全体がRDDのパーティションにどのように分割されますか? – CapturedTree
各ノードがその部分をロードします。 SparkはYARNと話し合い、要求されたリソースを割り当てます。データの局所性は常に最高のものですが、必ずしも保証されません。このレベルでは、データブロックで作業している分割はありません。ファイルのブロックは、YARNによって割り当てられたコンテナを持つデータノードにロードされます。うまくいけば、これらのノードはデータを保持するノードと同じです。 – ozw1z5rd
SparkはYARNと話をして、要求されたリソースを割り当てて、Sparkの変換とアクションをHDFSの指定されたデータセットで実行します。 Sparkアプリケーションがエグゼキュータ(HDFSのデータノード)に送られ、HDFS入力のデータがRDD抽象化されている場合、RDDはそれをさらに分割するという意味で私の質問に答えているとは思わないそれはHDFS分割から得られるすべてのデータですか? – CapturedTree