この章では、Oracle Hadoopデータ・カートリッジを使用してHadoopシステムをOracle Event Processingイベント処理ネットワークに統合し、システム上のファイルのデータを問い合せる方法について説明します。
Hadoopは、クラスター間で分散されている大規模データ・セットへのアクセスを提供するオープン・ソース・テクノロジです。Hadoopソフトウェアの強みの1つは、1つのリレーショナル・データベースに格納されていない大量のデータへのアクセスを提供することです。
このマニュアルの内容は、読者がHdoopシステムにすでに精通していて、運用しているものと想定しています。Hadoopの詳細は、まずはHadoopプロジェクトのWebサイト(http://hadoop.apache.org/
)を参照してください。
注意: Oracle Event ProcessingアプリケーションでのHadoop機能は、UNIXベースの環境でのみサポートされます。 |
この章の内容は次のとおりです。
Hadoopデータ・カートリッジを使用すると、既存のHadoopデータ・ソースをイベント処理ネットワークに統合できます。データ・ソースを統合すると、Hadoopシステム上のファイルからデータを組み込むOracle CQL問合せコードを記述できます。
Hadoopシステムを統合する際には、次のガイドラインに留意してください。
Hadoopクラスタは、その独自のメカニズムによって起動され、アクセス可能であることが必要です。クラスタは、Oracle Event Processingによって直接管理されません。
Hadoopシステムのファイルは、Oracle CQLで単一キーを使用する結合のみをサポートします。ただし、関連付けられたイベント・タイプのプロパティをキーとして使用できます。すなわち、型がバイト配列であるキーを除いて、文字列型以外の型のキーを使用できます。
結合には等号演算子を使用する必要があります。その他の演算子は、結合条件ではサポートされません。
Hadoopファイルのデータを表すために定義するイベント・タイプの場合、タプルベースのイベント・タイプのみがサポートされます。
イベント・タイプ指定でのプロパティの順序は、Hadoopファイルでのフィールドの順序と一致させる必要があります。
Oracle CQLに対応する次のHadoopのデータ型のみがサポートされます。それ以外のデータ型では、構成上の例外が発生が発生します。
Hadoopデータ・ソースがOracle Event Processingアプリケーションでどのように使用されるかを理解するには、大量の顧客の購入データにリアル・タイムで迅速にアクセスする必要があるアプリケーションによるシナリオを考えてみます。
この場合、Hadoopに格納されているデータには、全店の顧客全員によるすべての購入が含まれています。データの値には、顧客ID、店舗ID、製品IDなどが含まれます。購入データには、各店舗での売れ筋製品についての情報が含まれます。データを管理可能な状態にレンダリングするには、データを調べ、上位購買者(購買奨励策の送付先)のリストを作成するために、MapReduce関数が使用されます。
このデータは、製品のお薦め情報や購買奨励策(クーポンなど)を顧客に送るために設計されたサービスの一部として、モバイル・アプリケーション・メーカーにより収集および管理されます。データは複数の小売業者から収集され、小売業者ごとに別々に管理されます。
Oracle Event Processingアプリケーションは、上位購入者に購買奨励策を提供するために設計されたクライアント側のモバイル・アプリケーションに中間層ロジックを提供します。これは次のように機能します。
小売業者はモバイル・アプリケーション・メーカーと、上位顧客に対する購買奨励策提供のためのプログラムの一部として、購入データを提供することを打ち合せます。店の販売データから定期的にリフレッシュされるデータは、Hadoopシステムに格納され、MapReduce関数を使用して上位購入者が特定されます。
モバイル・アプリケーション・メーカーは、どの小売業者がプログラムをサポートしているかを示して、ダウンロード用にアプリケーションを提供します。
アプリケーション・ユーザーはそれぞれユーザーIDを作成し、これをアプリケーション・メーカーが小売業者からの顧客データに相互に関連付けます。
モバイル・アプリケーションは、場所のデータをユーザーIDとともにOracle Event Processingアプリケーションに送信するように設計されています。この情報(場所の座標とユーザー)IDにより、Oracle Event Processingアプリケーションで受信されるイベント・データが作成されます。
Oracle Event Processingアプリケーションでは、モバイル・アプリケーションからイベント・データを受信する際、Oracle CQL問合せを使用して次のことを行います。
ユーザーが参加小売業者の店の近くにいるかどうかを判断します。
(Hadoopベースのデータから)そのユーザーがその小売業者の上位購入者であるかどうかを確認します。
その小売業者からの購入者として、そのユーザー関連の購入情報を検索します。
ユーザーが上位購入者の場合、アプリケーションは、以前購入された製品を現在その製品の購入者に提供されている購買奨励策と対応付けます。
Oracle Event Processingアプリケーションは、ユーザーに購買奨励策の通知を転送します。
既存のHadoopシステムのファイルをイベント処理ネットワークに統合することにより、Oracle Event Processingに含められたHadoopサポートを使用します。ファイルを統合することにより、Oracle CQLコードからそのファイルのデータにアクセスできます。
ここでは、次の項目について説明します。
Oracle Event ProcessingからHadoopを使用するには、まずOracle Event ProcessingとHadoopの両サーバーで構成を変更する必要があります。
Oracle Event Processingサーバーで、サーバーのbootclasspathにHadoop構成ファイル、core-site.xml、hdfs.xmlおよびmapred.xmlを追加します。
Hadoopサーバーに対しては、libディレクトリにPig JARファイルをコピーし、それをhadoop-env.shファイルで定義されているHADOOP_CLASSPATHの一部として含めます。
注意: カートリッジを介したHadoopデータ・ソースとの接続には、多くの入出力操作が必要になる可能性があり、アプリケーションのデプロイ解除でタイムアウトになったり、エラーが発生して、アプリケーションを再びデプロイできなくなったりします。Hadoopカートリッジを使用するアプリケーションのデプロイを解除する前には、必ずアプリケーションへのイベント・フローを中断してください。 |
既存のHadoopシステムからのファイルの統合は、既存のリレーショナル・データベースから表を統合する方法と似ています。Hadoopファイルの場合、Hadoopサポート用に特に追加されたOracle Event Processingスキーマのfile
XML要素を使用します。
ファイルの要素は、http://www.oracle.com/ns/ocep/hadoopネームスペースからのものです。そのため、EPNアセンブリ・ファイルは、そのネームスペースを参照する必要があります。file
要素には次の属性があります。
id
: EPN内のそのファイルを一意に識別します。この属性値を使用して、プロセッサ内のデータ・ソースを参照します。
event-type
: ファイルのデータのバインド先であるイベント・タイプの参照。イベント・タイプは、EPNで定義されている必要があります。
path
: Hadoopファイル・システム内のファイルへのパス。
separator
: オプション。Hadoopファイル内の行を別々のフィールドに分解するときに使用するキャラクタ・デリミタ。デフォルトのデリミタはカンマ( , )文字です。
operation-timeout
: オプション。操作が完了するまでの最大待機時間(ミリ秒単位)。
統合するHadoopファイルをファイル要素で指定して、表ソース要素を使用して、ファイルのデータを使用するOracle CQLプロセッサ用のデータ・ソースとしてそのファイルを追加します。
例18-1「Hadoopのファイルを統合するEPN」では、http://www.oracle.com/ns/ocep/hadoop
ネームスペース(およびhadoop
接頭辞)がBean要素で参照されることに注意してください。file
要素は、イベント・タイプ・リポジトリで定義されているCustomerDescription
イベント・タイプとともに、CustomerDescription.txtファイルのデータを参照します。
例18-1 Hadoopのファイルを統合するEPN
<?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/spring-wlevs-v11_1_1_6.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.text 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>
Hadoopファイルをイベント処理ネットワークに統合すると、Oracle CQLコードからそのファイルを問い合せることができます。
例18-1「Hadoopのファイルを統合するEPN」では、HadoopシステムのファイルをEPNに追加する方法を説明しています。EPNにファイルを追加することで、例18-2「Hadoopファイルのデータを使用するOracle CQL問合せ」で示すように、Oracle CQLコードからこのファイルを問い合せることができます。
次の例では、プロセッサがSalesEventインスタンスをチャネルから受信しますが、HadoopシステムのファイルにもCustomerDescriptionインスタンスと同様にアクセスできます。Hadoopファイルは、基本的に顧客をリストするCSVファイルです。どちらのイベント・タイプにもuserId
プロパティがあります。
例18-2 Hadoopファイルのデータを使用するOracle CQL問合せ
<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>