Cygnus ソフトウェアは、コンテキスト情報をオープンデータとして公開するセクションで説明したのと同様に、Context Broker にパブリッシュされたすべての選択されたデータを HDFS ベースのストレージに保存することができます。これにより、後で解析するために使用できるコンテキスト情報の長期的な履歴データベース (a long term historic database) を持つことが可能になります。
コンテキスト情報を公開データとして公開するセクションで説明したのと同様に、Cygnus コンポーネントは Context Broker からデータを収集し、HDFS に格納するように設定できます。この場合の設定には、Cosmos ネームノードのエンドポイント、サービスポート、ユーザの資格情報、使用される Cosmos API (webhdfs, infinity, httpfs)、Hive サーバの属性のタイプとエンドポイントが含まれている必要があります。
コンテキストデータが格納されると、Big Data GE を使用して、マップ&リデュース・アプリケーションまたは Hive で処理することができます。もちろん、 Big Data GEs 内の他の大きなデータセットを、単独で、またはコンテキスト情報と組み合わせて処理することも可能です。
典型的な例は、都市のセンサから集められた大量の情報を長期間にわたり分析することです。Context Broker と Cygnus を介してすべてのデータが収集され、長期間 Big Data に格納されます。データを分析するには、いくつかの手順を実行する必要があります。このホワイトペーパーの例は、Cosmos Big Data GE のグローバルかつ共有されたインスタンスに基づいています。
Cosmos ポータル・サイト (http://cosmos.lab.fiware.org/cosmos-gui/) を参照してください。FIWARE Lab に登録済みのユーザを使用して Cosmos アカウントを作成します。アカウントの詳細は登録された後に与えられます。:
- Cosmos username:FIWARE Lab ユーザ名が \<my_user>@mailprovider.com の場合、cosmos ユーザ名は \<my_user> になります。これは、あなたのユーザ・スペース /home/\<my_user>/ であるグローバル・インスタンスのヘッド・ノードにUnixライクなアカウントを与えます。
- Cosmos HDFS space:ヘッド・ノード内の Unix ライクなユーザ・スペースとは別に、クラスタ全体に HDFS スペースがあり、/user/\<my_user>/ になります。
FIWARE Lab の資格情報を使用して、FIWARE Lab のグローバル・インスタンス Cosmos のヘッド・ノードにログインする準備ができました:
[remote-vm]$ export COSMOS_USER= // this is not strictly necessary, junt in order the example commands can be copied&pasted
[remote-vm]$ ssh $COSMOS_USER@cosmos.lab.fiware.org
ログインすると、Hadoop ファイルシステムコマンドを使用して HDFS スペースにアクセスできます:
[head-node]$ export COSMOS_USER= // this is not strictly necessary, junt in order the example commands can be copied&pasted
[head-node]$ hadoop fs -ls /user/$COSMOS_USER // lists your HDFS space
[head-node]$ hadoop fs -mkdir /user/$COSMOS_USER/new_folder // creates a new directory called "new_folder" under your HDFS space
...
格納されているコンテキストデータを使用する以外に、Hadoop ファイルシステムコマンドを使用して独自のデータを HDFS スペースにアップ・ロードすることができます。これは、ヘッド・ノードにログインした後にのみ行うことができ、ヘッド・ノードに配置された Unix ライクなローカル・ファイルをアップロードすることができます:
[head-node]$ echo "long time ago, in a galaxy far far away…" > unstructured_data.txt
[head-node]$ hadoop fs -mkdir /user/$COSMOS_USER/input/unstructured/
[head-node]$ hadoop fs -put unstructured_data.txt /user/$COSMOS_USER/input/unstructured/
ただし、WebHDFS/HttpFS RESTful API を使用すると、FIWARE Lab の Cosmos のグローバル・インスタンス外にあるファイルをアップロードすることができます。次の例では、WebHDFS の代わりに HttpFS を使用しています (TCP/50070 ではなく TCP/14000 ポートを使用します)。curl は HTTP クライアントとして使用されますが、アプリケーションは独自の HTTP クライアントを実装する必要があります:
[remote-vm]$ curl -i -X PUT "http://cosmos.lab.fiware.org:14000/webhdfs/v1/user/$COSMOS_USER/input_data?op=MKDIRS&user.name=$COSMOS_USER"
[remote-vm]$ curl -i -X PUT "http://cosmos.lab.fiware.org:14000/webhdfs/v1/user/$COSMOS_USER/input_data/unstructured_data.txt?op=CREATE&user.name=$COSMOS_USER"
[remote-vm]$ curl -i -X PUT -T unstructured_data.txt –header "content-type: application/octet-stream" http://cosmos.lab.fiware.org:14000/webhdfs/v1/user/$COSMOS_USER/input_data/unstructured_data.txt?op=CREATE&user.name=$COSMOS_USER&data=true
ご覧のとおり、WebHDFS 仕様に記載されているように、データのアップロードは2段階で行われます。API の最初の呼び出しはヘッド・ノードと直接通信し、新しいファイルの作成とその名前を指定します。ヘッド・ノードは一時的なリダイレクト応答を送信し、第2ステップのエンドポイントであるデータを格納しなければならないクラスタ内のすべての既存ノードの中からデータノードを指定する。それにもかかわらず、HttpFS ゲートウェイは同じ API を実装しますが、内部動作が変更され、リダイレクトがヘッド・ノード自体をポイントするようになります。
HDFS 空間にアップロードしたデータが CSV ライクのファイル、つまり共通の文字で区切られたデータフィールドの行を含む構造化ファイルの場合、Hive を使用してデータをクエリできます:
[head-node]$ echo "luke,tatooine,jedi,25" >> structured_data.txt
[head-node]$ echo "leia,alderaan,politician,25" >> structured_data.txt
[head-node]$ echo "solo,corellia,pilot,32" >> structured_data.txt
[head-node]$ echo "yoda,dagobah,jedi,275" >> structured_data.txt
[head-node]$ echo "vader,tatooine,sith,50" >> structured_data.txt
[head-node]$ hadoop fs -mkdir /user/$COSMOS_USER/input/structured/
[head-node]$ hadoop fs -put structured_data.txt /user/$COSMOS_USER/input/structured/
SQL テーブルのような Hive テーブルを作成することができます。ヘッド・ノードにログインし、Hive CLI を起動し、次のように入力して Hive テーブルを作成します:
[head-node]$ hive
hive> create external table <my_user>_star_wars (name string, planet string, profession string, age int) row format delimited fields terminated by ',' location '/user/<my_user>/input/structured/';
これらの Hive テーブルは、Hive CLI を使用してローカルでクエリできます:
[head-node]$ hive
hive> select * from <my_user>_star_wars; // or any other SQL-like sentence, properly called HiveQL
またはリモートで、Hive クライアント (通常は JDBC を使用しますが、他の非 Java プログラミング言語用のいくつかのオプションがあります) を開発して cosmos.lab.fi-ware.org:10000
に接続します。
いくつかのプリロードされた MapReduce の例は、すべての Hadoop ディストリビューションにあります。ヘッド・ノードを ssh で接続し、Hadoop にコマンドを送ることでそれらをリストすることができます:
[head-node]$ hadoop jar /usr/lib/hadoop-0.20/hadoop-examples.jar
たとえば、次のようにタイプすることで、単語数の例を実行することができます(これは Hadoop の "hello world" とも呼ばれます):
[head-node]$ hadoop jar /usr/lib/hadoop-0.20/hadoop-examples.jar wordcount /user/$COSMOS_USER/input/unstructured/unstructured_data.txt /user/$COSMOS_USER/output/
出力 HDFS フォルダが自動的に作成されていることを確認してください。 MapReduce の結果は HDFS に保存されます。ヘッド・ノード内の Unix ユーザ・スペースにダウンロードするには、以下を実行します:
[head-node]$ hadoop fs -getmerge /user/$COSMOS_USER/output /home/$COSMOS_USER/count_result.txt
ヘッド・ノードのホームユーザに HDFS ファイルをダウンロードするには、次の操作を行います:
[head-node]$ hadoop fs -get /user/$COSMOS_USER/structured/structured_data.txt /home/$COSMOS_USER/
HDFS ファイルをリモートマシンに直接ダウンロードする場合は、WebHDFS/HttpFS RESTful API を使用する必要があります:
[remote-vm]$ curl -i -L "http://cosmos.lab.fi-ware.org:14000/webhdfs/v1/user/$COSMOS_USER/structured/structured_data.txt?op=OPEN&user.name=$COSMOS_USER"
実験を開始し、実践的な作業を開始したい場合は、次を参照してください: