5 Oracleビッグ・データ・カートリッジ

Oracle Stream Explorerでは、Hadoop、NoSQLDBおよびHBaseカートリッジによりビッグ・データをサポートします。Hadoopカートリッジは、Oracle CQLプロセッサがHadoop分散ファイルシステム(HDFS)の大容量データにアクセスするための拡張です。HDFSは、非リレーショナル・データ・ストアです。NoSQLカートリッジは、Oracle CQLプロセッサがOracle NoSQL Databaseの大容量データにアクセスするための拡張です。Oracle NoSQLデータベースは、データをキーと値のペアで保管します。HBaseカートリッジは、HBaseデータベース内にある大量のデータにアクセスするOracle CQLプロセッサ用の拡張です。HBaseは、Hadoopファイル・システム上に構築される、分散型の列指向のデータベースです。

この章の内容は次のとおりです。

5.1 ビッグ・データとは

ビッグ・データは、従来のデータ処理アプリケーションでは不十分な場合に使用される巨大で複雑なデータ・セットです。ビッグ・データは、従来のデータと並んで、多くの新しいタイプのデータおよびデータ管理を含み、統合する、全体的な情報管理戦略を表します。

また、ビッグ・データは次のように4つのVによって定義されます。

  • ボリューム(Volume): データの量です。より多くのデータがあることを意味しますが、独特なのはデータの粒度です。ビッグ・データは大量の低密度の非構造化Hadoopデータ、つまりTwitterデータ・フィード、Webページおよびモバイル・アプリケーションのクリック・ストリーム、ネットワーク・トラフィック、光速でデータを捕捉するセンサーを利用できる装置、その他多くの値が不明なデータを処理する必要があります。このようなHadoopデータを価値ある情報に変換することは、ビッグ・データの役割です。

  • 速度(Velocity): データを受信し、処理する速さです。速度の速いデータは、通常はメモリーに直接ストリームされ、ディスクには書き込まれません。

  • 多様性(Variety): 新しい非構造化データ型のことです。テキスト、オーディオ、ビデオなどの非構造化および半構造化データ型では、意味の解明および補助となるメタデータの両方に対する追加の処理が必要になります。解明されると、非構造化データは、サマリー、系統、監査可能性およびプライバシーなどの構造化データと共通する多くの要件を持つようになります。

  • 値(Value): データには固有の値がありますが、検出する必要があります。データから値を導き出するための、様々な量的および研究的な手法があります。

5.2 Hadoopデータ・カートリッジ

Hadoopはオープンソース・テクノロジであり、これを使用してクラスタにまたがって分散された膨大なデータ・セットにアクセスできます。Hadoopソフトウェアの特徴の1つに、リレーショナル・データベースに保存されていない膨大な量のデータへのアクセスを可能にするということが挙げられます。Oracle Stream Explorerのデータ・カートリッジは、Cloudera distribution for Hadoop (CDH)バージョン3u5に基づきます。

このマニュアルの内容は、読者がHadoopシステムにすでに精通していて、運用しているものと想定しています。Hadoopの詳細は、HadoopプロジェクトのWebサイトhttp://hadoop.apache.org/を参照してください。

注意:

HadoopをLinux環境でのみ実行している場合でも、UNIXおよびWindowsでHadoopデータ・カートリッジを使用できます。

5.2.1 Oracle Stream Analytics Hadoopデータ・カートリッジについて

Hadoop分散ファイル・システム上のファイルのデータを処理できるイベント処理ネットワークに既存のHadoopデータ・ソースを統合するには、Hadoopデータ・カートリッジを使用できます。データ・ソースを統合すると、Hadoopシステム上のファイルからデータを組み込むOracle CQL問合せコードを記述できます。

Hadoopシステムを統合する際には、次のガイドラインに留意してください。

  • Hadoopクラスタは、その独自のメカニズムによって起動され、アクセス可能であることが必要です。クラスタはOracle Stream Analyticsによって直接管理されません。

  • Hadoopシステムのファイルは、Oracle CQLで単一キーを使用する結合のみをサポートします。ただし、関連付けられたイベント・タイプのプロパティをキーとして使用できます。すなわち、型がバイト配列であるキーを除いて、文字列型以外の型のキーを使用できます。

  • 結合には等号演算子を使用する必要があります。その他の演算子は、結合条件ではサポートされません。

  • Hadoopファイルのデータを表すために定義するイベント・タイプの場合、タプルベースのイベント・タイプのみがサポートされます。

  • イベント・タイプ指定でのプロパティの順序は、Hadoopファイルでのフィールドの順序と一致させる必要があります。

  • NullPointerExeptionの発生を回避するため、サーバーのシャットダウンまたはアンデプロイを実行する前に、Hadoopデータ・カートリッジの処理を完了するまで待ちます。

  • Oracle CQLに対応する次のHadoopのデータ型のみがサポートされます。それ以外のデータ型では、構成上の例外が発生が発生します。

    表5-1 Oracle CQLとHadoop間のデータ型マッピング

    Oracle CQLデータ型 Hadoopデータ型

    int

    int

    bigint

    long

    float

    float

    double

    double

    char

    chararray

    java.lang.String

    chararray

    byte

    bytearray

5.2.1.1 使用シナリオ: 購買奨励策を開発するための購入データの使用

Hadoopデータ・ソースがOracle Stream Explorerアプリケーションでどのように使用されるかを理解するには、大量の顧客の購入データにリアル・タイムで迅速にアクセスする必要があるアプリケーションによるシナリオを考えてみます。

この場合、Hadoopに格納されているデータには、全店の顧客全員によるすべての購入が含まれています。データの値には、顧客ID、店舗ID、製品IDなどが含まれます。購入データには、各店舗での売れ筋製品についての情報が含まれます。データを管理可能な状態にレンダリングするには、データを調べ、上位購買者(購買奨励策の送付先)のリストを作成するために、MapReduce関数が使用されます。

このデータは、製品のお薦め情報や購買奨励策(クーポンなど)を顧客に送るために設計されたサービスの一部として、モバイル・アプリケーション・メーカーにより収集および管理されます。データは複数の小売業者から収集され、小売業者ごとに別々に管理されます。

Oracle Stream Explorerアプリケーションは、上位購入者に購買奨励策を提供するために設計されたクライアント側のモバイル・アプリケーションに中間層ロジックを提供します。これは次のように機能します。

  1. 小売業者はモバイル・アプリケーション・メーカーと、上位顧客に対する購買奨励策提供のためのプログラムの一部として、購入データを提供することを打ち合せます。店の販売データから定期的にリフレッシュされるデータは、Hadoopシステムに格納され、MapReduce関数を使用して上位購入者が特定されます。
  2. モバイル・アプリケーション・メーカーは、どの小売業者がプログラムをサポートしているかを示して、ダウンロード用にアプリケーションを提供します。
  3. アプリケーション・ユーザーはそれぞれユーザーIDを作成し、これをアプリケーション・メーカーが小売業者からの顧客データに相互に関連付けます。
  4. モバイル・アプリケーションは、ユーザーIDとともに位置データをOracle Stream Explorerアプリケーションに送るよう設計されています。この情報(場所の座標とユーザーID)により、Oracle Stream Explorerアプリケーションで受信されるイベント・データが作成されます。
  5. Oracle Stream Explorerアプリケーションは、モバイル・アプリケーションからイベント・データを受信する際、Oracle CQL問合せを使用して次のことを実行します。
    • ユーザーが参加小売業者の店の近くにいるかどうかを判断します。

    • (Hadoopベースのデータから)そのユーザーがその小売業者の上位購入者であるかどうかを確認します。

    • その小売業者からの購入者として、そのユーザー関連の購入情報を検索します。

    • ユーザーが上位購入者の場合、アプリケーションは、以前購入された製品を現在その製品の購入者に提供されている購買奨励策と対応付けます。

  6. Oracle Stream Explorerアプリケーションは、ユーザーに購買奨励策の通知を送ります。
5.2.1.2 データ・カートリッジ名

Oracle Stream Explorer Hadoopカートリッジでは、カートリッジID com.oracle.cep.cartridge.hadoopが使用されます。

5.2.2 Oracle CQLでのHadoopデータ・ソースの使用

既存のHadoopシステムのファイルをイベント処理ネットワークに統合することにより、Oracle Stream Explorerに含まれるHadoopサポートを使用します。ファイルを統合することにより、Oracle CQLコードからそのファイルのデータにアクセスできます。

ここでは、以下の項目について説明します。

5.2.2.1 Oracle Stream AnalyticsとHadoopの統合の構成

Oracle Stream AnalyticsからHadoopを使用するには、最初にOracle Stream AnalyticsおよびHadoopサーバーの両方の構成を変更する必要があります。

  • Oracle Stream Analyticsサーバーで、サーバーのbootclasspathにHadoop構成ファイル、core-site.xmlhdfs.xmlおよびmapred.xmlを追加します。

  • Hadoopサーバーで、Pig JARファイルをlibディレクトリにコピーし、hadoop-env.shに定義されたHADOOP_CLASSPATHの一部として含めます。

注意:

カートリッジを介したHadoopデータ・ソースとの接続には、多くの入出力操作が必要になる可能性があり、アプリケーションのデプロイ解除でタイムアウトになったり、エラーが発生して、アプリケーションを再びデプロイできなくなったりします。Hadoopカートリッジを使用するアプリケーションのデプロイを解除する前には、必ずアプリケーションへのイベント・フローを中断してください。

5.2.2.2 HadoopシステムのファイルのEPNへの統合

既存のHadoopシステムからのファイルの統合は、既存のリレーショナル・データベースから表を統合する方法と似ています。Hadoopファイルの場合、Hadoopサポート用に特別に追加されたOracle Stream ExplorerスキーマのXML要素fileを使用できます。

ファイルの要素は、http://www.oracle.com/ns/ocep/hadoopネームスペースからのものです。そのため、EPNアセンブリ・ファイルは、そのネームスペースを参照する必要があります。file要素には次の属性があります。

  • id: EPN内のそのファイルを一意に識別します。この属性値を使用して、プロセッサ内のデータ・ソースを参照します。

  • event-type: ファイルのデータのバインド先であるイベント・タイプの参照。イベント・タイプは、EPNで定義されている必要があります。

  • path: Hadoopファイル・システム内のファイルへのパス。

  • separator: オプション。Hadoopファイル内の行を別々のフィールドに分解するときに使用するキャラクタ・デリミタ。デフォルトのデリミタはカンマ( , )文字です。

  • operation-timeout: オプション。操作が完了するまでの最大待機時間(ミリ秒単位)。

統合するHadoopファイルをファイル要素で指定して、表ソース要素を使用して、ファイルのデータを使用するOracle CQLプロセッサ用のデータ・ソースとしてそのファイルを追加します。

次の例では、http://www.oracle.com/ns/ocep/hadoopネームスペース(およびhadoop接頭辞)がBean要素で参照されることに注意してください。file要素は、イベント・タイプ・リポジトリで定義されているCustomerDescriptionイベント・タイプとともに、CustomerDescription.txtファイルのデータを参照します。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:wlevs="http://www.bea.com/ns/wlevs/spring"
    xmlns:hadoop="http://www.oracle.com/ns/ocep/hadoop"
    xsi:schemaLocation="
        http://www.bea.com/ns/wlevs/spring
        http://www.bea.com/ns/wlevs/spring/ocep-epn.xsd
        http://www.oracle.com/ns/ocep/hadoop
        http://www.oracle.com/ns/ocep/hadoop/ocep-hadoop.xsd">
<!-- Some schema references omitted for brevity. -->

    <!-- Event types that will be used in the query. -->
    <wlevs:event-type-repository>
        <wlevs:event-type type-name="SalesEvent">
            <wlevs:class>com.bea.wlevs.example.SalesEvent</wlevs:class>
        </wlevs:event-type>
        <wlevs:event-type type-name="CustomerDescription">
            <wlevs:properties>
                <wlevs:property name="userId" type="char"/>
                <wlevs:property name="creditScore" type="int"/>
                <wlevs:property name="address" type="char"/>
                <wlevs:property name="customerName" type="char"/>
            </wlevs:properties>
        </wlevs:event-type>
    </wlevs:event-type-repository>

    <!-- Input adapter omitted for brevity. -->

    <!-- Channel sending SalesEvent instances to the processor. -->
    <wlevs:channel id="S1" event-type="SalesEvent" >
        <wlevs:listener ref="P1"/>
    </wlevs:channel>

    <!-- The file element to integrate CustomerDescription.txt file from 
        the Hadoop system into the EPN. -->
    <hadoop:file id="CustomerDescription" event-type="CustomerDescription"
        path="CustomerDescription.txt" />

    <!-- The file from the Hadoop system tied into the query processor
        with the table-source element. -->
    <wlevs:processor id="P1">
        <wlevs:table-source ref="CustomerDescription" />
    </wlevs:processor>

    <!-- Other stages omitted for brevity. -->

</beans>
5.2.2.3 Oracle CQLでのHadoopデータの使用

Hadoopファイルをイベント処理ネットワークに統合すると、Oracle CQLコードからそのファイルを問い合せることができます。

次の例は、HadoopシステムのファイルをEPNに追加する方法を示しています。ファイルがEPNに追加されると、次の例のようにOracle CQLコードからの問合せが可能です。

次の例では、プロセッサがSalesEventインスタンスをチャネルから受信しますが、HadoopシステムのファイルにもCustomerDescriptionインスタンスと同様にアクセスできます。Hadoopファイルは、基本的に顧客をリストするCSVファイルです。どちらのイベント・タイプにもuserIdプロパティがあります。

<n1:config
    xsi:schemaLocation="http://www.bea.com/ns/wlevs/config/application wlevs_application_config.xsd"
    xmlns:n1="http://www.bea.com/ns/wlevs/config/application"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <processor>
        <name>P1</name>
        <rules>
            <query id="q1"><![CDATA[	
                SELECT 	customerName, creditScore, price, item	
                FROM 	S1 [Now], CustomerDescription as cust
                WHERE S1.userId = cust.userId 
                AND S1.price > 1000
            ></query>
        </rules>
    </processor>
</n1:config>

5.3 NoSQLデータ・カートリッジ

Oracle NoSQLデータベースは、分散型のキー値データベースです。このデータベースでは、データはキー値ペアで格納されており、これらのペアは特定のストレージ・ノードに記述されています。高可用性、ノード障害時のラピッド・フェイルオーバー、問合せの最適なロード・バランシングを確保するために、ノードはレプリケートされます。

このマニュアルの内容は、読者がOracle NoSQL Databaseにすでに精通していて、運用しているものと想定しています。Oracle NoSQLの詳細は、Oracle Technology Networkページ(http://www.oracle.com/technetwork/database/database-technologies/nosqldb/documentation/index.html)を参照してください。

注意:

NoSQLデータ・カートリッジを使用するには、NoSQL Enterprise Editionのライセンスが必要です。

5.3.1 Oracle CQLプロセッサ問合せ

Oracle Stream Explorer NoSQL Databaseデータ・カートリッジを使用すると、Oracle CQL問合せの一部として、Oracle NoSQL Databaseに保存されたデータを参照できます。カートリッジにより、問合せでは、キーを指定し、そのキーに関連付けられた値のフィールドを参照することで、Oracle NoSQL Databaseストアから値を取得できます。

Oracle NoSQL Databaseを統合する際には、次のガイドラインに留意してください。

  • NoSQL Databaseは、その独自のメカニズムによって起動され、アクセス可能であることが必要です。Oracle Stream Explorerによって直接管理されてはいません。

  • このリリースのカートリッジは、Oracle NoSQL Database APIリリース2.1.54を使用してデータベースへのアクセスを提供します。

  • 問合せでキーとして使用されるプロパティは、String型であることが必要です。結合では単一のキーのみを使用できます。

  • 結合には等号演算子を使用する必要があります。その他の演算子は、結合条件ではサポートされません。

  • NoSQL Databaseを使用するランナウェイ問合せはサポートされません。ランナウェイ問合せの実行時間は、オプティマイザが予測する実行時間より長くなります。

5.3.2 データ・カートリッジ名

Oracle Stream Explorer NoSQLカートリッジはカートリッジID com.oracle.cep.cartridge.nosqldbを使用します。

5.3.3 Oracle CQLでのNoSQL Databaseの使用

CQLアプリケーションでOracle Stream Explorer NoSQL Databaseデータ・カートリッジを使用するには、1つ以上のアプリケーションの有効範囲内にあるカートリッジ・コンテキストで、そのアプリケーション用に宣言し、構成する必要があります。

5.3.3.1 NoSQL DatabaseのEPNへの統合

既存のNoSQL Databaseの統合は、リレーショナル・データベースの表を統合する方法と似ています。NoSQL Databaseの場合、EPNアセンブリ・ファイルを次の方法で更新します(手順3の例を参照)。

  1. NoSQLデータ・ソースを参照するために、ネームスペース宣言を追加して、store要素をサポートします。

    変更では、schemaLocation属性にネームスペース・スキーマの場所を、ネームスペースおよび接頭辞の宣言とともに追加する必要があります。

    • http://www.oracle.com/ns/oep/nosqldb http://www.oracle.com/ns/oep/nosqldb/oep-nosqldb.xsd

    • xmlns:nosqldb="http://www.oracle.com/ns/oep/nosqldb"

  2. store要素を追加して、NoSQL Databaseをリレーション・ソースとしてイベント処理ネットワークに統合します。

    ストア要素では、次の属性(すべてが必須)をサポートします。

    • id: CQL問合せでキー/値ストアを参照するために使用される名前。

    • store-name: キー/値ストアの名前で、ストアの作成時にKVStoreConfigクラスで指定した名前と一致させる必要があります。

    • store-locations: ストア内のアクティブ・ノードの1つ以上のホスト名およびポート。属性値は、空白区切りのリストで、各エントリはhostname:portの形式です。指定したホスト名およびポートの値を持つノードは、ストアに最初に接続したときに、順番に接続されます。

    • event-type: このリレーションのためにストア内の値から取得されたすべてのオブジェクトのオブジェクト型。属性値は、wlevs:event型リポジトリ・エントリで指定されたwlevs:event型エントリの名前に対応する必要があります。

  3. table-source要素を追加して、NoSQL Databaseを問合せが実行されるプロセッサに接続します。

次の例は、イベント処理ネットワークをNoSQL Databaseに接続する方法を示しています。store要素は、ホストkvhost-alpha上のポート5000またはホストkvhost-beta上のポート5010を使用して最初の接続を行い、"kvstore-customers"という名前のストアへのアクセスを提供します。Oracle CQLプロセッサP1を定義し、キー/値ストアのデータを"CustomerDescription"という名前のリレーションとしてP1で使用できるようにします。

ストアは、"CustomerDescription"の名前を使用して、Oracle CQL問合せ内で参照できます。ストアから取得される値はすべて、CustomerDescriptionクラスのシリアライズ・インスタンスです。

   <?xml version="1.0" encoding="UTF-8"?>
   <beans xmlns="http://www.springframework.org/schema/beans"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:osgi="http://www.springframework.org/schema/osgi"
          xmlns:wlevs="http://www.bea.com/ns/wlevs/spring"
          xmlns:nosqldb="http://www.oracle.com/ns/oep/nosqldb"
          xsi:schemaLocation="
     http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans.xsd
     http://www.springframework.org/schema/osgi
     http://www.springframework.org/schema/osgi/spring-osgi.xsd
     http://www.bea.com/ns/wlevs/spring
     http://www.bea.com/ns/wlevs/spring/ocep-epn.xsd
     http://www.oracle.com/ns/oep/nosqldb
     http://www.oracle.com/ns/oep/nosqldb/oep-nosqldb.xsd">

    <!-- Provide access to the CustomerDescription class, which represents 
        the type of values in the store. -->
    <wlevs:event-type-repository>
        <wlevs:event-type type-name="CustomerDescription">
            <wlevs:class>com.bea.wlevs.example.CustomerDescription</wlevs:class>
        </wlevs:event-type>
        <wlevs:event-type type-name="SalesEvent">
            <wlevs:class>com.bea.wlevs.example.SalesEvent</wlevs:class>
        </wlevs:event-type>
    </wlevs:event-type-repository>

    <!-- The store element declares the key-value store, along with the 
        event type to which incoming NoSQL data will be bound. -->
    <nosqldb:store store-name="kvstore-customers"
        store-locations="kvhost-alpha:5000 kvhost-beta:5010"
        id="CustomerDescription"
        event-type="CustomerDescription"/>


    <wlevs:channel id="S1" event-type="SalesEvent">
        <wlevs:listener ref="P1"/>
    </wlevs:channel>

    <!- The table-source element links the store to the CQL processor. -->
    <wlevs:processor id="P1">
        <wlevs:table-source ref="CustomerDescription" /> 
    </wlevs:processor>

</beans>

Oracle CQL問合せでstore要素により指定したストア内のエントリを参照する場合、それらのエントリの値は、イベントタイプ属性で指定した型のシリアライズ・インスタンスであることが必要です。イベント・タイプ・クラスはjava.io.Serializableを実装する必要があります。

有効でないシリアライズ形式のストアから問合せで値を取得する場合、または指定されたクラスのシリアル化形式でない値の場合は、Oracle Stream Analyticsで例外が発生し、イベント処理が停止します。複数のstore要素を宣言して、同一または異なるストアから異なるデータ型の値を返すことができます。

5.3.3.2 Oracle CQLでのNoSQLデータの使用

NoSQL Databaseをイベント処理ネットワークに統合すると、Oracle CQLコードからデータにアクセスできます。問合せでは、WHERE句で等価リレーションを指定することで、ストアのエントリを検索できます。

<n1:config
    xsi:schemaLocation="http://www.bea.com/ns/wlevs/config/application wlevs_application_config.xsd"
    xmlns:n1="http://www.bea.com/ns/wlevs/config/application"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <processor>
        <name>P1</name>
        <rules>
            <query id="q1"><![CDATA[	
                SELECT customerName, creditScore, price, item
                FROM S1 [Now], CustomerDescription as cust
                WHERE S1.userId = cust.userId
                AND creditScore > 5
            ></query>
        </rules>
    </processor>
</n1:config>

この例では、S1チャネルおよびCustomerDescription NoSQLデータ・ソースのデータを表すイベント・タイプ・インスタンスがいずれもJavaBeansクラスとして実装されています。どちらのイベント・タイプもJavaBeansクラスであるため、Oracle CQL問合せでは、イベントのユーザーIDとWHERE句内の顧客の説明のIDをどちらもJavaBeansプロパティとして扱って等価とすることで、特定のイベントに関連付けられた顧客の説明にアクセスできます。

WHERE S1.userId = CustomerDescription.userId

この句では、イベントのuserIdフィールドの値で指定されたキーを持つストアからエントリを取得することを要求します。ストアからのエントリ取得では、等価リレーションのみがサポートされます。

ストアからエントリが選択されると、そのストアから取得された値のフィールドは、問合せのSELECTの部分、またはWHERE句内の追加の句で参照することができます。

SELECT句で指定したcreditScore値では、ストアから取得したCustomerDescriptionオブジェクトのcreditScoreフィールドの値が問合せの出力に含まれます。WHERE句のcreditScoreに対する参照でも、問合せはCustomerDescription creditScoreフィールドの値が5より大きいイベントにさらに制限されます。

5.3.3.2.1 NoSQLストアからのエントリ取得に使用されるキーの書式設定

ストアからのエントリ取得に使用されるキーは、値をスラッシュ(/)で始めるか、スラッシュを省略するかのいずれかの方法で書式を設定できます。

等価リレーションの左側に指定した値がスラッシュで始まる場合、キーは1つ以上の主要コンポーネントを(必要な場合はマイナー・コンポーネントも)指定するフル・キーとして扱われます。キー・パスの構文の詳細は、http://docs.oracle.com/cd/NOSQL/html/javadoc/index.htmlのOracle NoSQL Database APIドキュメントにあるoracle.kv.Keyクラスに関する情報を参照してください。

たとえば、SalesEventオブジェクトのuserIdフィールドに値"/users/user42/-/custDesc"がある場合、その値はusersを1つ目の主要コンポーネントとして、ユーザーIDのuser42を2つ目の主要コンポーネントとして、そしてcustDescというマイナー・コンポーネントを指定するフル・キー・パスとして処理されます。

便宜上、等価リレーションの左側に指定した値がスラッシュで始まっていない場合は、キー全体を構成する1つの主要コンポーネントとして処理されます。

ストアからエントリを取得するために使用されるキーは、Oracle CQL問合せでアクセスされる1つのフィールドで完全な形で指定する必要があります。特に、複数のコンポーネントを指定したキー・パスがキー/値ストア内のエントリにアクセスするために必要な場合、問合せによってアクセスされる1つのフィールドにフル・キー・パス式を格納する必要があります。

5.4 HBaseビッグ・データ・カートリッジ

HBaseビッグ・データ・カートリッジは、HBaseをOracle Stream Explorerに統合したものです。HBaseは、分散型のバージョニングされた非リレーショナル・データベースであるNOSQLデータベースの一種です。

HBaseビッグ・データ・カートリッジでは、データにアクセスする主な手段としてのSQLはサポートされません。HBaseでは、データを受信するためのJava APIが提供されます。各行にはキーがあります。すべての列は特定の列ファミリに属します。それぞれの列ファミリは、1つまたは複数の修飾子で構成されます。従って、データの取得には行キー、列ファミリおよび列修飾子を組み合せる必要があります。HBaseはRDBMSのないビッグ・データの格納に適しています。

各表には、リレーショナル・データベースのように行キーがあります。HBaseの列修飾子は、NoSqlDBのマイナー・キーの概念に類似しています。たとえば、レコードのメジャー・キーが人物の名前で、マイナー・キーがその人物について格納する別の情報であることがあります。

5.4.1 HBaseカートリッジについて

HBaseでは、優先されるのは効率的なビッグ・データの格納であり、複雑なデータ取得操作の実行ではありません。

次のコードの抜粋は、HBaseでデータを格納して取得する方法の案です。

HBaseConfiguration config = new HBaseConfiguration();
batchUpdate.put("myColumnFamily:columnQualifier1", "columnQualifier1value".getBytes());
Cell cell = table.get("myRow", "myColumnFamily:columnQualifier1");
String valueStr = new String(cell.getValue());

HBaseは様々なアプリケーションのメタデータの格納に使用されます。たとえば、企業は様々な売上と関連付けた顧客情報をHBaseデータベースに格納できます。この場合、HBaseを外部データ・ソースとして使用してCQL問合せを作成できるHBaseビッグ・データ・カートリッジを使用できます。

HBaseデータベース・ストアのEPNコンポーネントは、データ・カートリッジとして提供されます。HBaseデータベース・カートリッジは、次のプロパティを持つ<store> EPNコンポーネントを提供します。

  • id: EPNコンポーネントの名前。

  • store-location: domain:client portの形式で表される、HBaseデータベース・サーバーの場所。

  • event-type: CQLプロセッサにより表示される格納用のスキーマ。イベント・タイプ・クラスはjava.io.Serializableインタフェースを実装するJavaクラスである必要があります。

  • table-name: HBase表の名前。

EPNコンポーネントには、CQLイベント属性からHBase列ファミリおよび修飾子へのマッピングを指定するための、関連する<column-mappings>コンポーネントがあります。このコンポーネントは、JDBCカートリッジ構成に類似したHBaseビッグ・データ・カートリッジ構成ファイルで宣言されます。このコンポーネントには次のプロパティがあります。
  • name: マッピングが宣言されている<store> EPNコンポーネントのID。

  • rowkey: HBase表で使用される行キーの属性。String型である必要があります。

  • cql-attribute: CQL問合せで使用されるCQL属性の名前。この名前は、Javaイベント・タイプで宣言された対応するフィールドと一致する必要があります。

  • hbase-family: HBase列ファミリ。

  • hbase-qualifer: HBase列修飾子。

5.4.2 HBaseカートリッジの使用

HBaseカートリッジを使用するには、cql-attributeがプリミティブ・データ型の場合、hbase-familyおよびhbase-qualifierを指定する必要があります。

次の例のように、<hbase:store>コンポーネントはtable-source要素を使用してCQLプロセッサにリンクされます。

<hbase:store id="User" table-name="User" event-type="UserEvent" store-location="localhost:5000">
</hbase:store>
<wlevs:processor id="P1">
  <wlevs:table-source ref="User"/>
</wlevs:processor>

次の例のように、Oracle Stream Analytics HBase構成ファイルで<hbase:store>コンポーネントの列のマッピングを指定する必要があります。

例5-1 HBaseカートリッジの列のマッピング

次の例では、CQL列addressはマップで、address列ファミリからのすべての列修飾子を持っています。CQL列firstnamelastnameemailおよびroleは、プリミティブ・データ型のデータを格納します。data列ファミリからの固有の列修飾子があります。イベント・タイプからのuserNameフィールドは行キーで、そのため、HBase列ファミリまたは修飾子へのマッピングはありません。

<hbase:column-mappings>
    <name>User</name>
    <rowkey>userName</rowkey>
    <mapping cql-attribute="address" hbase-family="address"/>
    <mapping cql-attribute="firstname" hbase-family="data"  hbase-qualifier="firstname"/>
    <mapping cql-attribute="lastname" hbase-family="data"  hbase-qualifier="lastname"/>
    <mapping cql-attribute="email" hbase-family="data"  hbase-qualifier="email"/>
    <mapping cql-attribute="role" hbase-family="data" hbase-qualifier="role"/>
</hbase:column-mappings>

<UserEvent>クラスには次のフィールドがあります。

String userName;
java.util.Map address;
String first name;
String lastname;
String email;
String role;

HBaseスキーマの性質は動的で、HBase表が作成された後はいつでも、追加の列ファミリまたは列修飾子(あるいはその両方)を追加できます。Oracle Stream Analyticsでは、すべての動的に追加された列修飾子を含むマップとしてイベント・フィールドを取得できます。この場合、java.util.MapをJavaイベント・タイプでイベント・フィールドのひとつとして宣言する必要があります。そのため、UserEventイベント・タイプには、名前とアドレスの両方を持つjava.util.Mapフィールドが必要です。カートリッジでは、動的に追加された列ファミリはサポートされません。そのため、Oracle Stream Analyticsアプリケーションが新しく追加された列ファミリを使用する必要がある場合、イベント・タイプを変更する必要があります。

HBaseデータベースはクラスタとして実行される場合があります。マスター・ノードのhostnameおよびclient portを構成する必要があります。

サポートされる演算子

現在は、= !=like<および>演算子のみがサポートされています。問合せの最初の従属句は、行キーに基づくHBaseデータ・ソースとの等結合である必要があります。

S1.userName = user.userName
like演算子は、Java正規表現を引数として受け入れます。この演算子はString型のみに使用できます。
user.firstname like Y.*

<および>演算子は、integerおよびdoubleデータ型のみに使用できます。

5.4.3 リリース12.2.1におけるHBaseカートリッジの制限

HBaseカートリッジは、リリース12.2.1においていくつかの制限があります。

HBaseカートリッジの制限は次のとおりです。

  1. HBaseサーバーのバージョン0.94.8のみがサポートされています。

  2. HBaseサーバーが使用不可能な場合、HBaseカートリッジ・アプリケーションをOracle Stream Explorerサーバーにデプロイできません。

  3. HBaseアプリケーションがOracle Stream Explorerにデプロイされた後でHBaseサーバーが停止した場合、Oracle Stream Explorerサーバーを再起動しなければ、HBaseサーバーに再接続できません。

  4. HBase表の行キーと結合する場合、イベント・プロパティのデータ型はStringである必要があります。

  5. HBaseカートリッジ・アプリケーションでは、store idおよびtable-nameの名前の両方が、スプリング・ファイルのHBaseカートリッジのものと一致する必要があります。一致しない場合、表の識別は失敗します。

  6. HBaseイベント・プロパティのデータ型には、ラッパー・データ型の整数または倍精度浮動小数点数を使用して、ランタイム例外を回避します。

  7. HBaseカートリッジ・アプリケーションのCQL問合せで構文エラーがある場合、明確なエラー・メッセージは表示されません。

  8. 値がNULLの文字列をHBase行キーに結合しようとすると、ランタイム例外が発生します。

  9. CQL問合せの最初の従属句は、行キーに基づくHBaseデータ・ソースとの等結合である必要があります。

  10. CQL問合せで=または!=演算子をdoubleデータ型に使用する場合、文字ddoubleデータ型の値の後ろに付ける必要があります。