Apache Spark=とAKKAの違いを教えてください。両方のフレームワークが分散計算と並列計算をプログラムすることを意図していることを知っていますが、リンクやそれらの違いはわかりません。
さらに、それぞれに適したユースケースを取得したいと思います。
Apache Sparkは実際にはAkkaで構築されています。
Akkaは、ScalaまたはJavaで事後対応型、分散型、並列型、復元型の並行アプリケーションを作成する汎用フレームワークです。 AkkaはActorモデルを使用してすべてのスレッド関連コードを隠し、スケーラブルでフォールトトレラントなシステムを簡単に実装するための本当にシンプルで便利なインターフェイスを提供します。 Akkaの良い例は、携帯電話からのデータを消費して処理し、何らかの種類のストレージに送信するリアルタイムアプリケーションです。
Apache Spark(Spark Streamingではありません)は、map-reduceアルゴリズムの一般化バージョンを使用してバッチデータを処理するフレームワークです。 Apache Sparkの良い例は、保存されたデータのいくつかのメトリックを計算して、データのより良い洞察を得ることです。データはオンデマンドでロードおよび処理されます。
Apache Spark Streamingは、データが既に保存されている場合と同じ方法で、ほぼリアルタイムの小さなデータバッチに対して同様のアクションと機能を実行できます。
2016年4月更新
Apache Spark 1.6.0以降、Apache Sparkはノード間の通信にAkkaに依存しなくなりました。コメントしてくれた@EugeneMiに感謝します。
Sparkは、Akkaがアプリケーションのデータと命令フローを管理するためのデータ処理用です。
TL; DR
SparkとAkkaは、使用方法と使用例が異なる2つの異なるフレームワークです。
分散型またはその他のアプリケーションを構築する場合、スレッドを使用するなどの並列アプローチでタスクをスケジュールおよび管理する必要があります。多数のスレッドを持つ巨大なアプリケーションを想像してください。それはどのくらい複雑ですか?
TypeSafe(現在はLightbendと呼ばれる)Akkaツールキットを使用すると、アクターシステム(元々はErlangから派生)を使用して、スレッド上の抽象化レイヤーを提供できます。これらのアクターは、何でもすべてをメッセージとして渡すことで相互に通信でき、他のコードをブロックすることなく、並行して処理を実行できます。
Akkaは、分散環境でアクターを実行する方法を提供することにより、最高のチェリーを提供します。
一方、Apache Sparkは、手動で処理できない大規模なデータセット用のデータ処理フレームワークです。 Sparkは、RDD(またはResilient Distributed Datasets)と呼ばれるものを利用します。これは、従来のデータ構造上の抽象化レイヤーのような分散リストです。
Sparkは、Akkaツールキットを使用して、異なるノード間でジョブをスケジュールします。
Apache Spark:
Apache Spark™は、大規模データ処理用の高速で一般的なエンジンです。
Sparkは、メモリ内でHadoop MapReduceよりも最大100倍、ディスクでは10倍高速なプログラムを実行します。
Sparkは、性質が多様なさまざまなデータセット(テキストデータ、グラフデータなど)とソースのビッグデータ処理要件を管理するための包括的な統合フレームワークを提供しますデータ(バッチv。リアルタイムストリーミングデータ)。
Hadoopエコシステムおよびデータソースとうまく統合します(HDFS、Amazon S3、Hive、HBase、Cassandraなど)
Hadoop YARNまたはApache Mesosによって管理されるクラスターで実行できます。 Standaloneモードでも実行
Scala、Java、およびPythonでAPIを提供し、その他をサポート途中の言語(Rなど)
MapおよびReduce操作に加えて、[〜#〜] sql [〜#〜]クエリ、ストリーミングデータ、機械学習、グラフデータ処理をサポートします。 。
Hadoopに代わるものではなく、Hadoop MapReduceの代替としてSparkを見てください。
よりよく理解するために、 infoQ および toptal の記事をご覧ください。
Sparkの主な使用例:
Akka:from Letitcrash
Akkaは、イベント駆動型ミドルウェアフレームワークであり、JavaおよびScalaで高性能で信頼性の高い分散アプリケーションを構築します。Akkaは、スレッド、ロック、非ブロッキングIOなどの低レベルメカニズムからビジネスロジックを分離します。Akkaを使用すると、アクタの作成、破棄、スケジュール設定、および失敗時の再起動の方法を簡単に構成できます。
これをご覧ください typesafe Actorフレームワークの理解を深めるための記事。
Akkaは、スーパーバイザー階層に基づいてフォールトトレランスを提供します。すべてのアクターは他のアクターを作成することができ、それを監督して、再開、再開、リタイアするか、問題をエスカレーションするかを決定します。
主な使用例:
Apache Spark、Akka、またはKafkaのいずれかを選択することは、それらがデプロイされているユースケース(特に、設計するサービスのコンテキストと背景)に大きく依存します。要因には、レイテンシ、ボリューム、サードパーティの統合、必要な処理の性質(バッチまたはストリーミングなど)が含まれます。このリソースは特に役立つことがわかりました- https://conferences.oreilly.com/strata/strata-ca-2016/public/schedule/detail/47251