目次


IBM InfoSphere Streams 3.2ハンズオン・ラボ

入門編【ラボ2】

Comments

コンテンツシリーズ

このコンテンツは全#シリーズのパート#です: IBM InfoSphere Streams 3.2ハンズオン・ラボ

このシリーズの続きに乞うご期待。

このコンテンツはシリーズの一部分です:IBM InfoSphere Streams 3.2ハンズオン・ラボ

このシリーズの続きに乞うご期待。

ラボ2 データ・フローについて

このラボでは、車両データのフィルタリング・アプリケーションの開発をさらに進めていきます。また、データ・フローに対する理解を深め、実行中のアプリケーションをモニタリング・確認する Studio 機能について詳しく学びます。分かりやすくするため、データがなくなる前に何が起こっているのかを見られるようにする 2 つの拡張機能を作成していきます。1 つ目は流れを遅くする機能 (そのままでは、Streams は速過ぎます)、2 つ目は複数のファイルを読めるようにする機能です。これは、開発とデバッグの一般的な設計パターンです。

2.1 これまでの結果を活用

全員が同じ状態から作業を継続できるように、事前に用意されている次の Studio ワークスペースへ進んでください。

  1. Studio のトップ・メニューから、「ファイル (File)」 > 「ワークスペースの切り替え (Switch Workspace)」 >「/home/streamsadmin/Workspaces/workspace2」の順に選択します。

Studio が終了し、新しいワークスペースで再起動します。ラボ 1 で構築したのと同じアプリケーションを伴うプロジェクトが既に使用可能な状態となっています。唯一、プロジェクトにProject2、メイン・コンポジットに MainComposite2の名前が付いているという点で異なりますが、これは、どのワークスペースを使っているか分かりやすくするため、便宜上、異なる名前を付けているだけです。「プロジェクト・エクスプローラー (Project Explorer)」で、「Project2」 > 「my.name.space」を展開し、「MainComposite2」をダブルクリックしてグラフィカル・エディターを開きます。

  1. Instance Graph」を表示します。
    1. Streams エクスプローラー (Streams Explorer)」の「InfoSphere Streams 3.2.0.0」を展開します。
    2. インスタンス (Instances)」を展開します。
    3. streams@streamsadmin」を右クリックし、「Instance Graph の表示 (Show Instance Graph)」を選択します。

ラボ 1 のジョブが現在も実行中の状態となっています。

2.2 アプリケーションの強化

アプリケーションのモニターとデバッグを容易にする上で、新たに 2 つのオペレーターが必要になります。Throttle オペレーターは、フルスピードではなく、指定した速度で、タプルを入力から出力へコピーします。DirectoryScan オペレーターは、指定したディレクトリーを定期的にスキャンします。オプション条件を満たす新しいファイルそれぞれに対し、ファイルのフルパスを含むタプルを送信します。

使用したいオペレーターを速やかに選択するにあたって、パレットのフィルター・フィールドを使用する代わりに、パレットすべてをブラウズし、オペレーターを選択してみましょう。

  1. グラフィカル・エディターのパレットで、「ツールキット (Toolkits)」の下にある spl を展開し、spl.adapterを展開します。「DirectoryScan」をメイン・コンポジットへドラッグします。エディターが、オペレーターに DirectoryScan_n という名前をつけます。
  2. パレットを下にスクロールして spl.utility を展開します。さらに下にスクロールし、「Throttle」をメイン・コンポジットへドラッグします。オペレーターに、Throttle_nという名前が付けられます。

レイアウトを整えるには、「レイアウト (Layout)」をクリックし、「内容に合わせる (Fit to Content)」をクリックします。

  1. Throttle オペレーターをグラフ (FileSink_nFilter_n の間) へ挿入します。
    1. FileSource_n の出力ストリーム (名前: Observations) を選択します。
    2. この出力ストリームの選択を活用します (すぐ後で、これが役に立ちます)。右クリックして、「コピー (Copy)」を選択します。
    3. エンドポイント・ハンドル (矢印の先端) を Throttle_n の入力へドラッグします。
    4. Throttle_n の出力から、新規のストリームを Filter_n へドラッグします。
    5. この新規ストリームを右クリックして「貼り付け (Paste)」を選択し、「上書きしますか (Confirm Overwrite)」ダイアログで、「はい (Yes)」をクリックします。これにより、スキーマが「Observations」ストリームから新規ストリームへとコピーされます。この操作には、パレットから LocationTypeをドラッグ・アンド・ドロップするのと同じ効果があります。Throttle オペレーターは、単にタプルのフロー速度を制御するのみであり、そのスキーマについては変更できません。
  2. DirectoryScan_n の出力から、ストリームを FileSource_n の入力へドラッグします。

レイアウト (Layout)」をクリックし 「内容に合わせる (Fit to Content)」をクリックします。

図 1. グラフィカル・エディター:レイアウト

最後に、DirectoryScan_n の出力ストリームのスキーマを定義し、どこでファイルを探すか、このオペレーターに指示する必要があります。FileSource_n の構成を調整し (静的パラメーターからではなく、入力ストリームから指示を受けるようになっているため)、Throttle_n にフロー速度を指示します。

  1. DirectoryScan オペレーターの出力ポートは、1 つのスキーマしかサポートしません。このスキーマは、タイプ rstring の単一の属性で、ファイルへのフルパスが含まれています。この属性にはどのような名前をつけてもかまいません。
    1. DirectoryScan_n の出力ストリームを選択します。右クリックし、「編集 (Edit)」を選択します。
    2. プロパティー (Properties)」ビューの「スキーマ (Schema)」タブで、最初の「名前 (Name)」フィールド (プレースホルダー varName) をクリックし、file と入力します。Enter キーを押します。
    3. 最初の「タイプ (Type)」フィールド (プレースホルダー varType) をクリックし、rstring と入力します。手入力を減らし、ミスを予防できるように、コンテンツ・アシスト (Ctrl+Space キー) を使用するようにしてください。
  1. エディターで、DirectoryScan_n オペレーターを選択してください。「プロパティー (Properties)」ビューで、「パラメーター (Param)」タブを開き、directory パラメーターを値 "/home/streamsadmin/data" (二重引用符を付け忘れないようにしてください) に設定します。
図 2. プロパティー・ビュー
  1. FileSource オペレーターは、どのファイルを読み取る必要があるかを認識しています。読み取るのは、静的パラメーター (file と呼ばれる) からの場合、または入力ストリーム上の入ってくるタプルからの場合がありますが、両方からということはありません。ここでは、ファイル名をDirectoryScan オペレーターから取得することになるので、前に使用した file パラメーターを取り除く必要があります。

エディターで FileSource_n オペレーターを選択します。「プロパティー (Properties)」ビュー (「パラメーター (Param)」タブ) で、file パラメーターをクリックし、「削除 (Remove)」をクリックします。

  1. Throttle オペレーターには、フロー速度を指定する必須パラメーターがあります。これは、浮動小数点数で、単位は 1 秒あたりのタプル数になります。

エディターで、Throttle_n を選択します。「プロパティー (Properties)」ビュー (「パラメーター (Param)」タブ) で、rate パラメーターの隣にある値フィールドをクリックし、40.0 と入力します (浮動小数点値を示すため、小数点も必須です)。

保存します。エラーは出ないはずです。

2.3 Instance Graph によるアプリケーションのモニタリング

Studio の Instance Graph により、使用するアプリケーションが何をしているか、ならびにデータがどのように実行中のジョブを流れているかについて、さまざまな方法でモニタリングできます。ラボのこのセクションでは、それらの機能について見ていきたいと思います。ここに出てくる手順は、単なるヒントです。

  1. アプリケーションを起動します。「プロジェクト・エクスプローラー (Project Explorer)」で、メイン・コンポジット (ワークステーションを切り替えたかどうかにより異なりますが、Project2MainComposite2 あるいは Project1MainComposite1) を右クリックし、「起動 (Launch)」を選択します。「構成の編集 (Edit Configuration)」ダイアログで「継続 (Continue)」 (ワークスペースを切り替えた場合には、「適用 (Apply)」を先にクリックする必要があるかもしれません) をクリックします。
  2. Instance Graph」ビューを最大化します。実行中のジョブが 2 つあります。1 つは先ほど起動したジョブ、もう 1 つはこの前のエクササイズでのジョブです。前のエクササイズのものは休止 (データが何も入ってこない状態) していますが、実行中のままにしておいてください。
図 3. インスタンス・グラフ・ビュー

「Instance Graph」の右側には、レイアウト・オプションのドロップダウン・メニューと、「カラー・スキーム (Color Schemes)」と呼ばれる選択ペインがあり、これらを利用して画面を操作できます。いろいろなオプションを見てみましょう。これらのオプションの内容を理解する上で、以下の解説と提案をお役立てください。

レイアウト・オプションでは、グラフでオペレーターがどのようにグループ分けされるかを操作します。

  • コンポジット (Composite)」別: これがデフォルトです。ここには、2 つの主なコンポジット (つまり、2 つのアプリケーション) が表示されています。各コンポジットに、アプリケーションを構成するオペレーターが記載されています。3 つが古いジョブ、5 つが新しいジョブのものとなっています。
  • カテゴリー (Category)」別: オペレーターにカテゴリーを割り当て、希望する形にグループ分けできます。多数のオペレーターが存在する場合に便利です。このラボではこの機能を使わなかったため、このオプションでは、すべてのオペレーターがグループ分けされることなく表示されています (もちろん 2 つの主なフローは識別できるようになっています)。
  • PE」別: PE は、プロセッシング・エレメントの略で、本質的にはランタイム・プロセスです。オペレーターは、単一の PE へ統合 (「融合」) することができます。そうすることで、オペレーターは堅く結びつけられ、コミュニケーションの待ち時間を削減します。これはパフォーマンス最適化に関するトピックで、このラボの対象範囲外となります。ここでは単純に、各オペレーターにそれぞれのプロセスを与えるデフォルト設定を使用してきました。このレイアウト・オプションでは、PE を表すボックス内に、その PE に属す各オペレーターが表示されますが、今回のケースではあまり役には立ちません。
  • ホスト (Host)」別: ここで使用している仮想マシンは単一ホストであるため、すべてのオペレーターが、ホストを表す同じボックス内に表示されています。
  1. 残りのエクササイズでは、レイアウトを「コンポジット (Composit)」のままにしておいてください。

次に、カラー・スキームを見てみましょう。スキームはそれぞれ独立 (1 度に 1 つしかチェックできません) しており、別のスキームに割り当てられた色のチェックボックスは反応しません。ただし、新しくカラー・スキームを追加したり、既存のものを変更したりすることは可能です。カラー・スキームでは、プロパティー (属する PE もしくはジョブや、実行しているホストなど) やメトリックに基づいてオペレーターに色を割り当てます。メトリックは、診断統計をモニターするために Streams ランタイムが維持するカウンターです。これは、定期的に更新され、インスタンスのリアルタイム・ビューを表示します。これは、特に大規模・複雑なグラフにおいて、問題を素早く見つけるのに大いに役立ちます。

  1. デフォルトのカラー・スキームは「正常性 (Health)」です。「カラー・スキーム (Color Schemes)」ペインの「正常性(Health)」を三角アイコンで展開します。緑色は、オペレーター (実際はその PE) が正常であることを示しています。つまり、エラーがなく、実行しており、データを処理する準備が整っていることを意味しています。アプリケーションを起動する際、オペレーターが緑色に変わる前に、赤や黄色であったことに気が付かれたかと思います。これは、例えば、ストリーム接続が確立する前に、ある PE が別の PE のロード完了を待っているなど、初期化のプロセスを反映しているものです。
  2. 100 以下のフロー [n タプル/秒] (Flow Under 100 [nTuples/s])」カラー・スキームにチェックを入れます。(おそらく) すべてのオペレーターが黒に変わるかと思います。この色の変化は、タプルが流れていないことを示しています。これは、アプリケーションを起動してから 45 秒程度以上経っているためです。スロットルを介しても、ファイル全体の読み取りは既に完了しています。

ここで、さらにデータを供給する必要があります。ソース・ディレクトリーに同じファイルが複数回出てくるようにすることで、簡単に供給できます。

  1. これを簡単に実施する方法の 1 つとして、File Browser が挙げられます。
    1. デスクトップ上で、streamsadmin の「ホーム (Home)」アイコンをダブルクリックし、File Browser を開きます (アイコンは、Studio ウィンドウを最小化するか移動しないと見えないかもしれません)。
    2. data ディレクトリーをダブルクリックし、新しいウィンドウまたはビューでそのディレクトリーを開きます。
    3. streamsadmin の File Browser ウィンドウを閉じるか最小化します。
    4. data ウィンドウで、all.cars ファイルを右クリックし、コンテキスト・メニューで「コピー (Copy)」を選択します。

これで、別のものをコピーしない限り、好きな回数だけこのファイルをディレクトリーへ貼り付けできます。貼り付ける都度ファイルのコピーが追加され、アプリケーションがそれを確認し、データを処理します。ファイルには 1,900 件のレコードがあり、スロットルされた速度は毎秒 40 タプルであるため、各ファイルの処理に約 45 秒強かかることになります。

  1. Data の File Browser ウィンドウと同時に、Instance Graph も見えるようにしておいてください。data ウィンドウのどこでもいいので右クリックし、「貼り付け (Paste)」を選択します。

その後少し遅れて (DirectoryScan オペレーターによるスキャンは 5 秒おき)、新しいジョブ内の色が変わります。古いジョブの方は、ファイルを 1 つしか読み取らないように設計されているため、黒のままです。始動時の現象は別にして、ほとんどの場合、Throttle_nFilter_n が黄色 (31-40)、FileSink_n が茶色 (1-5) となります。Filter オペレーターは、タプルのサブセットのみを通すため、通過後の割合が低くなるのは、道理にかなっています。1 分弱でオペレーターの色は黒に戻ります。もう一度ファイル・コピーの貼り付けをして、フローを再度開始してみてください。

図 4. ファイル・ブラウザー
  1. nFinalPunctsSubmitted のカラー・スキームにチェックを入れます。「最終パンクチュエーション (Final Punctuation)」マーカーは、特別なメッセージ (タプルではありません) で、ストリームに新規タプルがもはや含まれていないことを示すものであり、どのオペレーターでも生成されます。このマーカーは、グラフを通してダウンストリームへ行きます。オペレーターが、すべての入力ポート (皆さんが、これまで使用してきたオペレーターには、すべて、入力ポートが 1 つしかありません)でマーカーを受け取ると、それ以降は休止状態、終了準備が整った状態となり、最終パンクチュエーションをサブミットします。FileSink のような、出力ポートのないオペレーターは、このメトリックをサポートしないため、このスキームでは色付けされません。

古いジョブのオペレーターが黒くなっています。これは、最終パンクチュエーションを少なくとも 1 つサブミットしたことを示しています。これは、FileSource が入力ファイルの最後に到達した際に起こります。現行ジョブのオペレーターは緑色 (最終パンクチュエーションなし) です。これは、入力データの最後に到達しておらず、また到達することもないためです。つまり、いつソース・ディレクトリーに別のファイルが現れるか、知ることはできないからです。

  1. Instance Graph を雑然とさせても仕方がないので、古いジョブについてはもう除去してかまいません。これには、以下 3 つの方法があります。
    1. 少しだけすっきりさせたい場合には、コンポジットのタイトル・バーにある最小化ボタンをクリックしてメイン・コンポジットを最小化します。
    2. ビューからは取り除きたいものの、ジョブをキャンセルするにはまだ早すぎると思われる場合は、フィルターしてグラフ表示から取り除きます。「Instant Graph」ビューのツールバーにある「グラフのフィルター… (Filter graph…)」ボタンをクリックし、「Instance Graph フィルター (Instance Graph Filter)」ダイアログで、「ジョブ ID フィルター (Job ID Filter)」下の現行ジョブのみにチェックを入れ、「OK」をクリックします。
    3. ジョブを完全にキャンセルするには、メイン・コンポジットのどこでもいいので右クリックし、「ジョブのキャンセル (Cancel job)」を選択します。「確認 (Confirm)」ダイアログで「はい (Yes)」をクリックします。

内容に合わせる (Fit to Content)」をクリックします。

2.4 ストリーム・データの確認

開発中、全体的なタプルのフローだけでなく、実際のデータについても確認したい状況が多々あるかと思います。ラボ 1 では結果ファイルのみを見てきましたが、Instant Graph 内のデータを見ることも可能です。そうすることで、特定のオペレーターの出力をキャプチャーしようとする度に FileSink を追加する必要がなくなります。Filter オペレーターへの入力と、Filter オペレーターからの出力が、予想通りに機能しているか確認してみましょう。

  1. 「Instance Graph」で、Throttle_n Filter_n 間のストリームを右クリックし、「データの表示 (Show Data)」を選択します (「信頼できない証明書のトラスト・マネージャー (Untrusted Certificate Trust Manager)」メッセージが表示された場合、「永続的にこの証明書を受け入れる (Permanently accept the certificate)」を選択し、「OK」をクリックしてください)。

データの仮想化設定 (Data Visualization setting)」ダイアログで、タプル・タイプが予想通りのものか (属性の ID時間緯度経度速度、および見出し) を確認し、「OK」をクリックすると「プロパティー (Properties)」ビューが表示されます。

  1. Filter_nFileSink_n 間のストリーム Filtered に対して同じ手順を繰り返します。両方の「プロパティー (Properties)」ビューを移動し、サイズを調整して、Instance Graph と同時に両方の表が見えるようにします。

入力ファイルのコピーをもうひとつ Data ディレクトリーへコピーし、データ表を見てみます。予想通り、出力に、id 値が「C101」または「C133」のタプルのみが表示され、入力にはそれ以外の車両 ID も混ざっていることが分かります。

図 5. インスタンス・グラフ・ビュー

データを十分に確認したら、2 つの「プロパティー (Properties)」浮動ビューを終了します。

ラボ2 は以上です。


ダウンロード可能なリソース


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Information Management, Cloud computing, Linux
ArticleID=968863
ArticleTitle=IBM InfoSphere Streams 3.2ハンズオン・ラボ: 入門編【ラボ2】
publish-date=05072014