17

ストーム トポロジにカスタム構成を提供するにはどうすればよいですか? たとえば、MySQL クラスターに接続するために構築したトポロジーがあり、再コンパイルせずに接続する必要があるサーバーを変更できるようにしたい場合、どうすればよいでしょうか? 私の好みは構成ファイルを使用することですが、私の懸念は、ファイル自体がクラスターにデプロイされていないため、実行されないことです (クラスターの仕組みに関する私の理解に欠陥がない限り)。これまでに実行時にストーム トポロジに構成オプションを渡す唯一の方法は、コマンド ライン パラメーターを使用する方法でしたが、かなりの数のパラメーターを取得すると面倒です。

シェルスクリプトを利用してファイルを変数に読み込み、その変数の内容を文字列としてトポロジに渡すという考えがありましたが、可能であればもう少しきれいなものが欲しいです。

他の誰かがこれに遭遇しましたか?もしそうなら、どのように解決しましたか?

編集:

より明確にする必要があるようです。私のシナリオは、再コンパイルせずにさまざまな環境に展開できるようにしたいトポロジがあるということです。通常、データベース接続パラメーターなどを含む構成ファイルを作成し、それを渡します。Storm でそのようなことを行う方法を知りたいです。

4

7 に答える 7

8

トポロジとともに送信する構成を (通常は yaml ファイルを介して) 指定できます。独自のプロジェクトでこれを自分で管理する方法は、開発用と本番用に別々の構成ファイルがあり、その中にサーバー、redis、db IP、およびポートなどを保存することです。次に、コマンドを実行して jar を構築し、送信します。ストームするトポロジには、展開環境に応じて正しい構成ファイルが含まれています。ボルトとスパウトは、ボルトの prepare() メソッドで渡された stormConf マップから必要な構成を読み取るだけです。

http://storm.apache.org/documentation/Configuration.htmlから:

すべての構成には、Storm コードベースの defaults.yaml で定義された既定値があります。Nimbus とスーパーバイザのクラスパスで storm.yaml を定義することにより、これらの構成をオーバーライドできます。最後に、StormSubmitter を使用するときにトポロジと共に送信するトポロジ固有の構成を定義できます。ただし、トポロジ固有の構成は、「TOPOLOGY」で始まる構成のみをオーバーライドできます。

Storm 0.7.0 以降では、ボルトごと/スパウトごとに構成をオーバーライドできます。

また、 http: //nathanmarz.github.io/storm/doc/backtype/storm/StormSubmitter.html で、submitJar と submitTopology に conf というマップが渡されることもわかります。

これで始められることを願っています。

于 2014-02-23T10:24:06.070 に答える
3

コードで構成を提供するだけで、この問題を解決しました。

config.put(Config.TOPOLOGY_WORKER_CHILDOPTS, SOME_OPTS);

トポロジ固有のものを提供しようとしましたstorm.yamlが、機能しません。storm.yaml を使用できるようになれば訂正してください。

更新:
SOME_OPTS とは何かを知りたい人のために、これは Storm メーリング リストの Satish Duggana からのものです。

Config.TOPOLOGY_WORKER_CHILDOPTS: トポロジの WORKER_CHILDOPTS をオーバーライドできるオプション。メモリ、gc などの Java オプションを設定できます

あなたの場合、それは

config.put(Config.TOPOLOGY_WORKER_CHILDOPTS, "-Xmx1g");
于 2015-03-12T03:01:02.467 に答える
1

実際に最も役立つのは、変更可能なキー値ストア (s3、redis など) に構成を保存し、それをプルして、使用するデータベース接続を構成することです (ここでは、方法を制限することを既に計画していると仮定します)。多くの場合、この構成を取得するためのオーバーヘッドが大した問題にならないように、データベースと対話します)。この設計により、データベース接続をオンザフライで変更でき、トポロジを再デプロイする必要さえありません。

于 2013-08-06T02:17:36.333 に答える
0

同じ問題が発生し、トポロジごとに以下を追加して解決しました

config.put(Config.TOPOLOGY_WORKER_CHILDOPTS, "-Xmx4096m -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:NewSize=128m -XX:CMSInitiatingOccupancyFraction=70 -XX:-CMSConcurrentMTEnabled -Djava.net.preferIPv4Stack=true");

また、Nimbus UI を使用して確認すると、以下のように表示されます。

topology.worker.childopts   -Xmx4096m -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:NewSize=128m -XX:CMSInitiatingOccupancyFraction=70 -XX:-CMSConcurrentMTEnabled -Djava.net.preferIPv4Stack=true
于 2016-07-24T20:56:45.153 に答える
0

トポロジを構築するときにスパウトとボルトのインスタンスを (とりわけ) 作成し、これらのインスタンスをシリアル化してクラスタ内の適切な場所に配布するという考え方です。スパウトまたはボルトの動作を構成する場合は、トポロジを送信する前にトポロジを作成するときに行い、ボルトまたはスパウトにインスタンス変数を設定して、必要な構成可能な動作を駆動します。

于 2013-08-06T03:11:55.860 に答える