Apache Spark インフラストラクチャ - コンピューティングノードとストレージノードを組み合わせる

Apache Spark インフラストラクチャ - コンピューティングノードとストレージノードを組み合わせる

Apache Spark に関するインフラストラクチャについて質問があります。私は、常にモデリングに使用されるデータ (最大) が約 4 TB のグリーンフィールド プロジェクトで Apache Spark を展開することを検討しています。アプリケーション ドメインは分析であり、モデルのトレーニングはリアルタイムではなく、おそらく一晩でバッチ処理されるでしょう。

従来の3層アプリケーションでは、データベース側とアプリケーション側のワークロードが分離されていたため、2つの異なるサーバーをそれぞれストレージとコンピューティングタスクを実行するように最適化することができました。これにより、さまざまなプロバイダー(デルたとえば、各アプリケーションに最適化されたサービスが提供されています。

Spark のような新しいフレームワークは、ノード間でデータを移動することと、それによって発生するネットワーク負荷を回避するために両方の側面を組み合わせているようですが、これがインフラストラクチャ レベルでどのように機能するのか疑問に思っています。

大容量のストレージとコンピューティング能力を 1 台のマシンに組み合わせている人はいますか? アプリケーションの標準的なシステム トポロジはどのようなものになるでしょうか。また、それを計画する際にはどのような要素を考慮する必要がありますか? 最後に、高いストレージ密度と優れたコンピューティング能力を備えたブレード サーバーはありますか?

理想的には 5 ノード以下で作業したいのですが、このような実装を計画するのに役立つガイダンスのリソースを知りません。その点に関する提案があれば歓迎します。

答え1

いくつかのリソースを見つけたので、自分の質問に自分で答えるつもりですが、寄せられた質の高い回答も回答としてマークしますので、遠慮なくご協力ください。私の考えに対するコメントも大歓迎です。

これリンクには Spark 用のハードウェアのプロビジョニングに関する情報がいくつかあり、私が理解している限りでは、基本的に Spark を 3 層スタックのアプリケーション層として扱うことができます。つまり、(たとえば) Cassandra または HBase をストレージ ノードで実行し、Spark を CPU とメモリがより強力で、使用可能なストレージが少ない「アプリケーション」ノードに保持することができます。ノード間の 10 Gbps イーサネットは、これらのユース ケースでは重要になると思われます。

最終的には Hbase データベースからデータをストリーミングして処理する可能性があることを考慮すると、非常に大規模なデータセットをどのように処理するかという疑問が生じると思いますが、これは結局のところアプリケーション アーキテクチャの問題であるため、このサイトの範囲外になります。

関連情報