2016-11-16 4 views
2

マルチスレッドに関する一般的な考え方はありますが、Hadoopでの使用方法は不明です。Hadoop/Sparkでのマルチスレッド化

私の知識に基づいて、YarnはSpark/Mapreduceジョブリソースの管理/制御を担当していますが、ここでマルチスレッドを考えることはできません。 Hadoop Eco Systemのどこにでも使用できるかどうかは不明です。

誰かがこれに関する情報を提供できるかどうかは分かります。

多くのおかげで、

+0

スパークについてはわかりませんが、hadoopではマッパーとレデューサーの仕事そのものをマルチスレッドジョブとして実装できます。これを参照してください - https://hadoop.apache.org/docs/r2.6.2/api/org/apache/hadoop/mapreduce/Mapper.html#run(org.apache.hadoop.mapreduce.Mapper.Context) – Amit

+0

Regarding Hadoop Mapreduceしてください[私の答えを参照してください](http://stackoverflow.com/a/39904444/647053) –

+0

スパークに関しては、[参照してください](http://stackoverflow.com/questions/36671644/how-does-spark-achieve -parallelism-one-task-on-multi-core-or-hyper-thread) –

答えて

2

実際に、糸は、アプリケーションマスターによって要求された(MR-AppMasterまたはスパークドライバー)コンテナのリソース割り当てと割り当て解除を管理する責任があります。したがって、それらの間のRPCはすべてリソース契約の交渉に関するものであり、MapReduceとSparkの内部でどのようにタスクが実行されているかは詳しく考慮されていません。

MapReduce-Hadoopの場合、各タスク(マッパーまたはレデューサー)はJVM上で実行される単一プロセスですが、ここではマルチスレッドを使用しません。

Sparkの場合、各エグゼキュータは実際には多くのワーカースレッドで構成されています。ここで、各SparkタスクはMapReduceの各タスク(単一プロセス)に対応しています。 Sparkはマルチスレッドモデルに基づいて実装しています。これは、JVMのオーバーヘッドとタスク間のデータシャッフルのために、
です。

私の経験に基づいて、マルチスレッドモデルはオーバーヘッドを低くしますが、フォールトトレランスの莫大なコストがかかります。 Sparkのエグゼキュータが失敗した場合、エグゼキュータ内で実行されているすべてのタスクを再実行する必要がありますが、MapReduceで再実行する必要があるタスクは1つだけです。また、エグゼキュータのすべてのタスクがRDDの観点からデータをキャッシュする必要があるため、Sparkは膨大なメモリ圧迫を受けます。しかし、Mapreduceタスクは一度に1ブロックしか処理しません。

希望すると便利です。

関連する問題