1

私は、現在複数のプロジェクトで使用しているMapReduce akka_mapreduce_exampleの実用的な Akka/Java 実装を準備しました。

Map ステップのワークロードを多数の個別のネットワーク ノードに分散させたいと考えています。まさにそれを実現するには、Akka の構成で何を変更する必要があるのか​​疑問に思っています。「マスター」マシン (reduce ステップも実行する MapReduce をトリガーするマシン) と、Map ワークロードの分散に役立つ「スレーブ」マシンの構成を変更する必要があります。

私の現在のapplication.confは単一のマシンで機能し、非常に単純です。これには構成の変更のみが必要であり、コードの変更は必要ないことを願っていますか?

4

2 に答える 2

2

コードによっては、必要なのは構成の変更だけです。リモート処理を設定するには、構成に次のようなものが必要です。

akka {
  actor {
    provider = "akka.remote.RemoteActorRefProvider"
  }
  remote {
    enabled-transports = ["akka.remote.netty.tcp"]
    netty.tcp {
      hostname = "127.0.0.1"
      port = 2552
    }
 }
}

次に、リモート ノードでどのアクターを作成するかを Akka に伝える必要があります。

akka {
  actor {
    deployment {
      /sampleActor {
        remote = "akka.tcp://sampleActorSystem@127.0.0.1:2553"
      }
    }
  }
}

詳細については、優れたドキュメントを参照してください。2.2.1 バージョンのドキュメントをリンクしました。別のバージョンを使用している場合は、そのバージョンのドキュメントを参照してください。バージョン間で変更が行われる傾向があり、古いバージョンのものは新しいバージョンでも機能しますが (廃止される可能性があります)、その逆は明らかに問題です。

「コードによって異なります」と言ったことに気付くでしょう。つまり、リモート ノードに送信されるすべてのメッセージはシリアライズ可能である必要があり、アクターで静的メンバーを使用しないということです。

さらに柔軟性が必要な場合は、新しいクラスタリング サポートを確認してください。これにより、柔軟で動的な Peer-to-Peer システムが実現し、必要に応じてスケールアップおよびスケールダウンできます。そのためには、わずかなコード変更が必要になる場合があります。

それが役立つことを願っています。

于 2013-10-10T13:39:29.247 に答える
1

ワークロードは複数のノードに分散できますが、プル ベースまたはプッシュ ベースの処理の 2 つの処理モードを選択する必要があります。

どちらにも長所と短所があります。しかし、プルはフォールト トレランスを提供し、ワーカー アクターへの作業の割り当てを追跡できるため、より魅力的です。開始するには、http://blog.goconspire.com/post/64901258135/akka-at-conspire-part-5-the-importance-of-pulling を ご覧ください。

サンプルの作業コードはhttps://github.com/typesafehub/activator-akka-distributed-workersにあります。

高速なプロデューサーと低速なコンシューマーの問題を処理する akka ストリーミングのバック プレッシャーを使用できます。

システムに極端な負荷がかかった場合に作業アクターを動的に作成するには、独自の設計を考え出す必要があります。しかし、このソリューションでは、クラスターにノードを追加して、作業を新しいノードに分散するように指示されています。

于 2014-08-06T09:39:18.670 に答える