嵐について話す

インタビュー指向のブログは、Q / Aスタイルで提示されます。


質問1:Stormを簡単に紹介しますか?

回答1:

ストームは無料でオープンソースの分散型リアルタイムコンピューティングシステムです。Stormを使用すると、無制限のデータストリームを簡単に確実に処理できます。Hadoopがビッグデータをバッチ処理するように、Stormはリアルタイムでデータを処理できます。

以下に示すようなストームクラスタアーキテクチャ:

ここに画像の説明を挿入
上の図の説明:

1. Nimbus(マスターとして、機能:コードをスーパーバイザーに配布)
Stormクラスターのマスターノードは、ユーザーコードを配布し、特定のスーパーバイザーノードのワーカーノードに割り当てて、トポロジーに対応するコンポーネント(Spout / Bolt)のタスクを実行します。 。

2.スーパーバイザ(スレーブとしての機能:ワーカープロセスの開始と終了の管理)
ストームクラスタのスレーブノードは、スーパーバイザノードで実行されている各ワーカープロセスの開始と終了を管理します。Stormの構成ファイルのsupervisor.slots.ports構成アイテムを使用して、スーパーバイザーで許可される最大スロット数を指定できます。各スロットはポート番号によって一意に識別され、ポート番号はワーカープロセスに対応します(ワーカープロセスが開始)。

3.ワーカー(
コンポーネントロジックを具体的に処理するプロセス)コンポーネントロジックを具体的に処理するプロセスを実行しますWorkerが実行するタスクには、SpoutタスクとBoltタスクの2種類しかありません。

4.タスク
ワーカーの各スパウト/ボルトスレッドはタスクと呼ばれます。ストーム0.8以降、タスクは物理スレッドに対応しなくなります。異なるスパウト/ボルトのタスクは、エグゼキューターと呼ばれる物理スレッドを共有する場合があります。

5. ZooKeeperは
Nimbusとスーパーバイザーを調整するために使用され、スーパーバイザーが問題のためにトポロジーを実行できない場合、Nimbusはすぐにトポロジーを検知して再配布し、他の使用可能なスーパーバイザーで実行します。


質問2:Stormプログラミングモデルについて説明します(注ぎ口->タプル->ボルト)?

回答2:

Stromは、操作中にスパウトとボルトの2つのコンポーネントに分割できます。これらのコンポーネントのうち、データソースはスパウトから始まり、データはタプルモードでボルトに送信されます。複数のボルトを直列に接続したり、ボルトを複数のスポット/ボルトに接続したりすることもできます。 。

実行時の原則全体は次のとおりです。

ここに画像の説明を挿入
上の画像の主な概念の説明:

1. Topology
Stormで実行されているリアルタイムアプリケーションの名前。SpoutとBoltを統合したトポロジグラフ。SpoutとBoltの組み合わせ関係、並行数、構成などを定義します。

2. Spout
は、トポロジー内のソースデータストリームのコンポーネントを取得します。通常、spoutは外部データソースからデータを読み取り、トポロジー内のソースデータに変換します。

3. Bolt
はデータを受け入れ、処理コンポーネントを実行します。ここで、ユーザーは必要な操作を実行できます。

4.
メッセージのグループとして理解される、タプルの1回限りのメッセージ送信の基本単位はタプルです。

5.ストリーム
タプルのコレクション。データの流れを表します。


質問3:トポロジの操作について話してください。

Answer3:

Stormでは、リアルタイムアプリケーションのコンピューティングタスクは、Hadoop MapReduceタスクと同様のトポロジーとしてパッケージ化およびリリースされます。ただし、1つの違いがあります。Hadoopでは、MapReduceタスクは実行が完了すると最終的に終了します。Stormでは、Topologyタスクが送信されると、停止しない限り終了しません計算タスクトポロジは、データストリーム(ストリーム)を介してさまざまなスパウトとボルトで接続されたグラフです。ストームがクラスタでトポロジを実行すると、主に次の3つのエンティティを通じてトポロジの実行が完了します。

(1)。ワーカー(プロセス)
(2)。実行者(スレッド)
(3)。タスク
ここに画像の説明を挿入

1.ワーカー(1つのワーカープロセスが1つのトポロジのサブセットを実行する)
1つのワーカープロセスが1つのトポロジのサブセットを実行する(注:1つのワーカーが複数のトポロジを提供することはありません)。ワーカープロセスは、トポロジコンポーネント(注ぎ口またはボルト)を実行する1つ以上のエグゼキュータースレッドを開始します。したがって、実行中のトポロジは、クラスター内の複数の物理マシン上の複数のワーカープロセスで構成されます。

2.エグゼキューター(エグゼ
キューターはワーカープロセスによって開始される別のスレッド)エグゼキューターはワーカープロセスによって開始される別のスレッドです。各エグゼキューターはトポロジの1つのコンポーネント(注ぎ口またはボルト)のタスクのみを実行します(注:タスクは1つ以上にすることができます。ストームのデフォルトは1つのコンポーネントが1つのタスクのみを生成し、エグゼキュータースレッドはそれぞれにありますすべてのタスクインスタンスは、2番目のループで順次呼び出されます)。

3.タスク(
最終的に注ぎ口またはボルトでコードを実行するユニット)タスクは注ぎ口またはボルトでコードを最終的に実行するユニットです(注:1つのタスクは注ぎ口またはボルトの1つのインスタンスであり、実行中に実行スレッドがこのタスクを呼び出します) nextTupleまたはexecuteメソッド)。トポロジーが開始された後、コンポーネント(注ぎ口またはボルト)のタスクの数は固定されますが、コンポーネントによって使用されるエグゼキュータースレッドの数は動的に調整できます(例:1つのエグゼキュータースレッドはコンポーネントの1つ以上のタスクを実行できます)例)。これは、1つのコンポーネントに#threads <=#タスクという条件があることを意味します(つまり、スレッドの数はタスクの数以下です)。デフォルトでは、タスクの数はエグゼキュータースレッドの数と同じです。つまり、1つのエグゼキュータースレッドは1つのタスクのみを実行します。

ここに画像の説明を挿入


質問4:ストームストリーミングのグループ化について話しますか?

Answer4:

ストリームのグループ化は、Stormで最も重要な抽象化です。スポット/ボルトに対応するタスクがタプルを配布する方法を制御し、ターゲットのスポット/ボルトに対応するタスクにタプルを起動できます。
ここに画像の説明を挿入
現在、ストームストリーミンググループは次のタイプをサポートしています。

1.
ランダムグループをハッフルグループ化し、可能な限り下流のボルトに均等に分散して、フローグループを混合行として定義します。このシャッフルグループは、Spoutからの入力がシャッフルされるか、このボルトのタスクにランダムに分散されることを意味します。シャッフルグループは、各タスクのタプルをより均等に割り当てます。

2.フィールドのグループ化は
フィールドでグループ化され、データ内のフィールド値でグループ化されます。同じフィールド値のタプルは同じタスクに送信されます。このグループ化メカニズムにより、同じフィールド値のタプルは同じタスクに送られます。

3.すべてのグループ化:
各タプルのブロードキャストブロードキャスト送信は、処理のために各ボルトにコピーされます。

4.グローバルグループ
グローバルグループであるタプルは、トランザクショントポロジを実現するために、ボルト内のタスクに割り当てられます。Streamのすべてのタプルは同じボルトタスクに送信されて処理され、すべてのタプルは最小のtask_idを持つボルトタスクに送信されて処理されます。

5.グループ化なし:グループ化なし。
この方法は、並列処理の負荷分散戦略に注意を払わない場合に使用されます。これは現在、シャッフルグループ化と同等です。さらに、Stormはボルトタスクとその上流のデータ提供タスクを同じスレッドの下に配置します。

6.直接グループ化:直接グループ化はグループ化を指定します。
タプルの送信ユニットはタプルの送信先のボルトを直接決定します。通常、タプルを受信して​​送信するボルトを決定するのはボルトです。これは特別なグループ化方法であり、このグループ化を使用すると、メッセージの送信者がメッセージ受信者のどのタスクでメッセージを処理するかを指定できます。このグループ化メソッドを宣言できるのは、Direct Streamとして宣言されたメッセージストリームのみです。また、このメッセージタプルは、emitDirectメソッドを使用して送信する必要があります。メッセージハンドラーは、TopologyContextを通じてメッセージを処理するメッセージのtaskidを取得できます(OutputCollector.emitメソッドもtaskidを返します)。

207の元の記事を公開 80を賞賛 120,000ビュー

おすすめ

転載: blog.csdn.net/qq_36963950/article/details/105336074