IBM InfoSphere Streams 3-2...

55
2013 11 08 IBM InfoSphere Streams 3.2 ハンズオン・ラボ: 入門編 2014 2 英語版第 2 版をベースに日本語化および Streams V3.2 対応

Transcript of IBM InfoSphere Streams 3-2...

Page 1: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

2013 年 11 月 08 日

IBM InfoSphere Streams 3.2

ハンズオン・ラボ: 入門編

2014 年 2 月

* 英語版第 2 版をベースに日本語化および Streams V3.2 対応

Page 2: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page ii Streams 3.x ハンズオン・ラボ

目次

はじめに: INFOSPHERE STREAMS 概要 ....................................................................................................................................... 1 目標と目的 ........................................................................................................................................................... 1 概要 .............................................................................................................................................................. 2 ラボ環境 .............................................................................................................................................................. 3

ラボ 1 シンプルな STREAMS アプリケーション ................................................................................................................ 4 1.1 実践開始 ............................................................................................................................................... 4 1.2 STREAMS STUDIO の開始 ........................................................................................................................ 5 1.3 ビッグデータ用タスク・ランチャー (TASK LAUNCHER FOR BIG DATA) ............................................................ 6 1.4 「プロジェクト・エクスプローラー (PROJECT EXPLORER)」ビュー ................................................................. 10 1.5 グラフィカル・エディター内でのアプリケーションの開発 ........................................................................... 11 1.6 アプリケーションの実行 ......................................................................................................................... 20

ラボ 2 データ・フローについて ........................................................................................................................................ 24 2.1 これまでの結果を活用 .......................................................................................................................... 24 2.2 アプリケーションの強化 ......................................................................................................................... 25 2.3 INSTANCE GRAPH によるアプリケーションのモニタリング .......................................................................... 27 2.4 ストリーム・データの確認 ...................................................................................................................... 30

ラボ 3 強化された分析とデータ視覚化 ........................................................................................................................... 32 3.1 これまでの結果を活用 .......................................................................................................................... 32 3.2 ウィンドウ・ベースのオペレーター .......................................................................................................... 33 3.3 STREAMS CONSOLE ............................................................................................................................... 37 3.4 ビューとチャート .................................................................................................................................... 38

ラボ 4 エクスポートしたストリームによるアプリケーションのモジュール設計 ..................................................................... 42 4.1 これまでの結果を活用 .......................................................................................................................... 42 4.2 不測のデータに対するテストの追加 ...................................................................................................... 42 4.3 取り込み (INGEST) モジュールの分割 ..................................................................................................... 46 4.4 ライブ・フィードの追加 ........................................................................................................................... 49 4.5 まとめ .................................................................................................................................................. 52

付録: 仮想マシン・ホストの要件 ....................................................................................................................................................... 53

Page 3: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 1

はじめに: InfoSphere Streams 概要

IBM InfoSphere Streams (「Streams」) により、大容量の変動する情報を継続的かつ非常に迅速に分析できる

ようになり、ビジネス上の洞察と意思決定を改善できるようになります。また、InfoSphere Streams は、データ・

ストリーム内に存在する情報の取り込み、フィルタリング、分析、相関を行う、ユーザーが開発したアプリケーショ

ンの実行プラットフォームやサービスともなります。

以下は、InfoSphere Streams に含まれている主なコンポーネントです。

Streams ランタイム・エンジン: 連携して機能する、分散したプロセスの集合体です。クラスター内の指定された

ホスト・コンピューターにあるストリーム処理アプリケーションの実行を円滑化します。これらを単一インスタンス

化したものは、Streams インスタンスと呼ばれています。

Streams Processing Language (SPL): ストリーム処理アプリケーションを作成するための宣言型の言語お

よびフレームワークです (直接的な SPL プログラミングについては、このラボでは対象範囲外です)。

Streams Studio (「Studio」): Streams アプリケーションの作成、コンパイル、実行、視覚化、およびデバッグを

可能にする Eclipse ベースの開発環境です。開発ツールでは、グラフィカル (「ドラッグ・アンド・ドロップ」) な設計

と編集、ならびに実行中アプリケーションの迅速なデータ視覚化をサポートしています。Instance Graph 機能に

より、Sterams インスタンス内で実行中のアプリケーションでさまざまなビューを表示します。これには、ライブ・

データのフロー・メトリック表示や、多数の色による強調表示設定が含まれ、データ・フローの迅速な理解や診断

を可能にします。

InfoSphere Streams Console: Streams Console は、Streams Web Service (SWS) が提供する Web ベー

スのグラフィカル・ユーザー・インターフェースです。SWS を実行するサーバーに対して HTTPS 接続を保持する

任意のコンピューターから、Streams Console を使用して、Streams インスタンスおよびアプリケーションのモニ

ターと管理を行うことができます。Streams Console は、チャートや表でのデータの視覚化についてもサポートし

ています。

Streamtool: Streams ランタイム・エンジンに対するコマンド行インターフェースです (このラボでは、コマンド行

インターフェースは使用しません)。

目標と目的

このラボの目標は、以下の通りです。

小規模のサンプル・アプリケーションを開発しながら、Streams Studio の多くのコンポーネントおよびフィ

ーチャーに触れてみる機会を提供することが、このラボの目標です。基礎となる SPL コードは常に使用

できるようにはなっていますが、このラボにおいて、直接のプログラミングは全く必要ないため、SPL 機能を詳論することはしません。

このラボ (関連資料に加えて) の目的は、以下を実施することです。

● ストリーム・コンピューティングの基礎に関する説明

● InfoSphere Streams の基本的な概念の説明

Page 4: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 2 Streams 3.x ハンズオン・ラボ

● InfoSphere Streams ランタイム環境の紹介

● InfoSphere Streams Studio の紹介

IDE のナビゲーションに関する概要紹介

プロジェクトの作成

ジョブのサブミットとキャンセル

Instance Graph におけるジョブ、正常性、メトリック、およびデータの表示

● Streams Studio のグラフィカルな編集環境の紹介

組み込みオペレーターの一部の適用

SPL アプリケーションの設計に挑戦、および設計したアプリケーションの拡張

● Streams Console におけるデータの視覚化機能の紹介

概要

このハンズオン・ラボでは、InfoSphere Streams のコンポーネントとツールを幅広くご紹介していきます。

図 1. InfoSphere Streams ラボ: 概要

このラボでは、Smarter Cities の自動車シナリオ「車両ロケーションと速度 (およびその他の変動要素) の取り扱

い」の例に基づいて進めていきます。以下のようなテクニックと原則を説明するのにこのシナリオを使います。

● アプリケーション・グラフのグラフィカル・デザインと、プログラムの詳細を構成する

ための「プロパティー (Properties)」ビュー

● Streams アプリケーションおよびデータ・フロー・メトリックの、ランタイムでの視覚

● プロパティーに基づいた、データ・ストリームのインポートとエクスポートを使用した

アプリケーション統合

図 1 は、完了済みラボの図解です。ラボ環境には 5 つの Eclipse 「ワークスペース」(ディレクトリー) が含まれ、

それぞれに 1 から 5 まで番号が振られています。ラボは、ひとつずつ積み重ねていく形で進行していきますが、

各ワークスペースには、先行ラボから結果として得られるはずのプロジェクトを既に含めた状態にしてあります (ワークスペース 1 は空の状態ですが、ワークスペース 5 は、編集の指示を出すことを除いて、 終的な状態と

なっています)。このように準備してあるため、受講者の方にはいろいろとお試しいただいて、いずれかのラボで

問題が発生したとしても、次のラボでワークスペースを切り替えるだけで、すべてがあるべき状態でラボを進めて

いただけます。

Page 5: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 3

ラボは以下 4 つに分割されています。

ラボ 1 – シンプルな Streams アプリケーション: Streams インスタンスを開始します。Streams Studio を開き、

ビューを確認します。SPL アプリケーション・プロジェクトを作成します。ここでは、3 つのオペレーターがあるアプ

リケーション・グラフを作成し、オペレーターを構成します。次に、アプリケーションを実行し、結果を検証します。

ラボ 2 – アプリケーションの機能強化: 指定されたディレクトリーから複数のファイルを読み取る機能を追加し、

発生している事象を観察できるようにフローの速度を下げます。ジョブと PE について学びます。Instance Graph を使い、ストリーム・フローをモニタリングし、データを表示します。

ラボ 3 – アプリケーションの機能強化: オペレーターを追加し、5 つの観測毎に平均速度を (2 台の車両別々で) 計算します。Streams Console を使用し、結果を視覚化します。

ラボ 4 – アプリケーションの機能強化: オペレーターを追加して車両 ID フォーマットを確認し、予期していなかっ

た ID 構造を持つ記録を、エラー・ストリームへと分けます。エクスポートしたアプリケーション・ストリームを使用し

て、モジュラー・アプリケーションを作成します。可能であれば、ライブ・データを取り込みます (この作業には、イ

ンターネット接続が必要になります)。

ラボ環境

以下のソフトウェアは、皆さんの VMware イメージにインストールしてあります。

● Red Hat Enterprise Linux 5.5 (64 ビット)

● IBM InfoSphere Streams 3.2.0.0

● InfoSphere Streams Studio 3.2、Eclipse 4.2.1

● IBM InfoSphere Streams 3.2 Information Center (オフライン)

● 初心者向けの、SPL 例 50 件

表 1. Streams 3.x ラボ情報: 仮想マシン情報

パラメーター 値

ホスト名 streamsqse, streamslab、streamstrial、

bigdata のいずれか (どれでも大丈夫です)

ユーザーおよび管理者の ID streamsadmin

ユーザー・パスワード passw0rd (password のアルファベット O を、ゼロにしたもの)

ルート・パスワード passw0rd

Page 6: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 4 Streams 3.x ハンズオン・ラボ

ラボ 1 シンプルな Streams アプリケーション

このラボでは、シンプルなシナリオに合わせ、アプリケーションを開発します。ここでのシナリオは、車両のロケー

ション、速度、およびその他のセンサーに関するデータをファイルから読み取り、特定の車両の観測値を探し、選

んだ観測値を別のファイルに書き込むというものです。これは厳密に言うとデータのストリームではありませんが、

ファイル I/O が Streams アプリケーションの開発において、なぜ、どのように重要となるのかを考察し、後ほどデ

ータ・ストリームのシミュレーションに、どのように活用できるのかをお見せします。

Streams Instance を開始します。Streams Studio を開き、ビュー (ウィンドウ) を確認します。SPL アプリケーシ

ョン・プロジェクトを作成し、3 つのオペレーターがあるアプリケーション・グラフを作成し、オペレーターを構成しま

す。次に、アプリケーションを実行し、結果を検証します。

1.1 実践開始

このラボでは、streamsadmin アカウントを使用します。ログイン後、以下の画像のように、いくつかアイコンが

ある状態のデスクトップが表示されます。

__1. VMware イメージにログインします。

ユーザー: Streams Administrator (streamsadmin) パスワード: passw0rd (password のアルファベット O を、ゼロにしたもの)

以前に作成した Streams インスタンスを開始すると、ランタイム環境が準備され、アプリケーションの実行をサブ

ミットできるようになります。このインスタンスは、少数の Linux サービス (「デーモン」) であり、サービスは、指定

したホスト・セット上で実行され、これをコントロールします。また、セキュリティーとユーザー・グループを管理する

構成設定をコントロールし、リソースとポート番号の共有なども行います。今回は、ホストは 1 つしかなく、インス

タンスは streamsadmin ユーザーにしか見えません。

Page 7: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 5

__2. 「Streams_Instances」デスクトップ・ランチャーをダブル クリックします。

ウィンドウが開き、Streams (選択済み) という名前で、ステータスが「停止済み (Stopped)」のインスタ

ンスが表示されます。「開始 (Start)」をクリックします。進行ダイアログが消えると、ステータスが「開始

済み (Started)」に変わります。「終了 (Exit)」をクリックします。

1.2 Streams Studio の開始

次に、Studio を開始し、そのフィーチャーをいくつか確認して、 初のアプリケーションを作成してみます。

__1. 「Streams Studio」デスクトップ・ランチャーをダブルクリックしてください。

Page 8: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 6 Streams 3.x ハンズオン・ラボ

「ワークスペース・ランチャー (Workspace Launcher)」の「ワークスペース (Workspace)」が /home/streamsadmin/Workspaces/workspace1 に設定されているようにし、「OK」をクリックします。

Eclipse ベースの Studio アプリケーションが開きます。Eclipse のウィンドウは、複数の「ビュー」、つまりサブウ

ィンドウに分かれています。複数の「タブ」が付いてるものもあります。左側には、「プロジェクト・エクスプローラー (Project Explorer)」と「Streams エクスプローラー (Streams Explorer)」という 2 つのタブがあり、中央は、エ

ディター (コードとグラフ用) と「タスク・ランチャー (Task Launcher)」(次のセクションを参照してください) です。

右側は「アウトライン (Outline)」」ビュー (SPL ファイルをエディターに入れるまでは何も表示されません) で、一

番下は「コンソール (Console)」ビューと他に 2 つのビューがあるタブ付きウィンドウです。Eclipse では、このよ

うな配置全体を「パースペクティブ」と呼びますが、これは Streams Studio パースペクティブになります。

1.3 ビッグデータ用タスク・ランチャー (Task Launcher for Big Data)

このリリースには、開発者やその他のユーザーがすぐに利用を開始できるようにする、タスク指向のガイド一式

が、新しい機能として備わっています。そのガイドのなかに、ビッグデータ用タスク・ランチャー (Task Launcher for Big Data) があります。Studio を開くと、デフォルトで 「ビッグデータ用タスク・ランチャー (Task Launcher for Big Data)」 が開くようになっています。

Page 9: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 7

__1. ここで少々時間をかけて、いろんなタブを見てみてください。特に、各タブの「詳細情報 (Learn More)」グループにあるリンクから、Studio の「ヘルプ (Help)」ビューが表示されるので、他のタスクについても

見てみてください。

「ファースト・ステップ (First Steps)」」の下にあるほとんどのタスクは既に完了しています。これらのタスクは、

Streams のインストール・プロセス (Studio 外) が完了した際にも、別の「ファースト・ステップ (First Steps)」ユーティリティーに表示されます。

注:

「タスク・ランチャー (Task Launcher)」については、Studio の大部分がそうであるように、起動時に表示する

か、クローズする時にプロンプトを表示するか、といった項目を設定して、コントロールすることが可能です。そ

うすることで、新規ユーザーの方がこのシステムについて学ぶために用意された機能が、上級者の方の邪魔

にならないようにします。

「タスク・ランチャー (Task Launcher)」から次の 2 つのタスクを開始します。 初に、Streams プロジェクト (Eclipse ワークスペースのディレクトリー・ツリーにあるファイル集) を作成し、次に、そのプロジェクトのアプリケ

ーションを作成します。

__2. 「新規 Streams プロジェクトの作成 (Create a new Streams project)」をクリックすると、このタスクは

「概要 (Overview)」タブと、「クイック・リンク (Quick Links)」下の「開発 (Develop)」にも表示されます

__3. 「新規 SPL プロジェクト (New SPL Project)」ウィザードで、「プロジェクト名 (Project name)」に、

Project1 と入力します。「デフォルト・ロケーションの使用 (Use default location)」にはチェックが入

ったままにしておきます。「次へ (Next)」をクリックします。

Page 10: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 8 Streams 3.x ハンズオン・ラボ

__4. 「SPL プロジェクト構成 (SPL Project Configuration)」パネルで、「ツールキットの名前 (Toolkit name)」を Toolkit1 へと変更し、「依存関係 (Dependencies)」フィールドの中にある「ツールキット

の場所 (Toolkit Locations)」からチェックを外します。残りすべての項目は、チェックが外れたままにし

ます。「完了 (Finish)」をクリックします。

注:

アプリケーションがオペレーターやその他のリソースを 1 つ以上のツールキットから必要とする場合、「依存関

係 (Dependencies)」フィールドで、その旨の信号を出すことができます。これは、Stream を柔軟かつ強力な

プラットフォームとして形成する拡張性の重要な要素です。このラボでは、組み込みの標準ツールキットからの

構成要素のみを使用します。

新規プロジェクトが「プロジェクト・エクスプローラー (Project Explorer)」ビューの左側に表示されます。

__5. 「ビッグデータ用タスク・ランチャー (Task Launcher for Big Data)」の「開発 (Develop)」タブを開き、

「SPL アプリケーションの作成 (Create an SPL application)」をクリックします。

「新規メイン・コンポジット (New Main Composite)」ウィザードが「ヘルプ (Help)」ビューとともに表示されます。

このウィザードは、多数の手順 (名前空間、SPL ソース・ファイル、およびメイン・コンポジットの作成) にワンパス

で対応してくれます。

Page 11: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 9

注:

メイン・コンポジットは、アプリケーションに相当します。通常、各メイン・コンポジットは、自身のソース・ファイル

(同一名) に存在しますが、これは必須ではありません。

__6. 「新規メイン・コンポジット (New Main Composite)」ウィザードで、以下を入力します。

「プロジェクト名 (Project name)」: Project1 (「参照… (Browse…)」ボタ

ンをクリックします) 「名前空間 (Namespace)」: my.name.space 「メイン・コンポジット (Main Composite)」の「名前 (Name)」: MainComposite1 (「メイン・コンポジット

の生成 (Generate Main Composite)」にはチェックを入れたままにします) 「ソース・タイプ (Source Type)」: SPL source (*.spl) 「ソース・ファイル (Source File)」の名前: SourceFile1.spl (「メイン・コンポジットの

名前を使用 (Use name of main composite)」のチェックは外します)

「完了 (Finish)」をクリックします。

コード・モジュール SourceFile1.spl がグラフィカル・エディター内で開きます。この際、領域内の

MainComposite1 は空の状態です。エディター用にさらなるスペースを確保したい場合には、右側の「ヘルプ (Help)」ビューを閉じます。「ビッグデータ用タスク・ランチャー (Task Launcher for Big Data)」も閉じてかまい

ません。

Page 12: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 10 Streams 3.x ハンズオン・ラボ

1.4 「プロジェクト・エクスプローラー (Project Explorer)」ビュー

では、Studio ビューのうちの 1 つである「プロジェクト・エクスプローラー (Project Explorer)」ビューを見てみま

しょう。このビューでは、ワークスペース内にある全プロジェクトに関する、オブジェクト・ベースとファイル・ベース

のビューを表示します。

__1. 「プロジェクト・エクスプローラー (Project Explorer)」の左側にある白抜き三角印のアイコンをクリックし

て、Project1 を展開します。

次の階層には、名前空間とリソース (ディレクトリーとファイル) が表示されます。

__2. Project1 の下にある名前空間 my.name.space を展開します。

次の階層には、メイン・コンポジットと、タイプや関数といったその他のオブジェクトが表示されます。

__3. my.name.space の下にあるメイン・コンポジット MainComposite1 を展開します。

次の階層には、ビルド構成が表示されます。ここでは、デフォルトで作成されている「分散 (Distributed)」ひとつだけが表示されます。デバッグ用、スタンドアロン実行用など、複数のビルドを作

成できます。

__4. 「リソース (Resources)」を展開します。

次の階層には、現在のアプリケーションまたはツールキットの説明が含まれる 2 つの XML ファイルとと

もに、ディレクトリーが表示されます (Streams では、プロジェクト編成およびメタデータの観点では、ツ

ールキットとアプリケーションは同じです)。このラボで使用する唯一のディレクトリーは、データ・ディレク

トリーです。これは、データ・ファイル入力/出力のデフォルト・ロケーションになります (絶対パスが指定さ

れていない場合)。

Page 13: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 11

1.5 グラフィカル・エディター内でのアプリケーションの開発

これで、簡単なアプリケーションの構築を開始する準備が整いました。要件の概要は以下の通りです。

● 車両ロケーション・データをファイルから読み取る。

● 車両 ID ごとに、車両ロケーション・データをフィルタリングする。

● フィルタリングした車両ロケーション・データをファイルへ書き込む。

指示詳細は、以下の通りです。

● グラフィカル・エディター内でアプリケーション・グラフを設計する。

● 次の 3 つのオペレーター (オペレーターとは、アプリケーション・グラフの基本的な構成

要素です。) を使用する: ファイルを読み取るオペレーター (FileSource)、ファイルを書

き込むオペレーター (FileSink)、フィルタリングを行うオペレーター (Filter)。

● 以下の手順を実施します。

いくつかのストリームのスキーマとしてサービスを提供するロケーション・デー

タの新規タイプを定義する。

必要なオペレーターをエディターにドロップする。

グラフを「つなぐ」のに必要となるストリーム接続を確立する。

グラフ内のストリームのスキーマを定義する。

各オペレーターのパラメーターおよびその他の詳細を指定する。

表 2. 追加仕様: 車両ロケーション・データのストリーム・タイプ

名前 タイプ コメント

id  rstring 車両 ID (8 ビットの無変換文字列である rstring を使

用)

time  rstring  観測のタイムスタンプ

latitude  float64  緯度 (角度)

longitude  float64  経度 (角度)

speed  float64  車両の速度 (km/h)

heading  float64  走行方向 (角度、北から時計回り)

Page 14: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 12 Streams 3.x ハンズオン・ラボ

このラボは、初歩的な探索を目的としており、ここで SPL 構文とコード化のベスト・プラクティスについて考察する

ことはありません。しかし、その中でも触れておくに値するベスト・プラクティスがひとつあります。それは、各スト

リームの宣言内で、ストリームごとに別々のスキーマ (ストリーム・タイプ) を定義するのではなく、事前にタイプを

作成しておくことで、各ストリームがそのタイプを参照すれば済むようにできるという方法です。こうすることで、コ

ードが重複するのを回避でき、一貫性を高め、より維持しやすくなります。

このような観点から、まず、アプリケーションを流れる主要タプルとなる車両ロケーション・データ用のタイプを作

成します。タイプは、上述の表 2 の仕様に基づいて作成します。新しいタイプの名前は、LocationType としま

す。

__1. SourceFile1.spl のグラフィカル・エディターの領域、メイン・コンポジット (MainComposite1) の外の部分 を (どこでもいいので) 右クリックし、「編集 (Edit)」を選択します。

そうすると、一番上に「プロパティー (Properties)」ビューが表示されます。以下のように表示されてい

るか確認してください。もし違う場合はそれを終了し、もう一度グラフィカル・エディターで、メイン・コンポ

ジットの外の部分を右クリックしてみてください。

__2. 「プロパティー (Properties)」ビューで「タイプ (Types)」タブをクリックします。 「名前 (Name)」の下にあるフィールド Add new type… を選択します。 LocationType とキーボードで入力し、Enter キーを押します。 「名前 (Name)」欄、LocationType の下の Add attribute… とされているフィールドを選択します。 id をキーボードで入力し、Tab キーを押して「タイプ (Type)」欄へと進みます。 rstring をキーボード入力し、Tab キーを押して次の名前フィールドに進みます。

ヒント:

「タイプ (Type)」欄から、Ctrl+Space キーで使用可能なタイプのリストを確認できます。キーボードで打ち込

み始めると (例えば、rstring の「r」)、リストが絞り込まれていきます。指定したいタイプが選択されたら、

Enter キーを押して、選択したものをフィールドに割り当てます。そうすることで、キーボード入力する作業を減

らすことができるとともに、入力ミスも避けられます。

__3. 引き続き、キーボード入力し、Tab キーを用いて次のフィールドへ移動する形で、11 ページの表 2 に記

載の属性名とタイプを入れていきます。

Page 15: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 13

これで、タプル・タイプ LocationType が、名前空間 my.name.space 内のどの (メイン) コンポジットでも、スト

リーム・タイプとして使えるようになりました。13 ページの 表 3 に記載の仕様を指定して、アプリケーション・グラ

フを構築する準備が整います。「プロパティー (Properties)」ビューは開いたままにしておいてください。

ヒント:

浮動「プロパティー (Properties)」ビューによって、他のビューが見えづらく、作業の邪魔となる場合、代わり

に、パースペクティブの一番下にあるビューの「プロパティー (Properties)」タブも使用できます。表示される情

報も同じです。

表 3. 追加仕様: その他のパラメーター

パラメーター 値

入力ファイル /home/streamsadmin/data/all.cars 

出力ファイル filtered.cars 

ファイル形式 CSV (入出力両方とも) 引用符を出力しない

フィルター条件 車両 ID は、“C101” または “C133”

ストリーム名 Observations (フィルター前) Filtered (フィルター後)

この情報で、アプリケーション全体を作成できます。グラフィカル・エディターを使用します。SPL コード化につい

てはこのラボでは取り扱いません。

Page 16: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 14 Streams 3.x ハンズオン・ラボ

ヒント:

作成中のものについて SPL コードを参照したい場合は、グラフィカル・エディター内のいずれかの場所を右ク

リックし、「SPL エディターでオープン (Open with SPL Editor)」を選択します。 そこで表示される内容の説明については、このラボの対象外となります。

使用するオペレーターをエディター内に入れ込むには、パレット内でオペレーターを見つける必要があります。こ

こでは、FileSource、FileSink、Filter の 3 つのオペレーターを探してください。パレットの内容をフィルターする

と、使用したいものをすぐに見つけることができます。

__4. SourceFile1.spl のグラフィカル・エディターのパレット・フィルター欄 (「検索 (Find)」と表示あり) で、

「fi」とキーボード入力します。これにより、必要な 3 つのオペレーターのみにパレットを絞り込めます。

オペレーターをそれぞれ順番に選択して、領域内の MainComposite1 メイン・コンポジットへとドラッグ

します。メイン・コンポジット内でしたら、どこでも構いません。エディターでオペレーターに、

FileSource_n、FileSink_n、Filter_n と名前が付けられます (n には、1、2、もしくは 3 が入ります)。

注:

連番 n が各オペレーター名の末尾に付きます。番号は、オペレーターがグラフに追加された順番で割り振られ

ます。オペレーターにどの番号が割り振られても、アプリケーションに影響することはありません。この資料で

使用しているスクリーン・キャプチャーの情報は、皆さんの設計と一致しない場合があります。なお、このガイド

の説明文では、オペレーター名の末尾に _n (もしくは、同じタイプのものが複数ある場合は _n’ または _n”) を付けます。

注:

オペレーターを追加した後、さらに次のオペレーターをドロップする際は、前に追加したオペレーターではなく、

メイン・コンポジット MainComposite1 が強調表示されているようにしてください。「上書きしますか (Confirm Overwrite)」と指示を求めるダイアログ・ボックスが表示された場合には、「いいえ (No)」をクリックし、再度ド

ロップを試みてください。

注:

メイン・コンポジット外の領域にオペレーターをドロップすると、エディターが新しいコンポジット (Comp_n と呼

ばれる) を作成し、オペレーターをそこに配置します。この場合、Ctrl+Z キーで元に戻すか、「編集 (Edit)」 > 「オペレーターのコンポジットへの追加を元に戻す (Undo Add Composite with Operator)」で元に戻して、

再度試みてください。

ヒント:

レイアウトを整えるには、エディターのツールバーにある 「レイアウト (Layout)」ボタンをクリックします。ズ

ームインし、グラフィカル・エディター領域のスペース全体を使用するには、 「内容に合わせる (Fit to Content)」ボタンをクリックします。ツールバーにあるスライダーによって、ズームの度合いを手動で調整でき

ます。

Page 17: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 15

「レイアウト (Layout)」

__5. FileSource_n’ の出力と Filter_n’ の入力を接続するストリームを追加します。

出力ポートはオペレーターの右側にある黄色の小さなボックスで示されており、入力ポートは左側の黄

色の小さなボックスで示されています。ストリームを作成するには、出力ポートをクリックし、ドラッグを開

始します。そうすると、カーソルが十字の印 + に変わり、出力ポートを始点とした線を引きます。ドラッグ

しながらマウス・ボタンを解放し、別のオペレーターの入力ポート (カーソルを置くと緑色になります) をク

リックすると、接続が完了します。これで、2 つのポートが破線で接続されます。破線は、ストリームがあ

るものの、タイプが未定義であることを示しています。

__6. Filter_n から FileSink_n へ別のストリームを追加します。 「レイアウト (Layout)」 をクリックし、 「内容に合わせる (Fit to Content)」 をクリックして、グラフを編成します。

「レイアウト (Layout)」

ヒント:

デフォルトでは、グラフィカル・エディター内のオペレーターにカーソルを置くと、オペレーターの裏にある SPL コードがポップアップで表示されます。グラフの構築やレイアウトの作業では、これらのポップアップが邪魔にな

る場合があります。「吹き出しの切り替え (Toggle hover)」ツールバー・ボタンをクリックし、これらのポップア

ップをオフにしてください。

Page 18: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 16 Streams 3.x ハンズオン・ラボ

これで、グラフ全体ができましたが、詳細についてはまだ指定されていません。

__7. Ctrl+S か、 「保存 (Save)」ツールバー・ボタン、もしくは、メニューの「ファイル (File)」 > 「保存 (Save)」のいずれかで、これまでの作業を保存してください。

メイン・コンポジットが赤色に変わり、3 つのオペレーターにエラーが表示されますが、これは想定内の現象です。

コードには、オペレーター用およびストリーム・タイプ用のプレースホルダーしか含まれておらず、これらのプレー

スホルダーが、有効なエントリーではないために起こった現象です。

__8. ストリームの名前とタイプを割り当てるには、FileSource_n と Filter_n を接続しているストリーム (破線の矢印) を選択します (場合によって、カーソルがエンクロージング・メイン・コンポジットではなく、スト

リームを選択するまで、何回か試行を繰り返す必要があります)。

そうすると、先ほど LocationType を作成するため使用した「プロパティー (Properties)」ビューに、「ス

トリーム (Stream)」プロパティーが表示されます。編集するグラフが見えにくくならないように、必要に応

じてビューの配置やサイズを変えます (「プロパティー (Properties)」ビューを閉じてしまった場合は、スト

リームを右クリックし、「編集 (Edit)」を選択して再度ビューを表示してください)。

__9. エディターが自動的に生成するプレースホルダー名よりも、分かりやすいストリーム名を付ける方が賢

明です。「プロパティー (Properties)」ビューの「一般 (General)」タブで、「名前の変更… (Rename…)」ボタンをクリックします。「名前の変更 (Rename)」ダイアログ・ボックスの「新しい名前の

指定 (Specify a new name)」下に Observations と入力して、「OK」をクリックします。

Page 19: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 17

注:

ストリームやオペレーターの名前を変更するには、名前を表示しているフィールドにそのまま新しい名前を入

力するのではなく、ボタンをクリックしてダイアログ・ボックスを表示させる必要があります。ここで、その理由に

ついてご説明します。

それは、名前の変更に、リファクタリング 処理が関わってくるためです。つまり、その名前に対するすべてのリ

ファレンスを見つけ、変更する必要があるのです。Streams Studio においては、このプロセスをいつ開始する

のかを知らせる信号が必要です。この状況においては、「OK」のクリックが、その信号となるわけです。

__10. 「スキーマ (Schema)」タブをクリックします。ここでスキーマを指定できますが、今回はタイプが作成済

みであるため、他のオブジェクトと同様に、そのタイプをグラフィカル・エディター内にドラッグ・アンド・ドロ

ップするだけで結構です。

先ほど入力した fi を削除してパレット・フィルターを空にします。そうすると、すべてのオブジェクトが再

び表示されます。「現行グラフ (Current Graph)」下の「スキーマ (Schema)」を展開すると、

「LocationType」タイプとともに、グラフ内に 2 つのストリームが表示されます。「LocationType」を選

択してグラフへとドラッグし、「Observations」ストリーム (FileSource_n と Filter_n の間) 上でドロッ

プします。この際、以下の図のようにストリームの選択ハンドルが緑色に変わったことを確かめてから、

ドロップしてください。

Page 20: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 18 Streams 3.x ハンズオン・ラボ

引き続き「プロパティー (Properties)」ビューが「スキーマ (Schema)」タブに対して開かれている場合、

LocationType の「タイプ (Type)」と、「名前 (Name)」下のプレースホルダーとして <extends> が表示

されているはずです。これは、このストリーム・タイプが、名前を付けたタイプ LocationType の属性を含

まず、代わりに、属性の名前とタイプを伴うスキーマ全体を継承していることを示しています。

__11. ここでも同じようにドラッグ・アンド・ドロップで、LocationType のタイプを他のストリーム (Filter_n と FileSink_n の間) へ割り当てます。そのストリームを選択し、「プロパティー (Properties)」ビューにプロ

パティーを表示させます。

「プロパティー (Properties)」ビューで、「一般 (General)」タブを開き、(「名前の変更… (Rename…)」をクリックするなどして) ストリームの名前を Filtered に変更します。

Ctrl+S などの操作で、グラフを保存します。

FileSink_n については引き続きエラーが表示されるため、メイン・コンポジットは赤いままとなっていますが、こ

れも想定内の状態です。このエラーは、FileSink オペレーターにどのファイルを書き込むかをまだ指示していな

いことに起因します。また、その他のオペレーターについても詳細を指定する必要があります。

__12. グラフィカル・エディターで、FileSink_n を選択します。「プロパティー (Properties)」ビューで、「パラメ

ーター (Param)」タブをクリックします。そうすると、必須パラメーターである「file」が、プレースホルダー

の値 parameterValue (有効な値ではないため、エラーの原因となっています) とともに表示されます。

parameterValue と表示されるフィールドをクリックし、"filtered.cars" (二重引用符付き) と入力し

ます。

これは (「/」で始まらない) 相対パスであるため、このファイルは、現行プロジェクトの data サブディレク

トリーに入る点に注意してください。

__13. さらにもう 2 つパラメーターが必要です。「パラメーターの選択 (Select parameters)」ダイアログで「追

加… (Add…)」をクリックし、「format」と「quoteString」 (下にスクロールしないと見えてこないかもしれ

ません) にチェックを入れ、「OK」をクリックします。format 値は、csv (引用符なし。これは、列挙値で

す) とします。quoteString 値は、false (引用符なし。これは、ブール値です) とします。

Page 21: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 19

__14. FileSource オペレーターにおいて、どのファイルを読み取るかを認識させる必要があります。グラフィ

カル・エディターで、FileSource_n オペレーターを選択します。「プロパティー (Properties)」ビュー (「パラメーター (Param)」タブ) で、「追加… (Add…)」をクリックします。「パラメーターの選択 (Select parameters)」ダイアログで、「file」と「format」を選択し、「OK」をクリックします。file の値は、

"/home/streamsadmin/data/all.cars" (ここに示すとおり、引用符付きで、すべて小文字) としま

す。format は、csv とします。

__15. Filter オペレーターに対して、何をフィルターするかを指示する必要があります。フィルター条件がない

と、あらゆる入力タプルが出力タプルへ、ただコピーされるだけとなります。グラフィカル・エディターで、

Filter_n を選択します。「プロパティー (Properties)」ビュー (「パラメーター (Param)」タブ) で、「追加 (Add…)」をクリックします。「パラメーターの選択 (Select parameters)」ダイアログで、「filter」を選択

し、「OK」をクリックします。

値のフィールドに、ブール式 id in ["C101","C133"] を入力し、式が true と評価するタプルだけが

出力へ渡されるように示唆します (キー・ワード「in」に続けてリストを掲載したこの式は、式の左側に示

されたアイテムがリストにあるエレメントと一致する場合にのみ、true の評価を出します)。

保存します。エラーの原因がなくなり、メイン・コンポジットは青になります。これで、使用可能なアプリケ

ーションができあがりました。「プロパティー (Properties)」ビューを終了します。

「プロパティー (Properties)」ビューがあったため見えづらかったかもしれませんが、グラフを保存するたびに、ア

プリケーションをコンパイルするため「ビルド」が開始されていました。進行状況のメッセージが「コンソール (Console)」ビューに表示されます。上にスクロールすると (「コンソール (Console)」を拡大または 大化表示す

るといいかもしれません)、エラーのために終了したビルドが赤字のメッセージとともにいくつか表示されているの

が分かります。 後のビルドについては、エラーが何も表示されずに完了しているはずです。

Page 22: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 20 Streams 3.x ハンズオン・ラボ

1.6 アプリケーションの実行

これで、このプログラムの実行 (Streams Studio 用語で言うと「ビルドの起動」) ができるようになりました。

__1. 「プロジェクト・エクスプローラー (Project Explorer)」で、MainComposite1 を右クリックします (必要

に応じて Project1 と my.name.space を展開します)。「起動 (Launch)」を選択します。「構成の編集 (Edit Configuration)」ダイアログで、「適用 (Apply)」をクリックし、「継続 (Continue)」をクリックしま

す。

「進行状況の起動 (Launch progress)」ダイアログがわずかの間表示されます。また「コンソール (Console)」には、ユーザー streamsadmin が所有する streams と呼ばれるインスタンスに対し、ジョ

ブ番号 0 がサブミットされたことが表示されます。

注:

アプリケーション起動時に設定できるオプションがたくさんありますが、この段階ではすべて無視してください。

注:

このラボの始めにインスタンスを開始しました。何らかの理由でインスタンスが実行していないくても、インスタ

ンスを起動するようプロンプトが表示されますので、特に問題はありません。

さて、その他に何も動きが見られないため、これまでに行った作業の影響について確認する必要があります。ま

ず、インスタンスで実行中のジョブを確認し、結果を調べてみましょう。

__2. 「Streams エクスプローラー (Streams Explorer)」 (左側のビューにある 2 番目のタブで、「プロジェク

ト・エクスプローラー (Project Explorer)」の後ろにあります) に切り替えます。インストール (InfoSphere Streams 3.2.0.0) と、その下にある各エレメント、「使用可能なホスト (Available Hosts)」、「インスタンス (Instances)」、「ツールキットの場所 (Toolkit Locations)」を展開します。

Page 23: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 21

もちろん、この仮想マシンでは、使用可能なホストは 1 つのみです。インスタンスが 1 つであることもご存知かと

思います。エントリーを見ると、これがデフォルトのインスタンス (別段の指定がない限り、起動したアプリケーショ

ンはここで実行することになります) で、それが実行中の状態であり、どれだけの期間実行中であるかが示され

ます (ステータスについては、拡大表示しないと見えないかもしれません)。「ツールキットの場所 (Toolkit Locations)」下には、Studio が認識しているすべてのツールキットが表示されます。「標準ツールキットの場所 (Standard Toolkit Location)」は必ずここに存在しますが、それ以外は明示的に指定する必要があります (これを実施するタスクが「タスク・ランチャー (Task Launcher)」にあります)。詳しい資料は別の場所にありますが、

「Streams エクスプローラー (Streams Explorer)」では、タイプや関数といったツールキット・アセットに加え、オ

ペレーターとそのパラメーターも表示されます。

__3. streams@streamsadmin を展開すると、エレメントがいくつか表示されますが、ここで確認していただ

きたいのは一番 後にある 0:my.name.space::MainComposite1 のみです。これは、先ほどサブミ

ットしたばかりのジョブ (実行中のアプリケーションはジョブと呼ばれます) で、ステータスは「正常 (Healthy)」となっています (もしそうではない場合、講師に相談し、何が問題となっているか確認してく

ださい)。ここにジョブとその構成要素となるオペレーター、およびプロセッシング・エレメント (PE) に関す

るたくさんの情報がありますが、ここでは、インスタンスを視覚的に見ていきましょう。

__4. default:streams@streamsadmin を右クリックし、「Instance Graph の表示 (Show Instance Graph)」を選択します。

Page 24: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 22 Streams 3.x ハンズオン・ラボ

一番下のパネルに新しいビューが開き、グラフィカル・エディターと同様のグラフが表示されますが、ここでは、ラ

イブの情報、インスタンスで実際に何が実行されているかを表示します。複数のアプリケーション (もしくは同アプ

リケーションの複数のコピー) を起動する場合、そのすべてが表示されることになります。さらに、ランタイム問題

があるかどうかなど、データの流れ具合も確認できます。

必要であれば、「Instance Graph」ビューを展開もしくは拡大します。ビューのツールバーにある 「内容に合わせる (Fit to Content)」をクリックします。

図 2. 完了済みおよび実行中のアプリケーション: すべての PE が正常であるため、ジョブも正常です。

Instance Graph ではもっとさまざまなことができますが、それについては次のラボで詳しく見ていきます。

__5. Filter_n にカーソルを置くと、データ・フローやその他のメトリックに関する現在の情報が表示されます。

さまざまな情報の中で、入力が 1902 にタプルを受信し、出力が 95 のタプルを送信したことが示されて

います。出力が入力の単なるサブセットであるべきことを考慮すると、この状況は妥当なようです。しか

し一方で、入力と出力の現在のタプルレートが 0/秒 となっており、データが現在流れていないことも分

かります。それはなぜかというと、all.cars ファイルにあるすべてのデータの読み取りが完了し、それ

以上のデータがないためです。

注:

入力データが尽きても、ジョブは引き続き実行中となります。この状態は、インスタンス内で実行する Streams アプリケーション (「分散」アプリケーション) では常に発生します。ジョブのキャンセルは手操作 (もしくはスクリ

プトを使用) による介入でのみ行えます。場合によっては例外 (ファイルの読み取りなど) もありますが、原則と

して、ストリームは無限です。

__6. 結果を確認するには、入力データおよび出力データを確認しなければなりません。

__a. トップ・メニューで、「ファイル (File)」 > 「ファイルを開く... (Open File...)」

__b. 「ファイルを開く (Open File)」ダイアログで、~streamsadmin/data/all.cars を参照するように

し、「OK」をクリックします。

エディター内でファイルが開きます。ファイルには、複数の車両 ID (C127、C128 等) についてのロケー

ション観測が含まれています。

Page 25: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 23

__7. 「プロジェクト・エクスプローラー (Project Explorer)」 (左側のビューにある 初のタブ) で、「リソース (Resources)」を展開すると、「data」の下にファイルがあるはずです。ただし、三角アイコンはありませ

ん。ビューを更新するには、「data」を右クリックし、「リフレッシュ (Refresh)」を選択します。そうすると、

三角アイコンが表示されます。これを展開し、をダブルクリックします。このファイルには、車両 C101 と C133 のみに関する座標と速度が含まれています。

Page 26: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 24 Streams 3.x ハンズオン・ラボ

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

このラボでは、車両データのフィルタリング・アプリケーションの開発をさらに進めていきます。また、データ・フロ

ーに対する理解を深め、実行中のアプリケーションをモニタリング・確認する Studio 機能について詳しく学びま

す。分かりやすくするため、データがなくなる前に何が起こっているのかを見られるようにする 2 つの拡張機能を

作成していきます。1 つ目は流れを遅くする機能 (そのままでは、Streams は速過ぎます)、2 つ目は複数のファ

イルを読めるようにする機能です。これは、開発とデバッグの一般的な設計パターンです。

2.1 これまでの結果を活用

このセクションはオプションです。

これまでのラボでの結果が正しいと言い切れる場合は、それをそのままお使いいただき、このセクションは飛

ばしていただいて結構です。

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

さい。

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

Studio が終了し、新しいワークスペースで再起動します。ラボ 1 で構築したのと同じアプリケーションを

伴うプロジェクトが既に使用可能な状態となっています。唯一、プロジェクトに Project2、メイン・コンポ

ジットに MainComposite2 の名前が付いているという点で異なりますが、これは、どのワークスペース

を使っているか分かりやすくするため、便宜上、異なる名前を付けているだけです。「プロジェクト・エク

スプローラー (Project Explorer)」で、「Project2」 > 「my.name.space」を展開し、

「MainComposite2」をダブルクリックしてグラフィカル・エディターを開きます。

__9. 「Instance Graph」を表示します。

__a. 「Streams エクスプローラー (Streams Explorer)」の「InfoSphere Streams 3.2.0.0」を展開

します。

__b. 「インスタンス (Instances)」を展開します。

__c. 「streams@streamsadmin」を右クリックし、「Instance Graph の表示 (Show Instance Graph)」を選択します。

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

注:

Instance Graph は、インスタンスで実行中のすべてのジョブを表示します。これは、Streams Studio ワークス

ペースとはなんら関係ありません。現在、Studio がどのワークスペースにあるかに関わらず、指定したインス

タンスに対する Instance Graph は同一に見えます。ワークスペースの如何に関わらず、Studio が起動したジ

ョブ、あるいは Studio が起動したものではないジョブ (例えば、Linux コマンド行でジョブがサブミットされた場

合など) が表示されます。

Page 27: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 25

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

アプリケーションのモニターとデバッグを容易にする上で、新たに 2 つのオペレーターが必要になります。

Throttle オペレーターは、フルスピードではなく、指定した速度で、タプルを入力から出力へコピーします。

DirectoryScan オペレーターは、指定したディレクトリーを定期的にスキャンします。オプション条件を満たす新し

いファイルそれぞれに対し、ファイルのフルパスを含むタプルを送信します。

使用したいオペレーターを速やかに選択するにあたって、パレットのフィルター・フィールドを使用する代わりに、

パレットすべてをブラウズし、オペレーターを選択してみましょう。

__1. グラフィカル・エディターのパレットで、「ツールキット (Toolkits)」の下にある spl を展開し、

spl.adapter を展開します。「DirectoryScan」をメイン・コンポジットへドラッグします。エディターが、オ

ペレーターに DirectoryScan_n という名前をつけます。

__2. パレットを下にスクロールして spl.utility を展開します。さらに下にスクロールし、「Throttle」をメイン・

コンポジットへドラッグします。オペレーターに、Throttle_n という名前が付けられます。

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

__3. Throttle オペレーターをグラフ (FileSink_n と Filter_n の間) へ挿入します。

__a. FileSource_n の出力ストリーム (名前: Observations) を選択します。

__b. この出力ストリームの選択を活用します (すぐ後で、これが役に立ちます)。右クリックして、「コピ

ー (Copy)」を選択します。

__c. エンドポイント・ハンドル (矢印の先端) を Throttle_n の入力へドラッグします。

__d. Throttle_n の出力から、新規のストリームを Filter_n へドラッグします。

__e. この新規ストリームを右クリックして「貼り付け (Paste)」を選択し、「上書きしますか (Confirm Overwrite)」ダイアログで、「はい (Yes)」をクリックします。これにより、スキーマが

「Observations」ストリームから新規ストリームへとコピーされます。この操作には、パレットか

ら LocationType をドラッグ・アンド・ドロップするのと同じ効果があります。Throttle オペレー

ターは、単にタプルのフロー速度を制御するのみであり、そのスキーマについては変更できま

せん。

__4. DirectoryScan_n の出力から、ストリームを FileSource_n の入力へドラッグします。

注:

FileSource オペレーターに、入力ポートを持たせることはできますが、オプションになります。前出のグラフで

は、入力ポートを使用しなかったため、左側に黄色のボックスがありません。ただし、別のオペレーターの出力

ポートからストリームをドラッグする間、オプションの入力ポートが枠の薄い空のボックスで示されますので、他

のポートと同じように、そこへストリームを接続できます。

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

Page 28: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 26 Streams 3.x ハンズオン・ラボ

後に、DirectoryScan_n の出力ストリームのスキーマを定義し、どこでファイルを探すか、このオペレーター

に指示する必要があります。FileSource_n の構成を調整し (静的パラメーターからではなく、入力ストリームか

ら指示を受けるようになっているため)、Throttle_n にフロー速度を指示します。

__5. DirectoryScan オペレーターの出力ポートは、1 つのスキーマしかサポートしません。このスキーマは、

タイプ rstring の単一の属性で、ファイルへのフルパスが含まれています。この属性にはどのような

名前をつけてもかまいません。

__a. DirectoryScan_n の出力ストリームを選択します。右クリックし、「編集 (Edit)」を選択します。

__b. 「プロパティー (Properties)」ビューの「スキーマ (Schema)」タブで、 初の「名前 (Name)」フィールド (プレースホルダー varName) をクリックし、file と入力します。Enter キーを押します。

__c. 初の「タイプ (Type)」フィールド (プレースホルダー varType) をクリックし、rstring と入力

します。手入力を減らし、ミスを予防できるように、コンテンツ・アシスト (Ctrl+Space キー) を使

用するようにしてください。

__6. エディターで、DirectoryScan_n オペレーターを選択してください。「プロパティー (Properties)」ビュー

で、「パラメーター (Param)」タブを開き、directory パラメーターを値 "/home/streamsadmin/data" (二重引用符を付け忘れないようにしてください) に設定します。

__7. FileSource オペレーターは、どのファイルを読み取る必要があるかを認識しています。読み取るのは、

静的パラメーター (file と呼ばれる) からの場合、または入力ストリーム上の入ってくるタプルからの場

合がありますが、両方からということはありません。ここでは、ファイル名を DirectoryScan オペレータ

ーから取得することになるので、前に使用した file パラメーターを取り除く必要があります。

エディターで FileSource_n オペレーターを選択します。「プロパティー (Properties)」ビュー (「パラメ

ーター (Param)」タブ) で、file パラメーターをクリックし、「削除 (Remove)」をクリックします。

__8. Throttle オペレーターには、フロー速度を指定する必須パラメーターがあります。これは、浮動小数点

数で、単位は 1 秒あたりのタプル数になります。

Page 29: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 27

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

すため、小数点も必須です)。

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

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

Studio の Instance Graph により、使用するアプリケーションが何をしているか、ならびにデータがどのように実

行中のジョブを流れているかについて、さまざまな方法でモニタリングできます。ラボのこのセクションでは、それ

らの機能について見ていきたいと思います。ここに出てくる手順は、単なるヒントです。

__1. アプリケーションを起動します。「プロジェクト・エクスプローラー (Project Explorer)」で、メイン・コンポ

ジット (ワークステーションを切り替えたかどうかにより異なりますが、Project2 の MainComposite2 あるいは Project1 の MainComposite1) を右クリックし、「起動 (Launch)」を選択します。「構成の編

集 (Edit Configuration)」ダイアログで「継続 (Continue)」 (ワークスペースを切り替えた場合には、

「適用 (Apply)」を先にクリックする必要があるかもしれません) をクリックします。

__2. 「Instance Graph」ビューを 大化します。実行中のジョブが 2 つあります。1 つは先ほど起動したジョ

ブ、もう 1 つはこの前のエクササイズでのジョブです。前のエクササイズのものは休止 (データが何も入

ってこない状態) していますが、実行中のままにしておいてください。

「Instance Graph」の右側には、レイアウト・オプションのドロップダウン・メニューと、「カラー・スキーム (Color Schemes)」と呼ばれる選択ペインがあり、これらを利用して画面を操作できます。いろいろなオプションを見て

みましょう。これらのオプションの内容を理解する上で、以下の解説と提案をお役立てください。

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

● 「コンポジット (Composite)」別: これがデフォルトです。ここには、2 つの主なコンポ

ジット (つまり、2 つのアプリケーション) が表示されています。各コンポジットに、ア

プリケーションを構成するオペレーターが記載されています。3 つが古いジョブ、5 つが

新しいジョブのものとなっています。

Page 30: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 28 Streams 3.x ハンズオン・ラボ

● 「カテゴリー (Category)」別: オペレーターにカテゴリーを割り当て、希望する形にグル

ープ分けできます。多数のオペレーターが存在する場合に便利です。このラボではこの

機能を使わなかったため、このオプションでは、すべてのオペレーターがグループ分け

されることなく表示されています (もちろん 2 つの主なフローは識別できるようになって

います)。

● 「PE」別: PE は、プロセッシング・エレメントの略で、本質的にはランタイム・プロセ

スです。オペレーターは、単一の PE へ統合 (「融合」) することができます。そうする

ことで、オペレーターは堅く結びつけられ、コミュニケーションの待ち時間を削減しま

す。これはパフォーマンス最適化に関するトピックで、このラボの対象範囲外となりま

す。ここでは単純に、各オペレーターにそれぞれのプロセスを与えるデフォルト設定を

使用してきました。このレイアウト・オプションでは、PE を表すボックス内に、その PE に属す各オペレーターが表示されますが、今回のケースではあまり役には立ちません。

● 「ホスト (Host)」別: ここで使用している仮想マシンは単一ホストであるため、すべての

オペレーターが、ホストを表す同じボックス内に表示されています。

__3. 残りのエクササイズでは、レイアウトを「コンポジット (Composit)」のままにしておいてください。

次に、カラー・スキームを見てみましょう。スキームはそれぞれ独立 (1 度に 1 つしかチェックできません) してお

り、別のスキームに割り当てられた色のチェックボックスは反応しません。ただし、新しくカラー・スキームを追加

したり、既存のものを変更したりすることは可能です。カラー・スキームでは、プロパティー (属する PE もしくはジ

ョブや、実行しているホストなど) やメトリックに基づいてオペレーターに色を割り当てます。メトリックは、診断統

計をモニターするために Streams ランタイムが維持するカウンターです。これは、定期的に更新され、インスタン

スのリアルタイム・ビューを表示します。これは、特に大規模・複雑なグラフにおいて、問題を素早く見つけるのに

大いに役立ちます。

__4. デフォルトのカラー・スキームは「正常性 (Health)」です。「カラー・スキーム (Color Schemes)」ペイン

の「正常性 (Health)」を三角アイコンで展開します。緑色は、オペレーター (実際はその PE) が正常で

あることを示しています。つまり、エラーがなく、実行しており、データを処理する準備が整っていることを

意味しています。アプリケーションを起動する際、オペレーターが緑色に変わる前に、赤や黄色であった

ことに気が付かれたかと思います。これは、例えば、ストリーム接続が確立する前に、ある PE が別の PE のロード完了を待っているなど、初期化のプロセスを反映しているものです。

__5. 「100 以下のフロー [n タプル/秒] (Flow Under 100 [nTuples/s])」カラー・スキームにチェックを入れ

ます。(おそらく) すべてのオペレーターが黒に変わるかと思います。この色の変化は、タプルが流れて

いないことを示しています。これは、アプリケーションを起動してから 45 秒程度以上経っているためで

す。スロットルを介しても、ファイル全体の読み取りは既に完了しています。

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

ることで、簡単に供給できます。

__6. これを簡単に実施する方法の 1 つとして、File Browser が挙げられます。

__a. デスクトップ上で、streamsadmin の「ホーム (Home)」アイコンをダブルクリックし、File Browser を開きます (アイコンは、Studio ウィンドウを 小化するか移動しないと見えないかも

しれません)。

Page 31: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 29

__b. data ディレクトリーをダブルクリックし、新しいウィンドウまたはビューでそのディレクトリーを開

きます。

__c. streamsadmin の File Browser ウィンドウを閉じるか 小化します。

__d. data ウィンドウで、all.cars ファイルを右クリックし、コンテキスト・メニューで「コピー (Copy)」を選択します。

これで、別のものをコピーしない限り、好きな回数だけこのファイルをディレクトリーへ貼り付けできます。

貼り付ける都度ファイルのコピーが追加され、アプリケーションがそれを確認し、データを処理します。フ

ァイルには 1,900 件のレコードがあり、スロットルされた速度は毎秒 40 タプルであるため、各ファイル

の処理に約 45 秒強かかることになります。

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

その後少し遅れて (DirectoryScan オペレーターによるスキャンは 5 秒おき)、新しいジョブ内の色が

変わります。古いジョブの方は、ファイルを 1 つしか読み取らないように設計されているため、黒のまま

です。始動時の現象は別にして、ほとんどの場合、Throttle_n と Filter_n が黄色 (31-40)、FileSink_n が茶色 (1-5) となります。Filter オペレーターは、タプルのサブセットのみを通すため、通

過後の割合が低くなるのは、道理にかなっています。1 分弱でオペレーターの色は黒に戻ります。もう

一度ファイル・コピーの貼り付けをして、フローを再度開始してみてください。

__8. nFinalPunctsSubmitted のカラー・スキームにチェックを入れます。「 終パンクチュエーション (Final Punctuation)」マーカーは、特別なメッセージ (タプルではありません) で、ストリームに新規タプルがも

はや含まれていないことを示すものであり、どのオペレーターでも生成されます。このマーカーは、グラ

フを通してダウンストリームへ行きます。オペレーターが、すべての入力ポート (皆さんが、これまで使用

してきたオペレーターには、すべて、入力ポートが 1 つしかありません) でマーカーを受け取ると、それ

以降は休止状態、終了準備が整った状態となり、 終パンクチュエーションをサブミットします。

FileSink のような、出力ポートのないオペレーターは、このメトリックをサポートしないため、このスキー

ムでは色付けされません。

Page 32: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 30 Streams 3.x ハンズオン・ラボ

古いジョブのオペレーターが黒くなっています。これは、 終パンクチュエーションを少なくとも 1 つサブ

ミットしたことを示しています。これは、FileSource が入力ファイルの 後に到達した際に起こります。

現行ジョブのオペレーターは緑色 ( 終パンクチュエーションなし) です。これは、入力データの 後に

到達しておらず、また到達することもないためです。つまり、いつソース・ディレクトリーに別のファイルが

現れるか、知ることはできないからです。

__9. Instance Graph を雑然とさせても仕方がないので、古いジョブについてはもう除去してかまいません。

これには、以下 3 つの方法があります。

__a. 少しだけすっきりさせたい場合には、コンポジットのタイトル・バーにある 小化ボタンをクリ

ックしてメイン・コンポジットを 小化します。

__b. ビューからは取り除きたいものの、ジョブをキャンセルするにはまだ早すぎると思われる場合は、

フィルターしてグラフ表示から取り除きます。「Instant Graph」ビューのツールバーにある「グラ

フのフィルター… (Filter graph…)」ボタンをクリックし、「Instance Graph フィルター (Instance Graph Filter)」ダイアログで、「ジョブ ID フィルター (Job ID Filter)」下の現行ジョブ

のみにチェックを入れ、「OK」をクリックします。

__c. ジョブを完全にキャンセルするには、メイン・コンポジットのどこでもいいので右クリックし、「ジョ

ブのキャンセル (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)」ビューが表示されます。

Page 33: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 31

__2. Filter_n と FileSink_n 間のストリーム Filtered に対して同じ手順を繰り返します。両方の「プロパティ

ー (Properties)」ビューを移動し、サイズを調整して、Instance Graph と同時に両方の表が見えるよう

にします。

入力ファイルのコピーをもうひとつ Data ディレクトリーへコピーし、データ表を見てみます。予想通り、出

力に、id 値が「C101」または「C133」のタプルのみが表示され、入力にはそれ以外の車両 ID も混ざっ

ていることが分かります。

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

Page 34: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 32 Streams 3.x ハンズオン・ラボ

ラボ 3 強化された分析とデータ視覚化

このラボでは、オペレーターを追加することで、これまで構築してきたアプリケーションを強化します。これにより、

追跡している各車両別に、5 つの観測ごとの平均速度を計算します。その後、Streams Console を使用し、結

果を視覚化します。

これまでに使用してきたオペレーターは、各タプルを個別に見ており、履歴を取る必要はありませんでした。しか

し、多くの分析処理においては、求められる結果を計算するのに、ある程度の履歴を記憶しなければなりません。

ストリーム処理においては、「データセット全体」と呼べるものは存在しませんが、連続するタプルの限られたシー

ケンスを持つバッファーを定義することはできます。これにより、例えば、1 つ以上の数値属性を持つタプルの制

限されたサブセットに対し、平均を計算することができます。このようなバッファーは、ウィンドウと呼ばれます。こ

のラボでは、Aggregate オペレーターを使用して、まさにそうした平均を計算していきます。

3.1 これまでの結果を活用

このセクションはオプションです。

これまでのラボでの結果が正しいと言い切れる場合は、それをそのままお使いいただき、このセクションは飛

ばしていただいて結構です。

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

さい。

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

Studio が終了し、新しいワークスペースで再起動します。ラボ 1 と 2 で構築したのと同じアプリケーショ

ンを伴うプロジェクトが既に使用可能な状態となっています。唯一、プロジェクトに Project3、メイン・コン

ポジットに MainComposite3 の名前が付いているという点で異なります。「プロジェクト・エクスプローラ

ー (Project Explorer)」で、「Project3」 > 「my.name.space」を展開し、「MainComposite3」をダブ

ルクリックしてグラフィカル・エディターを開きます。

__4. 「Instance Graph」を表示します。

__a. 「Streams エクスプローラー (Streams Explorer)」の「InfoSphere Streams 3.2.0.0」を展開

します。

__b. 「インスタンス (Instances)」を展開します。

__c. 「streams@streamsadmin」を右クリックし、「Instance Graph の表示 (Show Instance Graph)」を選択します。

これまでのラボのジョブで、現在も実行中のものが表示されます。適宜、キャンセルまたは非表示にして

ください。

Page 35: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 33

3.2 ウィンドウ・ベースのオペレーター

これから、車両 C101 および C133 ごとに、ウィンドウでの平均速度を計算していきます。ここでは、固定数のタ

プルの「タンブリング」ウィンドウを使用します。ウィンドウが必要な数のタプルを収集し終えると、オペレーターが

結果を計算し、出力タプルをサブミットします。そして、ウィンドウ・コンテンツを廃棄し、空になったウィンドウでタ

プルを再度収集し始めます。指定の属性に基づいたウィンドウのパーティション化とは、オペレーターが、その属

性の各値に対し別々のバッファーを割り当てることを意味しています。実質的に言うと、属性でストリームを分割

し、別々のオペレーターを各サブストリームに適用したような形となります。仕様については、表 4 にまとめてあ

ります。

表 4. 仕様: ウィンドウ・ベースの集約

仕様 値

オペレーター・タイプ Aggregate

ウィンドウの仕様 タンブリング: タプルの count に基づく。5 タプル

ウィンドウのパーティション化 実施する。車両 ID (id) に基づき、パーティション化する

集約するストリーム Filtered (Filter_n の出力)

出力スキーマ id       – rstring  time     – rstring avgSpeed – float64

集約の計算 Average(speed) 

結果の宛先 ファイル: average.speed

__1. 必要な 2 つのオペレーターを追加します。

__a. グラフィカル・エディターのパレット・フィルター・ボックスで、agg と入力し、Aggregate オペレー

ターをメイン・コンポジットへドラッグします。エディターには、Aggregate_n と名前が付きます。

これは、このラボでの主要な分析オペレーターとなります。

__b. パレット・フィルターで、fi と入力し、FileSink をメイン・コンポジットへドラッグします (FileSink_n’)。このオペレーターで、分析結果をファイルに書き込めるようにします。

__2. 2 つの新しいオペレーターのうち、1 つを既存ストリームに接続し、もう 1 つを追加して、両方をグラフに

盛り込みます。

Page 36: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 34 Streams 3.x ハンズオン・ラボ

__a. ストリームを Filter_n から Aggregate_n へドラッグします。これにより、Aggregate_n は、

FileSink_n が既に使用しているのと同一のストリームを活用することになるため、スキーマは

定義済みとなります。これは、エディターで、矢印が実線になっていることからも分かります。

__b. ストリームをもうひとつ Aggregate_n から FileSink_n’ へとドラッグします。このストリームは、

スキーマがないため、矢印は破線になります。

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

__3. Aggregate オペレーターの出力に専用のスキーマを与えます。

__a. Aggregate_n から FileSink_n’ までの新しいストリーム上を右クリックし、「編集 (Edit)」を選

択します。

__b. 「プロパティー (Properties)」ビューの「スキーマ (Schema)」タブで、属性の名前とタイプを入

れます。

__i. 「名前 (Name)」下の 初のフィールドに、id と入力し、Enter キーを押します。

__ii. 「タイプ (Type)」下で、rstring と入力し、Tab キーを押して次の名前フィールドに進

みます。

__iii. 引き続き、キーボード入力し、Tab キーを用いて次のフィールドへ移動する形で、33 ページの表 4 に掲載の属性名とタイプを入れていきます。

__4. Aggregate オペレーターに動作を指示します。

__a. Aggregate_n オペレータを選択します。「プロパティー (Properties)」ビューで、「ウィンドウ (Window)」タブを開きます。プレースホルダーのウィンドウ仕様が既に入力されているので、

少々編集する必要があるだけです。

__i. 「編集… (Edit…)」をクリックします。

Page 37: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 35

__ii. 「ウィンドウ・モードの追加… (Add Window Mode…)」ダイアログで、「タンブリング・

ウィンドウ (Tumbling Window)」が選択されたままの状態にします。

__iii. 「排除ポリシー値 (Eviction policy value)」の値を 5 に設定します。

__iv. 「パーティション化 (Partitioned)」にチェックを入れます (その下の「排除ポリシー (Eviction policy)」には何も入れないでください)。

__v. 「OK」をクリックします。

__b. 車両 ID (id 属性) でパーティション化するよう、ウィンドウを構成します。

__i. 「パラメーター (Param)」タブで、「追加… (Add…)」をクリックします。

__ii. 「パラメーターの選択 (Select parameters)」ダイアログで、「partitionBy」にチェック

を入れ、「OK」をクリックします。

__iii. 「partitionBy」値のフィールドで、id と入力します。

__c. 「出力 (Output)」タブを開き、出力の割り当てを指定します。「名前 (Name)」欄の Aggregate_n_out0 の前にある三角アイコンを展開します。「名前 (Name)」と「値 (Value)」欄を完全に表示させるには、欄を広げ、水平方向に拡大する必要があるかもしれません。属性 id と time は、 新の入力タプルからそのままコピーされることになります。これは既に「値 (Value)」欄に反映されています。出力属性値は、 後の入力属性に基づいて、同じ名前の属

性から割り当てられるようにデフォルトで設定されています。

ウィンドウは id でパーティション化されるため、この属性に対しては、ウィンドウ・パーティション

のすべてのタプルに同じ値がつくことになります。time の場合はこれに当てはまりませんが、こ

の例では 新の値を使用するのが理にかなっています。

Page 38: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 36 Streams 3.x ハンズオン・ラボ

__i. 「入力の表示 (Show Inputs)」をクリックし、「フィルター済み (Filtered)」の三角アイコ

ンを展開すると、出力の代入式の作成に使用できる属性が表示されます。

__ii. avgSpeed の値フィールドをクリックし、Ctrl+Spece キーを押してコンテンツ・アシスト

を表示します。使用できるエントリーのリストから、Average(T) : T を選択 (ダブルクリ

ックするか、選択して Enter キー) します (この構文は、任意の入力タイプ T に対して、

出力値もタイプ T となることを意味しています)。

__iii. 再び avgSpeed の値フィールドをクリックします。丸括弧内の T を削除し、カーソルを

その位置にとどめます。Ctrl+Space キーを押してコンテンツ・アシストを表示し、今度

は speed - float64 を選択します。Enter キーを押します。

注:

コンテンツ・アシストに表示される関数は、Aggregate オペレーター固有の「カスタム出力関数」です。汎用 SPL 関数ではありません。それぞれの出力割り当てすべてに、これらの 1 つに対する呼び出しが含まれてい

なければなりません。前に述べた非数値属性の自動割り当ては、Last(T) の集約関数を暗黙的に呼び出しま

す。

__5. 結果の宛先を指定します。

__a. エディターで、FileSink_n’ を選択します。「プロパティー (Properties)」ビュー (「パラメーター (Param)」タブ) で、file パラメーターを "average.speeds" (二重引用符付き) に設定します。

__b. 「追加… (Add…)」をクリックします。「パラメーターの選択 (Select parameters)」ダイアログで、

「format」と「quoteString」にチェックを入れ、「OK」をクリックします。format を csv に設定し、

quoteStrings を false に設定します。

__c. 保存し、「プロパティー (Properties)」ビューを閉じます。これで、アプリケーションを起動する準

備が整いました。

Page 39: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 37

__6. アプリケーションを起動します。「プロジェクト・エクスプローラー (Project Explorer)」で MainComposite3 (もしくは、ワークステーションを切り替えたかどうかにより、2 または 1) を右クリック

し、「起動 (Launch)」を選択します (Launch がグレーアウトされている場合は Build(ビルド)実行してく

ださい) 。 「構成の編集 (Edit Configuration)」ダイアログで、「適用 (Apply)」をクリック (必要に応じ) して、「継続 (Continue)」をクリックします。

今回は、そのデータの表示に Studio の「Live Graph」は使わず、Streams Console を使用します。

3.3 Streams Console

Streams Console は、Web ベースの汎用管理ツールです。インスタンスそれぞれにコンソール環境があり、

Web サイトに類似しています。コンソールが 1 度に対話できるのは、1 つの特定のインスタンスのみです。ホス

トやジョブ、ログ、トレース、その他多くの項目を管理し、モニターするのに加え、シンプルなデータ視覚化ツール

としての役割も果たします。Cognos RTM のように実稼働並みのダッシュボードを意図したものではなく、主とし

て、開発中にアプリケーションをモニターし、データを把握するのに役立つツールです。

Console を起動するには、「ビッグデータ用タスク・ランチャー (Task Launcher for Big Data)」から起動するな

ど、いくつか方法がありますが、このラボでは、Streams Instance Manager を使用して Console を開きます。

また、Streams を実行するサーバーに対して https アクセスがあれば、どのマシンからでも、Firefox やその他

のブラウザーから直接開くことができます。通常のユーザー認証とセキュリティーが適用されます。

__7. デスクトップのアイコンが見えるように、Studio ウィンドウを 小化もしくは移動します。

「Streams_Instances」ランチャーをクリックします。

__a. 「IBM InfoSphere Streams Instances Manager」ダイアログで、インスタンスが既に選択さ

れています。「コンソールの起動 (Launch console)」をクリックします。

__b. 「無効な証明書 (Invalid Certificate)」ダイアログが一度だけ表示される可能性がありますが、

その場合、「危険性を理解した上で接続するには」をクリックし、「例外を追加・・・」をクリック、

「セキュリティ例外を承認」をクリックしてください (バグではありません)。

__c. 「ユーザー名 (User name)」に streamsadmin、「パスワード (Password)」に passw0rd と入

力し、「ログイン (Login)」をクリックします。

__8. 左側のペインにある「ジョブ (Jobs)」をクリックします。現在実行中のジョブに関する情報が、メインのペ

インに表示されます。Studio の「Streams エクスプローラー (Streams Explorer)」で取得できる情報に

似ています。

__9. 「Application Graph」をクリックします。これは Studio の Instance Graph に似ています。

初は縮小表示された状態で表示され、ジョブ全体を示すボックスしか見えません。いろいろと試してみ

てください。

__a. ジョブ上にある + ボタンをクリックして展開します。そのジョブの中の PE が表示されます。

Page 40: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 38 Streams 3.x ハンズオン・ラボ

__b. オペレーターを表示するには、 ボタンをクリックし、ドロップダウンで、「ジョブ内のオペ

レーター (Operators in Jobs)」を選択します。

コンソールにはその他にもたくさんの機能がありますが、このラボではデータの視覚化を中心に進めていきます。

3.4 ビューとチャート

Streams ランタイムでは、Aggregate のようなオペレーターのウィンドウと同様、バッファーを維持し、グラフ内

のどのストリームからでも 近のデータのスナップショットを保持することができます。Streams Web Service (Streams コンソール全体をサポートするインスタンス・サービス) は、これらのバッファーに基いてチャートや表を

提供することができ、データ理解を容易にします。これらのバッファーには、(わずかな CPU サイクルに加えて) メモリー・リソースが必要であるため、さまざまな構成設定で作成し、オンデマンドでアクティブにする必要があり

ます。

そのため、データの視覚化設定は、複数の段階を経るプロセスとなります。

● ビューの作成

● ビューの開始

● チャートの作成 (ビューに基づく)

● チャートのオープン

ビューとチャートのカスタマイズ・オプションは多数あり、適切な種類のストリームでアプリケーションを用意するこ

とで、非常に優れた、役に立つ視覚化を実現できます。ここでは、複雑な手順を 小限に抑え、できる限りシンプ

ルなチャートとテーブルを作成します。

3.4.1 ビューの作成と開始

__1. 左側のペインで、「ビュー (Views)」をクリックします。

__2. 集約データ (平均速度) 用のビューを作成します。

__a. 「ビュー (Views)」ペインの一番上にある ボタンをクリックして「ビューの追加 (Add View)」ウィザードを開始します。

__b. 初のパネルで、「ビューの名前 (View Name)」を「Average Speed View」に設定します。

「次へ (Next)」をクリックします。

Page 41: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 39

__c. 使用可能なジョブのみを選択し、「次へ (Next)」をクリックします。

__d. ストリーム Aggregate_n を選択し、「次へ (Next)」をクリックします。

__e. ヘッダーの一番左側にあるチェック・ボックスにチェックを入れ、すべての属性を選択します。

「次へ (Next)」をクリックします。

チャートを作成する際に、さらに属性を選択できます。そのため、このビューで、すべての属性を

使用可能としておくに越したことはないでしょう。

__f. 「すべてのタプルの属性データを保持 (Keep attribute data for all tuples)」を、デフォルトど

おり、選択された状態のままにします。その他の設定についても、すべてデフォルトのままでか

まわないので、このまま「完了 (Finish)」をクリックします。

__3. 「ビュー (Views)」ペインで、「Average Speed View」ビューを選択し、ペインの一番上にある ボタンをクリックします。このビューに対する「開始済み (Started)」欄のエントリーが、0 から 1 に変わり

ます。

3.4.2 チャートの作成

__4. 左側のペインの「チャート (Charts)」をクリックします。

Page 42: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 40 Streams 3.x ハンズオン・ラボ

__5. 「Average Speed」ビューに基づきチャートを作成します。

__a. 「チャート (Charts)」ペインの一番上にある ボタンをクリックして「チャートの追加 (Add Chart)」ウィザードを開始します。

__b. 初のパネルで以下の対応をします。

__i. 「チャート名 (Chart name)」を Average Speed Chart とします。

__ii. 「チャート・タイトル (Chart title)」 Average Speed に設定します。「 上部 (Top)」 が選択されたままにしておきます。

__iii. 「チャート・タイプ (Chart type)」を「折れ線 (Line)」のままにしておきます。

__iv. View の選択肢で「From an exsting view…)」を選び「選択 … (Select …)」をクリッ

ク、ビュー「Average Speed View」を選択し、Attributes から「avgSpeed」を選択し、

「OK」をクリックします。

__v. 「Axis」タブをクリックします。

__c. 「Y 軸 (Y Axis)」のオプションを設定します。

__i. 「タイトル (Title)」に Speed と入力します。

__ii. 他はデフォルトのままにし、「OK」をクリックします。

Page 43: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 41

3.4.3 表の作成

__6. 「チャート (Charts)」ペインで ボタンをクリックします。

__a. 「チャート名 (Chart name)」を Average Speed Table に設定します。

__b. View で「From an exsting view…」をクリックし、「選択 (Select)」、ダイアログで、「Average Speed View」を選択し Attributes でヘッダーの「Name」を選択し、すべての属性のチェックを

入れ、「OK」をクリックします。

3.4.4 チャートの表示

__7. 「チャート (Charts)」 ペインで、「Average Speed Chart」と「Average Speed Table」にチェックを入

れ、 をクリックします。

__8. 表示するデータが確実に存在するようにするため、Data ディレクトリーに all.cars ファイルをもうひとつ

コピーしてください (File Browser が開いたままの状態になっているかと思います)。

2 つのタブを切り替える形で、チャートと表を交互に切り替えていきます。チャートが折れ線で埋められ

ていくのが見えるかと思います。表については変化が見えにくいかもしれませんが、こちらでも更新され

ていくのが分かるかと思います。

__9. チャート上で をクリックします。表示が、Console 内のタブから Firefox ブラウザー内の別のタ

ブに移動します。そこから、新しいウィンドウへ移動できます。Firefox タブをクリックし、「新しいウィンド

ウへ移動 (Move to New Window)」を選択してください。

チャートと表が並んだ状態で表示されるように、ブラウザーのウィンドウを調整してみてください。data の File Browser ウィンドウに、追加のコピーを貼り付けながら、データが流れ続けるようにしてください。

ブラウザー・ウィンドウを閉じるか、 小化します。Streams Instances Manager を「終了 (Exit)」するか、 小

化します。

Page 44: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 42 Streams 3.x ハンズオン・ラボ

ラボ 4 エクスポートしたストリームによるアプリケーションのモジュール設計

4.1 これまでの結果を活用

このセクションはオプションです。

これまでのラボでの結果が正しいと言い切れる場合は、それをそのままお使いいただき、このセクションは飛

ばしていただいて結構です。

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

さい。

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

Studio が終了し、新しいワークスペースで再起動します。ラボ 1 から 3 までで構築したのと同じアプリ

ケーションを伴うプロジェクトが既に使用可能な状態となっています。唯一、プロジェクトに Project4、メイン・コンポジットに MainComposite4 の名前が付いるという点で異なります。「プロジェクト・エクスプ

ローラー (Project Explorer)」で、「Project4」 > 「my.name.space」を展開し、「MainComposite4」をダブルクリックしてグラフィカル・エディターを開きます。

__2. 「Instance Graph」を表示します。

__a. 「Streams エクスプローラー (Streams Explorer)」の「InfoSphere Streams 3.2.0.0」を展開

します。

__b. 「インスタンス (Instances)」を展開します。

__c. 「streams@streamsadmin」を右クリックし、「Show Instance Graph」を選択します。

これまでのラボのジョブで、現在も実行中のものが表示されます。適宜、キャンセルまたは非表示にして

ください。

4.2 不測のデータに対するテストの追加

基本的に、フィードから受け取るデータについて検証を実施するべきです。データ形式の定義に問題があったり、

不適格なデータは発生するものであり、送信ノイズが入り込む可能性もあります。データが予想に反し、アプリケ

ーションが正常に機能しない状況は誰もが避けたいはずです。

例として、1 つの属性を確認するオペレーターを追加します。その属性は、車両 ID (id) とします。データ・ファイ

ル all.cars では、すべてのレコードに、「Cnnn」 (自動車を意味する「car」の頭文字 “C” 付き) の id 値が含まれ

ています。今回のラボとは違う状況の話になりますが、例えば、ある架空の状況において利用しているアプリケ

ーションがこのラボのような形式を使用する場合、頭文字で示される車両タイプ別 (例えば、バスを意味する

「Bus」の頭文字 “B”) に異なるアクションを取れるようにできるというわけです。また、すべての車両 ID がぴった

り 4 文字長でなければならないというシステム要件を設定できます。ただし、「異常な」データについては、タプル

Page 45: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 43

を何もせずに除去してしまうのではなく、何が起こったかを監査し、後にできればアプリケーションを強化できるよ

う「異常な」データを保存するのが賢明です。

以下に、仕様をまとめます。

表 5. 車両 ID (id 属性) 仕様

基準 値

頭文字 “C”

文字長 4

つまり、id として予期されていなかった値を伴うデータが入ってきた場合、プログラムは、無効なデータとして脇

へ押しのけることになります。このような状況に対応できるオペレーターがいくつかあり、どのオペレーターを使う

かは、ある程度、好みの問題となります。これまでのラボで、既に、この目的にかなったオペレーターを使ってみ

ましたね。そうです、Filter です。ここでは別のオペレーターを使ってみましょう。

Split オペレーター: このオペレーターは、任意の式の評価に応じ、異なる出力ポート (もしくはポートなし) に対し

てタプルを送信するように設計されています。この式には、必須ではありませんが、入ってくるタプルの属性値を

使用することができます。また必要な数だけ出力ポートを保有できます。今回は、必要となる出力ポートは 2 つだけです。1 つは、正常なフロー (「有効」な値) に対応し、もう 1 つは、それ以外 (「無効」な値) に対応します。

Split の仕組みは以下の通りです (下の図 3 の例を参照してください)。

● N 出力ポートが 0, 1, …, N-1 と番号付けられます。

● index パラメーターには、64 ビットの整数 (uint64) を返す任意の式が含まれています。

● この式は、入ってくる各タプルに対して評価されます。

● 式の値 n は、どの出力ポート p に対してタプルが送信されているかを判断します。

n ≥ 0 の場合、p = n mod N

n < 0 の場合、タプルは除去されます。

Split

index = ?

0

1

2

index = 0, 3, 6, or …

index = 1, 4, 7, or …

index = 2, 5, 8, or …

図 3. 出力ポートが 3 つある Split オペレーター

Page 46: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 44 Streams 3.x ハンズオン・ラボ

注:

以下の手順中、グラフがきちんと見えるように、 「レイアウト (Layout)」と 「内容に合わせる (Fit to Content)」で、グラフの表示を整えてください。

__1. Split オペレーターをグラフに追加します。

__a. MainCompositeN をダブルクリックで開きます。(プロジェクトに表示されていない場合は、一度

プロジェクトのビルドを実行してください)

__b. グラフィカル・エディターで、パレット・フィルター・ボックスに split と入力します。Split オペレ

ーターをメイン・コンポジットにドラッグします。

__c. スロットルされたストリーム (Throttle_n の出力) を選択し、ストリームのエンドポイントを Split_n の入力へ動かします。

__d. Split_n から Filter_n に新規ストリームを追加します。

__2. グラフに FileSink を追加します。FileSink の入力を Split オペレーター の 2 つめの出力ポートに接

続します。

__a. 前と同じように FileSink をメイン・コンポジットへドロップします。これが、FileSink_n” となりま

す。

__b. 2 つ目の Split ポートとの接続を確立するには、まず、第 2 のポートを追加する必要がありま

す。Split には 低限 1 つの出力ポートがなければなりませんが、追加のものはオプションで、

明示的に追加する必要があります。

__i. パレットのフィルター・ボックスを空にします。「設計 (Design)」の下で、「出力ポート (Output Port)」をドラッグし、Split_n 上へドロップします。Split_n にカーソルを合わ

せると、それが緑色に変わり、ポートをドロップすると、出力側に新しい黄色のボックス

が現れるのが分かるかと思います。

__ii. 次に、Split_n の 2 つ目の出力ポートから FileSink_n” へ接続を確立します。

__3. Split_n の 2 つの出力に対し、それぞれスキーマを割り当てます。割り当て方法は、既存のストリーム (Aggregate_n の出力を除く) からコピー・アンド・ペーストする方法でもいいですし、LocationType をパレットからドラッグ・アンド・ドロップする方法でもかまいません。

__4. Split オペレーターを構成します。

Page 47: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 45

__a. Split_n を選択し、「プロパティー (Properties)」ビューを開きます (「編集 (Edit)」を右クリック)。

__b. 「パラメーター (Param)」タブで、「(追加…) Add…」をクリックします。

__c. 「パラメーターの選択 (Select parameter)」ダイアログで「index」にチェックを入れ、「OK」をク

リックします。

__d. index パラメーターの値フィールドで、以下の記載内容をそのまま正確に入力します (注: 0 と 1 の後の「l」は、小文字のエルで、64 ビット整数の「(文字) 長」を意味しています)。    substring(id,0,1) == "C" && length(id) == 4 ? 0l : 1l

これによって意味するのは、「オフセットがゼロから始まる長さ 1 の id 属性のサブストリング (つまり、id の頭文字) が「C」であり、id 属性の長さが 4 である場合、ゼロになる。それ以外の

場合は 1 になる」ということです。正しい ID は 初のポート (Filter_n) へ行き、それ以外は 2 つ目のポート (FileSink_n”) へ行くということになります。

注:

構文 <boolean‐expression> ? <action‐if‐true> : <action‐if‐false> は、C や Java、その他の言語で知られています。関数 substring(string,start,length) および length(string) は、Standard Toolkit からのものです。接尾部「l」 (アルファベットのエル) は、該当する数

が 64 ビット値 (「長」整数) であることを意味しています。SPL は、タイプの暗黙的変換は行いません。接尾部

のない整数は、32 ビット値であるため、これを 64 ビットのパラメーターに割り当てるとエラーが出ます。

__5. FileSink_n” を構成します。FileSink をこの前の 2 つのラボで使用してきました。忘れてしまった場合

は、そちらで構成方法をおさらいしてみてください。以下のパラメーター値を設定します。

表 6. FileSink_n” のパラメーター値。「flush」というパラメーターが加わっていることに注意してください。

パラメーター 値

file "error.observations" 

flush 2u 

format csv 

quoteStrings false 

Page 48: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 46 Streams 3.x ハンズオン・ラボ

__6. アプリケーションを起動し、元の出力 (「プロジェクト・エクスプローラー (Project Explorer)」の「リソース (Resources)」下にある data ディレクトリーの filtered.cars) が以前のように書き込まれているかを確

認し、さらに十分な時間を置いた後で、新規出力ファイル (error.observations) に少なくとも 2 つのレ

コードがあるかを確認します。入力データ・ファイルには、誤った形式の id (およびその他の異常値) を伴う 2 つのレコードが含まれています。

4.3 取り込み (Ingest) モジュールの分割

ここからいよいよ面白くなってきます。Streams アプリケーション内において、データは、高速かつ柔軟なトランス

ポート・リンクであるストリームをオペレーターからオペレーターへと流れます。Streams アプリケーションの開発

者にとって、これらをどのように実装するかが問題となることはありません。異なるホスト、同じホストの異なる PE、もしくは同じ PE 内で実行するオペレーターの間で、それぞれ作用に違いがあるかもしれませんが、グラフ

のロジックはその影響を受けません。アプリケーションが外部とデータを交換しなければならない場合、ファイル

の入出力、ODBC、TCP、UDP、または HTTP 接続、メッセージ・キューなどについて、source および sink オペレーターを明示的に使用する必要があります。

ただし、同じインスタンスで実行する Streams アプリケーションの場合、もうひとつ別のモードでのデータ交換が

可能です。それは、エクスポートとインポートです。アプリケーションは、ストリームをエクスポートし、同じインスタ

ンスで実行中の別のアプリケーションで使用可能とすることができます。柔軟な基準に基づき、1 つ以上のアプリ

ケーションがそのようなストリームをインポートできます。これらの、いわゆるアプリケーション・ストリームは、一

度接続されると、アプリケーション内の PE 間で実行する他のすべてのストリームと同様、高速かつ柔軟になりま

す。ジョブがサブミットまたはキャンセルされた際にのみ、どのリンクを確立または切断する必要があるかを見極

めるため、ランタイム・サービスが関わります。これが終わると、ランタイムの動作が変化することはなく、パフォ

ーマンスにも悪影響を及ぼしません。

柔軟性には、非常に大きな利点があります。アプリケーション・ストリームを、パブリッシュ - サブスクライブ方式

の基準に基づいて接続することができ、これにより、開発者は完全なモジュラー・ソリューションを設計できるよう

になります。1 つのモジュールを、進化、置き換え、削除、あるいは複製する場合でも、その他のモジュールが影

響を受けることはありません。個々のモジュールを小さな特殊モジュールとして維持します。

このラボ・シリーズでは、一体構造のアプリケーションを構築してきましたが、それでも論理的な区分があります。

アプリケーションの DirectoryScan から Throttle までのフロントエンドは、読み取りデータ (この場合はファイル

から) に関係しており、制御された形でデータを「再生」し、リアルタイム・フィードのように見せているのです。アプ

リケーションにおけるそれ以外の部分 (Split から FileSink まで) は、分析の実施と、結果の書き込みを行います。

フロントエンドを別の「Ingest」モジュールに分割すれば、同じ構造と類似したコンテンツを持つものの、全く別の

ソースから来るタプルを生成する、もう 1 つのモジュールを一緒に、あるいは置き換えとして容易に追加できるこ

注:

FileSink は、バッファーされたファイル入出力を実施します。これは、直接ディスクに書き込むのではなく、シス

テム・ライブラリーが維持するバッファーに書き込むことを意味しています。これらのバッファーは、いっぱいに

なり次第、もしくは要求する側のアプリケーションが停止した場合にのみ、ディスクに書き出され (「フラッシュ」) ます。出力が徐々にゆっくり流れる場合、ファイル内に何も見えてこない状態が長時間にわたって続きます。

flush を 2u (u は、「符号なし」整数) に設定し、少なくとも 2 つのレコードのバッチでデータを見られるようにし

ます。

Page 49: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 47

とは想像に難くないでしょう。これこそ、ラボにおいてこれから取り扱う内容です。別のモジュールを追加して、ラ

イブ・データ・フィードを読み取り、そのデータを、このアプリケーションの別の部分で処理できるようにしてみまし

ょう。

__1. グラフィカル・エディターで、「コンポジット (Composite)」をドラッグし、領域上でドロップします。既存の

メイン・コンポジットではなく、グラフィカル・オブジェクトの外にドロップしてください。エディターはこれに Comp_1 と名前を付けますので、「プロパティー (Properties)」ビューで名前を FileIngest に変更してく

ださい。

「プロジェクト・エクスプローラー (Project Explorer)」内に新規のコンポジットができたものの、それに関連するビ

ルドがないのが分かるかと思います。ビルドを作成しましょう。

__2. 「プロジェクト・エクスプローラー (Project Explorer)」で FileIngest メイン・コンポジットを右クリックしま

す。「新規 (New)」 > 「分散ビルド(Distributed Build)」を選択し、表示されたダイアログで、デフォルト

のままにし、「OK」をクリックします。

__3. 3 つのフロントエンド・オペレーターを、古いメイン・コンポジットから新しいメイン・コンポジットへ移動しま

す。

__a. 古いメイン・コンポジットで、DirectoryScan_n、FileSource_n、Throttle_n の 3 つのオペレ

ーターを選択します。

各オペレーターは、Ctrl キーを押し続けながらクリックすることで選択できます。選択できたら、

クリップボードへと切り取ります (Cntrl+X キー、もしくは右クリックして「切り取り (Cut)」を選択)。

__b. FileIngest コンポジットを選択し、3 つのオペレーターを貼り付けます (Cntrl+V キー、もしくは

右クリックして「貼り付け (Paste)」を選択)。

これで、同じコード・モジュール (SPL ファイル) に、2 つのアプリケーション (メイン・コンポジット) ができました。こ

れは標準的な方法ではありませんが、問題なく機能します。ただし、これらのアプリケーションは完成していませ

ん。Throttle_n と Split_n のリンクを切断したためです。

__4. ストリームのエクスポート用に、新しいアプリケーション (FileIngest) を設定します。

Page 50: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 48 Streams 3.x ハンズオン・ラボ

__a. パレットで、Export オペレーターを見つけ (フィルター・ボックス内で ex と入力します)、FileIngest コンポジットへドロップします。

__b. ストリームを Throttle_n から Export_n へドラッグします。スキーマは、Throttle_n の出力ポ

ートに属しているため、ストリームがなくても記憶されています。

__c. Export_n を選択し、「プロパティー (Properties)」ビューの「パラメーター (Param)」タブを開き

ます。

__d. 「追加… (Add…)」をクリックします。properties パラメーターを選択し、「OK」をクリックします。

__e. properties の値フィールドで、以下の「タプルのリテラル」を入力します。 { category = "vehicle positions", feed = "sample file" }

これにより、ストリームが、全く任意の名前と値のペアであるプロパティーのセットを使用して「パブリッシュ」され

ます (Web ページのタグと同様)。つまり、インポートする側のアプリケーションが、ある一定の「サブスクリプショ

ン」 (合致させる必要のあるプロパティー・セット) を満たすストリームを探すことができる、ということです。

__f. 保存します。FileIngest アプリケーションが構築されますが、古い方にはまだエラーが出ます。

__5. ストリームのインポート用に、古い方のアプリケーションを設定します。

__a. パレットで、Import オペレーターを見つけ、これを古い方のメイン・コンポジットにドロップします。

__b. Import_n から Split_n へストリームをドラッグします。

__c. このストリームへスキーマを割り当てます。割り当て方法は、既存のストリーム (Aggregate_n の出力を除く) からコピー・アンド・ペーストする方法でもいいですし、LocationType をパレット

からドラッグ・アンド・ドロップする方法でもかまいません。

__d. Import_n を選択し、「プロパティー (Properties)」ビューの「パラメーター (Param)」タブを開き

ます。必須パラメーターである subscription が既に用意されています。

__e. subscription (プレースホルダー parameterValue) の値フィールドをクリックし、次のブール

式を入力します。 category == "vehicle positions"

Page 51: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 49

ここでは 1 つのプロパティーしか探していないことに注意してください。カギとなるカテゴリーと値は "vehicle positions" です。たまたま使用可能になっているもうひとつの方は無視していただいて全

く問題ありません。サブスクリプションの述部が満たされると、(ストリーム・タイプが合致していれば) 接続が確立します。

__6. 連携する 2 つのアプリケーションに分けられた、この新たな配置をテストしてみましょう。

__a. 「Instance Graph」で、残っているジョブをすべてキャンセルします。カラー・スキームを「100 以下のフロー [n タプル/秒] (Flow Under 100 [nTuples/s])」に設定します。表示を拡大し、2 つのジョブを見やすくします。

__b. 「プロジェクト・エクスプローラー (Project Explorer)」で、古いアプリケーション (例: MainComposite4) を起動します。

__c. 新規アプリケーション (FileIngest) を起動します。

2 つのメイン・コンポジットに分かれているにも関わらず、インスタンス・グラフを通して、オペレーターからオペレ

ーターのタプルが流れているのが分かるかと思います。2 つのアプリケーションは実行させたままにしておき、今

度は 3 つ目を追加してみましょう。

4.4 ライブ・フィードの追加

注:

このセクションには、インターネット接続が必要になります。ラボで使用するマシンがインターネットに接続して

いなくても、アプリケーションのインポートや起動を行い、接続が確立するのを見ることはできますが、ライブ・

データが流れません。通常、それ以上の問題が発生することはありません。

ラボ会場で受講者のマシンがインターネットに接続できない場合、このセクションについては、各自で演習を実

施するのではなく、講師が実演する形で進められる可能性もあります。

ライブデータを取り込むアプリケーションを一から構築する代わりに、既に用意されている Streams プロジェクト

をインポートします。このアプリケーションは、インターネット・ツールキットからの InetSource オペレーターを使

Page 52: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 50 Streams 3.x ハンズオン・ラボ

用します。これにより、NextBus.com からの Web サービス・フィードに接続し、定期的 (30 秒ごと) に、サンフラ

ンシスコ市営のバスと路面電車の現在のロケーション、速度、進行方向をダウンロードします。データの解析、フ

ィルター、および変換を行い、結果がファイル・データと同じように見える (いくつかの相違点は残ります) ようにし

ます。処理アプリケーションのサブスクリプションと一致するプロパティー・セットで結果のストリームをエクスポー

トします。NextBus アプリケーションを起動すると、自動的に接続が確立し、ジョブをキャンセルするまでデータ

が継続的に流れます。

__1. まず、Studio ワークスペースで、インターネット・ツールキットが使用可能な状態であることを確認します。

確認方法はいくつかありますが、「ビッグデータ用タスク・ランチャー (Task Launcher for Big Data)」を使用して確認するのが簡単です。ラボ環境では、Streams でインストールされたツールキットが既に

使用可能となってはいますが、念のためにこの手順を踏みます (何度使用可能に設定しても害はありま

せん)。

__a. 「タスク・ランチャー (Task Launcher)」がまだ開いていれば、それをクリックしてください。開い

ていなければ、Eclipse のトップ・メニューで「ヘルプ (Help)」 > 「ビッグデータ用タスク・ランチャ

ー (Task Launcher for Big Data)」を選択します。

__b. 「概要 (Overview)」タブの「ファースト・ステップ (First Steps)」下にある「SPL ツールキットを

使用可能にする (Make SPL Toolkits available)」をクリックします。

__c. 以上で確認完了です。「タスク・ランチャー (Task Launcher)」は閉じていただいて結構です。

__2. NextBus プロジェクトをインポートします。

__a. Eclipse トップ・メニューで、「ファイル (File)」 > 「インポート… (Import…)」を選択します。

__b. インポート・ダイアログで、「InfoSphere Streams Studio」 > 「SPL プロジェクト (SPL Project)」を選択し、「次へ (Next)」をクリックします。

__c. 「参照… (Browse…)」をクリックします。「My Home」をクリックして展開し、

「StreamsExamples」を選択して、「OK」をクリックします。

Page 53: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 51

__d. NextBus のみを選択し、「完了 (Finish)」をクリックします。

__3. アプリケーションを起動します (プロジェクトのビルドが完了するまで待つ必要があるかもしれません)。

__4. 「Instance Graph」を 大化し、調整します。

ここでは、3 つのアプリケーションがすべて接続されているはずです。Data ディレクトリーに追加のファイル情報

をコピーするたびに FileIngest ジョブからタプルが流れます。30 秒のバーストで NextBus ジョブからタプルが

流れます。error.observations ファイルに、NextBus からのレコードが徐々に溜まっていきます。これらの車

両 ID は、「Cnnn」形式に合致していません (ファイルを定期的にリフレッシュしてください。ファイルを表示してい

るエディターをクリックし、「ファイル変更 (File Changed)」ダイアログで「はい (Yes)」をクリックします。このダイ

アログは、基礎コンテンツが変更されたことを Studio が検知すると表示されます)。

Page 54: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 52 Streams 3.x ハンズオン・ラボ

4.5 まとめ

このラボを通してご紹介したのは、Streams で実現しうることのほんの一部に過ぎません。ここで構築したアプリ

ケーションは、ラボを進めるにつれ徐々に興味深くなっていきましたが、その構築には、ほんのわずかな SPL 式を除いて、コード化を用いることはありませんでした。用意された、非常にシンプルなモジュールの助けを借りつ

つ、 終的にこのアプリケーション・セットは、車両ロケーション観測の継続的な流れに対処でき、異なるコンテン

ツを区別できるようになるに至りました。単に、少数のビルディング・ブロックを使用し、タプル・フローの仕組みを

管理するグラフをスケッチして、プロパティー・ビューにおける少数のパラメーターを設定するだけでも、十分に強

力なソリューションの基礎が形成されたのです。

次のステップは、皆さんが以下の点について判断を下すことです。データ・ストリーム用のこのアプリケーション開

発プラットフォームが、ご自身の業務を強化するソリューションの構築に役立つか。このラボで経験したことが、

解決したいと思っていた問題の解決に役立つか。ご自身の組織で、必要な開発スキルが利用できるか、あるい

はスキル構築に投資すべきか。IBM では、この製品に関する正式な研修を提供しております。また、お客様技

術担当員による、ストリーム・データに関連するソリューションの機会の特定、ワークショップの開催、ならびにパ

イロット・プロジェクトやそれ以上のレベルへのステップ・アップなど、さまざまな支援も実施しております。

それでは、ストリームをお楽しみください。

Page 55: IBM InfoSphere Streams 3-2 ハンズオンラボ:入門編public.dhe.ibm.com/software/dw/jp/data/library/... · IBM Software Page 2 Streams 3.x ハンズオン・ラボ InfoSphere

IBM Software

Page 53

付録: 仮想マシン・ホストの要件

● 64 ビットのホスト、もしくは 64 ビットのゲストをサポートできる 32 ビットのホスト

注:

すべてのケース (32 ビットおよび 64 ビットのホスト) において、64 ビットのゲストのサポートが BIOS 設定で

有効になっている必要があります。1 つまたは 2 つの設定があります。名前は状況により異なりますが、

「Virtualization Technology」や「VT-x」を探してください。

● VMware Workstation 8.x 以降、もしくは現行バージョンの VMware Player または VMware Fusion

注:

VMware Player は、無料でダウンロードできるため、 新版を入手しても全く差し支えありません。ただし、

VMware Workstation 7 以前を使用している場合、イメージの .vmx ファイルを編集してこの VM を実行でき

る可能性があります。この点については講師に相談してください。

● ディスクの空き容量: 12 GB (このうちイメージに必要なのは約 8 GB)

● RAM: 4 GB (多ければ多いほど良い。イメージは 2 GB に設定)

● インターネット接続 (ラボ 4 の最後の部分でのみ必要)

VMware ネットワーク構成は NAT (VMnet8) に設定してください。

ファイアウォールが邪魔にならないかを確認してください。

● 2 コア CPU: (イメージは 1 CPU に設定されていますが、必要に応じて調整します。多け

れば多いに越したことはありませんが、必須ではありません。)