1 Big Data Spatial and Graphの概要

この章では、Oracle Spatial and Graphの空間およびプロパティ・グラフの機能についてのOracle Big Dataサポートの概要について説明します。

1.1 Big Data Spatial and Graphについて

Oracle Big Data Spatial and Graphでは、サポートされているApache Hadoop Big Dataプラットフォームに高度な空間およびグラフ分析機能を提供します。

空間機能では、場所に関する情報のデータ・エンリッチメント、距離と場所による分析に基づいた空間のフィルタ処理とびカテゴリ化、およびデジタル地図、センサー、衛星画像と航空画像の値のベクトルおよびラスター処理を行う空間データ処理、地図のビジュアル化のためのAPIをサポートしています。

1.2 空間機能

空間場所情報は、Big Dataでは共通の要素です。

ビジネスでは、異なるデータ・セットの関連付けとリンクのベースとして、空間データを使用できます。場所に関する情報は、別の人物、場所、オブジェクトに基づいて、あるいは特定のエリアでの存在に基づくエンティティの追跡とカテゴリ化にも使用できます。場所に関する情報によって、特定の地理に進む顧客に場所固有のジオフェンシングと呼ばれる情報提供を促進します。ジオリファレンスされた画像データや知覚データの分析は、ビジネスに様々なメリットをもたらします。

Oracle Big Data Spatial and Graphの空間機能では、次の各種サービスでこのようなユースケースをサポートしています。

ベクトル・サービス:

  • ドキュメントとデータを、デフォルトの管理階層用に空間オブジェクト定義の都市や州、またはベクトルおよびラスター処理を行う空間データ処理緯度/経度情報と関連付ける機能

  • GeoJSONファイル、Shapefiles、GML、およびWKTを含むテキストベースの2次元および3次元の地理空間形式のサポート、またはGeospatial Data Abstraction Library (GDAL)を使用したOracle SDO_Geometry, ST_Geometry、その他のサポート対象の形式の一般的な地理空間エンコーディングの使用

  • データを様々な形式と座標系で調べ、カテゴリ化し、表示するためのHTML5ベースのマップ・クライアントAPIとサンプル・コンソール

  • 位相的操作および距離演算: Anyinteract、Inside、Contains、Within Distance、Nearest Neighborなど

  • データ簡易取得用の空間索引付け

ラスター・サービス:

  • GDALでサポートされている多数のイメージ・ファイル形式、およびHDFSに格納されているイメージ・ファイルのサポート

  • 使用できる一連のイメージを表示するサンプル・コンソール

  • ラスター操作、包括、サブセット、ジオリファレンス、モザイク、および形式変換

1.3 プロパティ・グラフ機能

グラフは頂点、エッジ、および頂点とエッジのプロパティとしてリンクされたデータのネットワークを管理します。グラフは一般的に、ソーシャル・ネットワーキング、サイバー・セキュリティ、ユーティリティおよび通信、ライフ・サイエンスと臨床データ、ナレッジ・ネットワークで検出される関係のモデル化、格納、および分析に使用されます。

標準的なグラフ分析には、グラフのトラバース、推奨、コミュニティおよびインフルエンサの検出、パターン一致などがあります。グラフは、通信、ライフ・サイエンスおよびヘルスケア、セキュリティ、メディアおよび出版などの業種に活用できます。これらのユースケースは、Oracle Big Data Spatial and Graphのプロパティ・グラフ機能でサポートされています。

ビッグ・データ・プラットフォームのプロパティ・グラフ機能は、Oracle Graph Server and Clientの一部であるOracle Graph HDFS Connectorを使用して有効にします。Oracle Graph Server and Clientの関連機能は、このコネクタを使用してApache HDFSのデータにアクセスすることでサポートされます。詳細は、『Oracle Databaseプロパティ・グラフのグラフ開発者ガイド』を参照してください。

1.4 Oracle Big Data Appliance上でのOracle Big Data Spatial and Graphのインストール

Oracle Big Data Applianceソフトウェアのインストールと構成のためのMammothコマンドライン・ユーティリティでは、空間およびプロパティ・グラフ機能を含むOracle Big Data Spatial and Graphオプションもインストールします。

このオプションは、初期ソフトウェア・インストール時、またはbdacliユーティリティの使用後に有効にできます。

Oracle NoSQL Databaseをグラフ・リポジトリとして使用するには、Oracle NoSQL Databaseクラスタが必要です。

Apache HBaseをグラフ・リポジトリとして使用するには、Apache Hadoopクラスタが必要です。

関連項目:

ソフトウェア構成手順の詳細は、『Oracle Big Data Applianceオーナーズ・ガイド』を参照してください。

1.5 Big Data Spatial Image Processing Frameworkのインストールおよび構成

Image Processing Frameworkのインストールおよび構成は、使用しているディストリビューションに応じて異なります。

両方のディストリビューションについて:

1.5.1 Cartographic Projections Libraryの取得およびコンパイル

Image Processing Frameworkをインストールする前に、Cartographic Projections Libraryをダウンロードし、複数の関連操作を実行する必要があります。

  1. PROJ.4ソース・コードおよびデータ・シフト・ファイルをダウンロードします。

    $ wget http://download.osgeo.org/proj/proj-4.9.1.tar.gz
    $ wget http://download.osgeo.org/proj/proj-datumgrid-1.5.tar.gz
    
  2. ソース・コードを解凍し、データ・シフト・ファイルをnadサブディレクトリに抽出します。

    $ tar xzf proj-4.9.1.tar.gz
    $ cd proj-4.9.1/nad
    $ tar xzf ../../proj-datumgrid-1.5.tar.gz
    $ cd ..
    
  3. PROJ.4を構成、作成およびインストールします。

    $ ./configure
    $ make
    $ sudo make install
    $ cd ..
    

    これで、libproj.so/usr/local/lib/libproj.soで使用可能になりました。

  4. libproj.soファイルをspatialインストール・ディレクトリにコピーします。

    cp /usr/local/lib/libproj.so /opt/oracle/oracle-spatial-graph/spatial/raster/gdal/lib/libproj.so
  5. libproj.soライブラリの読取りおよび実行権限をすべてのユーザーに与えます

    sudo chmod 755 /opt/oracle/oracle-spatial-graph/spatial/raster/gdal/lib/libproj.so

1.5.2 Oracle Big Data ApplianceディストリビューションのImage Processing Frameworkのインストール

Oracle Big Data Applianceディストリビューションには、事前にインストールされた構成が用意されていますが、イメージ処理フレームワークがインストールされていることを確認する必要があります。

「Cartographic Projections Libraryの取得およびコンパイル」で説明されているアクションが実行されていることにより、libproj.so (PROJ.4)がすべてのユーザーからアクセス可能であり、正しく設定されていることを確認してください。

OBDAの場合、次のディレクトリが存在することを確認してください。

  • SHARED_DIR (クラスタ内のすべてのノードの共有ディレクトリ): /opt/shareddir

  • ALL_ACCESS_DIR (hadoopグループへの書込みアクセス権を持つクラスタ内のすべてのノードの共有ディレクトリ): /opt/shareddir/spatial

1.5.3 その他のディストリビューション(Oracle Big Data Appliance以外)のImage Processing Frameworkのインストール

Big Data Appliance以外の環境のBig Data Spatial and Graphでは、このセクションの次の手順を実行します。

1.5.3.1 その他のディストリビューションのImage Processing Frameworkをインストールするための前提条件
  • HADOOP_LIB_PATH/usr/lib/hadoopにあることを確認します。ない場合はパスを検索し、HADOOP_LIB_PATHとして使用します。

  • NFSをインストールします。

  • 1つ以上のフォルダを作成し、このドキュメントでSHARED_FOLDERとして参照し、リソース・マネージャ・ノードではNFSからすべてのノード・マネージャ・ノードにアクセス可能にします。

  • ジョブ実行に関連するすべてのユーザー、およびyarnユーザーにこのSHARED_FOLDERへの書込みアクセス権を付与します

  • oracle-spatial-graph-<version>.x86_64.rpmをOracle E-Delivery Webサイトからダウンロードします。

  • rpmコマンドを使用してoracle-spatial-graph-<version>.x86_64.rpmを実行します。

  • rpmの実行後は、/opt/oracle/oracle-spatial-graph/spatial/rasterで作成したディレクトリ構造にフォルダconsoleexamplesjlibgdalおよびtestsがあることを確認します。また、index.htmlはコンテンツを表し、javadoc.zipにはAPIのJavadocがあります。

1.5.3.2 その他のディストリビューションのImage Processing Frameworkのインストール
  1. 「Cartographic Projections Libraryの取得およびコンパイル」で説明されているように、ユーザーがlibproj.so (Proj.4) Cartographic Projections Libraryにアクセスできるようにします。
  2. リソース・マネージャ・ノードでは、/opt/oracle/oracle-spatial-graph/spatial/raster/gdaldataフォルダを次のようにSHARED_FOLDERにコピーします。

    cp -R /opt/oracle/oracle-spatial-graph/spatial/raster/gdal/data SHARED_FOLDER

  3. このジョブ実行に関連するすべてのユーザーの書込みアクセス権とともに、ALL_ACCESS_FOLDERにディレクトリSHARED_FOLDERを作成します。ジョブ結果は書込みアクセス権を持つyarnユーザーによって書き込まれるため、このユーザーも考慮します。この構成には、グループ・アクセスを使用できます。

    共有フォルダに移動します。

    cd SHARED_FOLDER

    新しいディレクトリを作成します。

    mkdir ALL_ACCESS_FOLDER

    書込みアクセス権を提供します。

    chmod 777 ALL_ACCESS_FOLDER

  4. /opt/oracle/oracle-spatial-graph/spatial/raster/examplesdataフォルダをALL_ACCESS_FOLDERにコピーします。

    cp -R /opt/oracle/oracle-spatial-graph/spatial/raster/examples/data ALL_ACCESS_FOLDER

  5. 次のように、data/xmlsフォルダに書込みアクセス権を提供します。または、testsやexamplesなど、ジョブを実行するユーザーに書込みアクセスがあることを確認します。

    chmod 777 ALL_ACCESS_FOLDER/data/xmls/

1.5.4 Image Processing Frameworkのインストール後の検証

次の検証操作を実行するために複数のテスト・スクリプトが用意されています。

  • イメージ・ロード機能のテスト

  • イメージ処理機能のテスト

  • 地図代数演算およびDEMでの傾斜計算の処理クラスのテスト

  • モザイク・プロセスのない単一のラスターのイメージ処理の検証(マッピング・フェーズ内の陰影起伏を計算するユーザー指定の機能が含まれます)。

  • マスク操作を使用した2つのラスターの処理のテスト

これらのスクリプトを実行して、イメージ処理フレームワークが正常にインストールされたことを検証します。

クラスタのセキュリティが有効である場合、現在のユーザーがprincsリストに含まれており、有効なKerberosチケットを所有していることを確認してください。

ユーザーがALL_ACCESS_FOLDERへの書込みアクセス権を持ち、このディレクトリの所有者グループに属していることを確認してください。Big Data Applianceのリソース・マネージャ・ノードでジョブを実行することをお薦めします。ジョブを別のノードで実行する場合、デフォルトはhadoopグループになります。

GDALが適切に機能するように、$LD_LIBRARY_PATHを使用してライブラリを使用可能にする必要があります。ジョブを実行する前に、共有ライブラリ・パスがシェル・ウィンドウに適切に設定されていることを確認してください。たとえば:

export LD_LIBRARY_PATH=$ALLACCESSDIR/gdal/native
1.5.4.1 イメージ・ロードのテスト・スクリプト

このスクリプトでは、6つのテスト・ラスターのセットをHDFSのohiftestフォルダにロードしますが、そのうち3つのラスターはバイト・データ型と3つの帯域、1つのラスター(DEM)はfloat32データ型と1つの帯域、および2つのラスターはint32データ型と1つの帯域です。OBDA環境にはパラメータは不要であり、OBDA以外の環境では、ALL_ACCESS_FOLDER値のあるパラメータが1つ必要です。

内部的には、ジョブによってロード対象のラスターごとに分割が作成されます。分割サイズはブロック・サイズ構成によって決まります。たとえば、ブロック・サイズが64MB以下と構成されると、4つのマッパーが実行されます。その結果、ラスターがHDFSでロードされ、対応するサムネイルが作成され、視覚化されます。サムネイルを視覚化するには外部イメージ・エディタが必要であり、これらのサムネイルの出力パスは、ジョブの完了時にユーザーに表示されます。

テスト・スクリプトは次の場所にあります。

/opt/oracle/oracle-spatial-graph/spatial/raster/tests/runimageloader.sh

ODBA環境の場合は、次を入力します。

./runimageloader.sh

ODBA以外の環境の場合は、次を入力します。

./runimageloader.sh ALL_ACCESS_FOLDER

実行が完了すると、ファイルのある場所を示すHDFS内のパス(このパスはALL_ACCESS_FOLDERの定義によって異なります)、およびHDFSに作成されたイメージとサムネイルのリストを示すメッセージGENERATED OHIF FILES ARE LOCATED IN HDFS UNDERが表示されます。出力には次が含まれます。

“THUMBNAILS CREATED ARE:
----------------------------------------------------------------------
total 13532
drwxr-xr-x 2 yarn yarn 4096 Sep 9 13:54 .
drwxr-xr-x 3 yarn yarn 4096 Aug 27 11:29 ..
-rw-r--r-- 1 yarn yarn 3214053 Sep 9 13:54 hawaii.tif.ohif.tif
-rw-r--r-- 1 yarn yarn 3214053 Sep 9 13:54 inputimageint32.tif.ohif.tif
-rw-r--r-- 1 yarn yarn 3214053 Sep 9 13:54 inputimageint32_1.tif.ohif.tif
-rw-r--r-- 1 yarn yarn 3214053 Sep 9 13:54 kahoolawe.tif.ohif.tif
-rw-r--r-- 1 yarn yarn 3214053 Sep 9 13:54 maui.tif.ohif.tif
-rw-r--r-- 1 yarn yarn 4182040 Sep 9 13:54 NapaDEM.tif.ohif.tif
YOU MAY VISUALIZE THUMBNAILS OF THE UPLOADED IMAGES FOR REVIEW FROM THE FOLLOWING PATH:

インストールと構成が正常に終了しなかった場合は、出力は生成されず、次のようなメッセージが表示されます。

NOT ALL THE IMAGES WERE UPLOADED CORRECTLY, CHECK FOR HADOOP LOGS

マッパーとリデューサの実行に必要なメモリーの量は、構成されているHDFSのブロック・サイズによって異なります。デフォルトでは、1GBのメモリーがJavaに割り当てられていますが、この値および他のプロパティは、このテスト・ディレクトリに含まれるimagejob.propファイル内で変更できます。

1.5.4.2 Image Processorテスト・スクリプト(モザイク化)

このスクリプトでは、ハワイ諸島の3つのソース・ラスターとその3つをすべて含む座標のいくつかを設定して、プロセッサ・ジョブを実行します。このジョブでは、これらの座標に基づいてモザイクを作成し、その結果のラスターには、3つのラスターが1つにまとめられます。

runimageloader.shが前提条件として実行されるため、ソース・ラスターはHDFSにあります。バイト・データ型の3つの帯域ラスターがあります。

OBDA環境にはパラメータは不要であり、OBDA以外の環境では、ALL_ACCESS_FOLDER値のある"-s"パラメータが1つ必要です。

また、出力をHDFSに格納する場合は、"-o"パラメータを使用して、モザイク出力を格納するHDFSフォルダを設定します。

内部的に、ジョブは構成入力のxmlで指定されている座標を使用して四角形をフィルタ処理し、必要な四角形のみをマッパー上で処理するためフェーズが減少し、そのすべてを最終的なモザイク・ラスターにまとめられます。

テスト・スクリプトは次の場所にあります。

/opt/oracle/oracle-spatial-graph/spatial/raster/tests/runimageprocessor.sh

ODBA環境の場合は、次を入力します。

./runimageprocessor.sh

ODBA以外の環境の場合は、次を入力します。

./runimageprocessor.sh -s ALL_ACCESS_FOLDER

実行が成功したら、EXPECTED OUTPUT FILE IS: ALL_ACCESS_FOLDER/processtest/hawaiimosaic.tifというメッセージが、出力モザイク・ファイルへのパスとともに表示されます。出力には次が含まれます。

EXPECTED OUTPUT FILE IS: ALL_ACCESS_FOLDER/processtest/hawaiimosaic.tif
total 9452
drwxrwxrwx 2 hdfs    hdfs    4096 Sep 10 09:12 .
drwxrwxrwx 9 zherena dba     4096 Sep  9 13:50 ..
-rwxrwxrwx 1 yarn    yarn 4741101 Sep 10 09:12 hawaiimosaic.tif

MOSAIC IMAGE GENERATED
----------------------------------------------------------------------
YOU MAY VISUALIZE THE MOSAIC OUTPUT IMAGE FOR REVIEW IN THE FOLLOWING PATH: ALL_ACCESS_FOLDER/processtest/hawaiimosaic.tif”

インストールと構成が正常に終了しなかった場合は、出力は生成されず、次のようなメッセージが表示されます。

MOSAIC WAS NOT SUCCESSFULLY CREATED, CHECK HADOOP LOGS TO REVIEW THE PROBLEM

HDFSでの出力記憶域をテストするには、次のコマンドを使用します

ODBA環境の場合は、次を入力します。

./runimageprocessor.sh -o hdfstest

ODBA以外の環境の場合は、次を入力します。

./runimageprocessor.sh -s ALL_ACCESS_FOLDER -o hdfstest
1.5.4.3 単一Image Processorテスト・スクリプト

このスクリプトは、単一ラスターのプロセッサ・ジョブを実行します。この場合は、ナパ・バレー北部のDEMソース・ラスターです。このジョブの目的は、マッピング・フェーズ用として構成されているユーザー処理クラスを使用して完全な入力を処理することです。このクラスは、DEMの陰影起伏を計算し、これが出力ファイルに設定されます。ここではモザイク操作は実行されません。

ソース・ラスターがHDFS内に存在するように、runimageloader.shを前提条件として実行する必要があります。これは、float 32データ型のDEMラスター1つの帯域です。

OBDA環境にはパラメータは不要であり、OBDA以外の環境では、ALL_ACCESS_FOLDER値のある"-s"パラメータが1つ必要です。

テスト・スクリプトは次の場所にあります。

/opt/oracle/oracle-spatial-graph/spatial/raster/tests/runsingleimageprocessor.sh

ODBA環境の場合は、次を入力します。

./runsingleimageprocessor.sh

ODBA以外の環境の場合は、次を入力します。

./runsingleimageprocessor.sh -s ALL_ACCESS_FOLDER

実行が成功したら、EXPECTED OUTPUT FILE: ALL_ACCESS_FOLDER/processtest/NapaSlope.tifというメッセージが、出力DEMファイルへのパスとともに表示されます。出力には次が含まれます。

EXPECTED OUTPUT FILE: ALL_ACCESS_FOLDER/processtest/NapaDEM.tif
total 4808
drwxrwxrwx 2 hdfs    hdfs    4096 Sep 10 09:42 .
drwxrwxrwx 9 zherena dba     4096 Sep  9 13:50 ..
-rwxrwxrwx 1 yarn    yarn 4901232 Sep 10 09:42 NapaDEM.tif
IMAGE GENERATED
----------------------------------------------------------------------

YOU MAY VISUALIZE THE OUTPUT IMAGE FOR REVIEW IN THE FOLLOWING PATH: ALL_ACCESS_FOLDER/processtest/NapaDEM.tif”

インストールと構成が正常に終了しなかった場合は、出力は生成されず、次のようなメッセージが表示されます。

IMAGE WAS NOT SUCCESSFULLY CREATED, CHECK HADOOP LOGS TO REVIEW THE PROBLEM
1.5.4.4 Image Processor DEMテスト・スクリプト

このスクリプトはナパ・バレー北部のDEMソース・ラスター、およびそれを取り囲む座標を使用してプロセッサ・ジョブを実行します。このジョブでは、これらの座標に基づいてモザイクを作成し、モザイク構成XMLで処理クラスを設定して、その傾斜も計算します。

runimageloader.shが前提条件として実行されるため、ソース・ラスターはHDFSにあります。これは、float 32データ型のDEMラスター1つの帯域です。

OBDA環境にはパラメータは不要であり、OBDA以外の環境では、ALL_ACCESS_FOLDER値のある"-s"パラメータが1つ必要です。

テスト・スクリプトは次の場所にあります。

/opt/oracle/oracle-spatial-graph/spatial/raster/tests/runimageprocessordem.sh

ODBA環境の場合は、次を入力します。

./runimageprocessordem.sh

ODBA以外の環境の場合は、次を入力します。

./runimageprocessordem.sh -s ALL_ACCESS_FOLDER

実行が成功したら、EXPECTED OUTPUT FILE: ALL_ACCESS_FOLDER/processtest/NapaSlope.tifというメッセージが、傾斜出力ファイルへのパスとともに表示されます。出力には次が含まれます。

EXPECTED OUTPUT FILE: ALL_ACCESS_FOLDER/processtest/NapaSlope.tif
total 4808
drwxrwxrwx 2 hdfs    hdfs    4096 Sep 10 09:42 .
drwxrwxrwx 9 zherena dba     4096 Sep  9 13:50 ..
-rwxrwxrwx 1 yarn    yarn 4901232 Sep 10 09:42 NapaSlope.tif
MOSAIC IMAGE GENERATED
----------------------------------------------------------------------

YOU MAY VISUALIZE THE MOSAIC OUTPUT IMAGE FOR REVIEW IN THE FOLLOWING PATH: ALL_ACCESS_FOLDER/processtest/NapaSlope.tif”

インストールと構成が正常に終了しなかった場合は、出力は生成されず、次のようなメッセージが表示されます。

MOSAIC WAS NOT SUCCESSFULLY CREATED, CHECK HADOOP LOGS TO REVIEW THE PROBLEM

また、“if”代数関数もテストして、このラスターで2500を超える値のあるピクセルすべてを、コマンドラインで“–c”フラグを使用して設定した値で置き換えます。たとえば:

ODBA環境の場合は、次を入力します。

./runimageprocessordem.sh –c 8000

ODBA以外の環境の場合は、次を入力します。

./runimageprocessordem.sh -s ALL_ACCESS_FOLDER –c 8000

出力ファイルを視覚化すると、単純な傾斜計算と変更後の出力に注目し、ピクセル値が2500を超えているエリアがより鮮明になることを確認できます。

1.5.4.5 複数のラスター操作テスト・スクリプト

このスクリプトは、米国カリフォルニア州ナパ・バレー北部の非常に小さい地域を網羅する2つのラスターのプロセッサ・ジョブを実行します。

これらのラスターは同じMBR、ピクセル・サイズ、SRIDおよびデータ型を持ち、これらはすべて、複雑な複数のラスター操作処理に必要です。このジョブの目的は、2番目のラスターの値がマスク・リストに含まれるかどうかを検証するためにこのラスター内のすべてのピクセルを確認するmask操作を使用して両方のラスターを処理することです。そうである場合、出力ラスターはこの出力セルの最初のラスターのピクセル値を持ちます。そうでない場合、ゼロ(0)値が設定されます。ここではモザイク操作は実行されません。

runimageloader.shが前提条件として実行されるため、ソース・ラスターはHDFSにあります。これらは、int32データ型のラスターの1つの帯域です。

OBDA環境にはパラメータは不要です。OBDA以外の環境では、ALL_ACCESS_FOLDER値のある-sパラメータが1つ必要です。

テスト・スクリプトは次の場所にあります。

/opt/oracle/oracle-spatial-graph/spatial/raster/tests/runimageprocessormultiple.sh

ODBA環境の場合は、次を入力します。

./runimageprocessormultiple.sh

ODBA以外の環境の場合は、次を入力します。

./runimageprocessormultiple.sh -s ALL_ACCESS_FOLDER

実行が成功したら、EXPECTED OUTPUT FILE: ALL_ACCESS_FOLDER/processtest/MaskInt32Rasters.tifというメッセージが、マスク出力ファイルへのパスとともに表示されます。出力には次が含まれます。

EXPECTED OUTPUT FILE: ALL_ACCESS_FOLDER/processtest/MaskInt32Rasters.tif
total 4808
drwxrwxrwx 2 hdfs    hdfs    4096 Sep 10 09:42 .
drwxrwxrwx 9 zherena dba     4096 Sep  9 13:50 ..
-rwxrwxrwx 1 yarn    yarn 4901232 Sep 10 09:42 MaskInt32Rasters.tif
IMAGE GENERATED
----------------------------------------------------------------------

YOU MAY VISUALIZE THE OUTPUT IMAGE FOR REVIEW IN THE FOLLOWING PATH: ALL_ACCESS_FOLDER/processtest/MaskInt32Rasters.tif”

インストールと構成が正常に終了しなかった場合は、出力は生成されず、次のようなメッセージが表示されます。

IMAGE WAS NOT SUCCESSFULLY CREATED, CHECK HADOOP LOGS TO REVIEW THE PROBLEM

1.6 Oracle Big Data SpatialViewer Webアプリケーションのインストール

Oracle Big Data SpatialViewer Webアプリケーション(SpatialViewer)をインストールするには、このトピックの手順を実行します。

1.6.1 SpatialViewerの前提

次の前提がSpatialViewerのインストールと構成に適用されます。

  • ここで説明するAPIおよびジョブを、Cloudera CDH6または同様のHadoop環境で実行します。

  • ユーザーの環境に、Java 8以降のバージョンを用意しておきます。

  • Big Data Spatial Image Processing Frameworkのインストールおよび構成で説明されているように、イメージ処理フレームワークがインストールされています

1.6.2 Oracle Big Data ApplianceでのSpatialViewerのインストール

次のように、Big Data ApplianceにSpatialViewerをインストールできます

  1. 次のスクリプトを実行します。

    sudo /opt/oracle/oracle-spatial-graph/spatial/configure-server/install-bdsg-consoles.sh
  2. 次のコマンドの1つを使用してWebアプリケーションを起動します(2番目のコマンドを使用すると、ログを表示できます)。

    sudo service bdsg start
    sudo /opt/oracle/oracle-spatial-graph/spatial/web-server/start-server.sh

    エラーが発生した場合、/opt/oracle/oracle-spatial-graph/spatial/configure-serverにあるREADMEファイルを参照してください。

  3. http://<oracle_big_data_spatial_vector_console>:8045/spatialviewer/を開きます

  4. インストール後にアクティブ・ノードが変更された場合、またはKerberosが有効である場合、「Oracle Big Data ApplianceでのSpatialViewerの構成」で説明されているように、構成ファイルを更新します。

  5. オプションで、サンプル・データ(他のトピックの例で使用されているもの)をHDFSにアップロードします。

    sudo -u hdfs hadoop fs -mkdir /user/oracle/bdsg
    sudo -u hdfs hadoop fs -put /opt/oracle/oracle-spatial-graph/spatial/vector/examples/data/tweets.json /user/oracle/bdsg/
    

1.6.3 その他システム(Big Data Appliance以外)のSpatialViewerのインストール

「Oracle Big Data ApplianceでのSpatialViewerのインストール」で説明されている手動構成のステップに従います。

次に、「その他システム(Big Data Appliance以外)のSpatialViewerの構成」で説明されているように、構成を変更します

1.6.4 Oracle Big Data ApplianceでのSpatialViewerの構成

Oracle Big Data ApplianceでSpatialViewerを構成するには、次のステップに従います。

  1. コンソールhttp://<oracle_big_data_spatial_vector_console>:8045/spatialviewer/?root=swadminを開きます

  2. 必要に応じて、一般構成を変更します。

    • ローカル作業ディレクトリ: SpatialViewerローカル作業ディレクトリ。絶対パス。デフォルトのディレクトリ/usr/oracle/spatialviewerは、SpatialViewerのインストール時に作成されます。

    • HDFS作業ディレクトリ: SpatialViewer HDFS作業ディレクトリ。デフォルトのディレクトリ/user/oracle/spatialviewerは、SpatialViewerのインストール時に作成されます。

    • Hadoop構成ファイル: Hadoop構成ディレクトリ。デフォルトでは、/etc/hadoop/confです

      この値を変更した場合は、サーバーを再起動する必要があります。

    • Spark構成ファイル: Spark構成ディレクトリ。デフォルトでは、/etc/spark/confです

      この値を変更した場合は、サーバーを再起動する必要があります。

    • eLocation URL: eLocationの背景地図を取得するために使用されるURL。デフォルトでは、http://elocation.oracle.comです

    • Kerberosキータブ: Kerberosが有効である場合、キータブ・ファイルが含まれるファイルへのフル・パスを入力します。

    • ログの表示: 必要に応じて、「Spatial Jobs」画面でジョブの表示を無効にします。ログがデフォルトの形式でない場合、この表示を無効にします。デフォルトの形式は、Date LogLevel LoggerName: LogMessageです

      日付は、デフォルトの形式(yyyy-MM-dd HH:mm:ss,SSS)である必要があります。たとえば、2012-11-02 14:34:02,781です。

      ログが表示されず、「Display logs」フィールドが「Yes」に設定されている場合、yarn-site.xml内のyarn.log-aggregation-enabletrueに設定されていることを確認します。また、Hadoopジョブ構成パラメータyarn.nodemanager.remote-app-log-dirおよびyarn.nodemanager.remote-app-log-dir-suffixyarn-site.xmlの場合と同じ値に設定されていることも確認してください。

  3. 必要に応じて、ラスター構成を変更します。

    • 共有ディレクトリ: 別のノードとの間の読取りおよび書込みに使用するディレクトリ。共有され、最大の権限があるか、少なくともHadoopユーザー・グループに存在する必要があります。

    • ネットワーク・ファイル・システム・マウント・ポイント: 共有フォルダを表示でき、個別にアクセスできるNFSマウント・ポイント。非分散環境を使用している場合、空白にできます。

    • GDALディレクトリ: ネイティブGDALのインストール・ディレクトリ。すべてのクラスタ・ノードにアクセス可能である必要があります。

      この値を変更した場合は、サーバーを再起動する必要があります。

    • 共有GDALデータ・ディレクトリ: GDAL共有データ・フォルダ。共有ディレクトリである必要があります。(その他のディストリビューション(Oracle Big Data Appliance以外)のImage Processing Frameworkのインストールの手順を参照してください。)

  4. 必要に応じて、Hadoop構成を変更します。

  5. 必要に応じて、Spark構成を変更します。ラスター・プロセッサでは、追加の構成詳細を指定する必要があります。

    • spark.driver.extraClassPath, spark.executor.extraClassPath: これらのキーを使用して、Hiveライブラリのインストール環境を指定します。例: /usr/lib/hive/lib/*

    • spark.kryoserializer.buffer.max: データ・シリアライズのメモリーを入力します。例: 160m

  6. Kerberosが有効である場合、次のパラメータを追加することが必要な場合があります。

    • spark.yarn.keytab: プリンシパルのキータブが含まれるファイルへのフル・パス

    • spark.yarn.principal: Kerberosにログインするために使用されるプリンシパル。通常のKerberos V5プリンシパルの形式は、primary/instance@REALMです。

  7. Linuxシステムでは、セキュアなコンテナ・エグゼキュータをLinuxContainerExecutorに変更する必要がある場合があります。そのためには、次のパラメータを設定します。

    • yarn.nodemanager.container-executor.classorg.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutorに設定します。

    • yarn.nodemanager.linux-container-executor.grouphadoopに設定します。

  8. ユーザーがキータブ・ファイルを読み取ることができることを確認します。

1.6.5 その他システム(Big Data Appliance以外)のSpatialViewerの構成

その他システムでSpatialViewerをインストールする前に、「その他のディストリビューション(Oracle Big Data Appliance以外)のImage Processing Frameworkのインストール」に指定されているとおり、Image Processing Frameworkをインストールする必要があります。

その後、「Oracle Big Data ApplianceでのSpatialViewerの構成」で説明したステップを実行します。

また、HadoopとSparkの構成を変更し、HadoopとSparkのインストール環境に応じてHadoopのconf.ディレクトリおよびSparkのconf.ディレクトリの値を置き換えます。

1.7 非BDA環境へのBig Data Spatial and Graphのインストール

Oracle Big Data Appliance以外の環境にBig Data Spatial and Graphをインストールする場合は、いくつかのアクションが必要になることがあります。

Big Data Spatial and Graph (BDSG) 2.5.3以降、Cloudera CDHとの対話に必要なClouderaから提供されるサード・パーティのライブラリは、BDSGディストリビューションで配布されなくなりました。このトピックでは、BDSGでCloudera CDHサポートを有効にするために必要なアクションについて説明します。

Oracle Big Data Appliance (BDA)では、BDSGは以前のBDSGリリースと同様に、Cloudera CDHとすぐに連携して動作するよう事前構成されています。そのため、BDA環境では追加のインストール・ステップは必要ありません。

1.7.1 BDSGの自動インストール

.rpmのインストール後、次のスクリプトをrootとして実行することで自動インストールを試行できます。

/opt/oracle/oracle-spatial-graph/property_graph/configure-hadoop.sh

このスクリプトには、Hadoopのディストリビューションおよびバージョンに関するの多くの前提が含まれています。スクリプト内のいずれかのコマンドが失敗した場合は、手動インストールを実行してください。

1.7.2 BDSGの手動インストール

手動インストールを実行するには、環境に関連するサブトピックを使用します。

HDFS

BDSGプロパティ・グラフのインストール・ディレクトリに移動します。

cd /opt/oracle/oracle-spatial-graph/property_graph

Hadoopのインストール・ベース・パスを指すようにHADOOP_HOMEを設定します。たとえば:

HADOOP_HOME=/scratch/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678

必要なHDFSライブラリ(およびその依存関係)をhadoop/hdfsディレクトリにコピーします。(前述のJARファイルの正確な場所およびバージョンは、HadoopのディストリビューションおよびHadoopのバージョンによって異なる場合があります。そのため、クラスタ・インストールに合わせてこれらの入力パスのうちのいくつかを変更することが必要になる場合があります。)

cp $HADOOP_HOME/lib/hadoop/hadoop-auth-3.0.0-cdh6.0.1.jar hadoop/hdfs/
cp $HADOOP_HOME/lib/hadoop/hadoop-common-3.0.0-cdh6.0.1.jar hadoop/hdfs/
cp $HADOOP_HOME/lib/hadoop-hdfs/hadoop-hdfs-3.0.0-cdh6.0.1.jar hadoop/hdfs/
cp $HADOOP_HOME/lib/hadoop-hdfs/hadoop-hdfs-client-3.0.0-cdh6.0.1.jar hadoop/hdfs/
cp $HADOOP_HOME/lib/hadoop-hdfs/lib/commons-cli-1.2.jar hadoop/hdfs/
cp $HADOOP_HOME/lib/hadoop-hdfs/lib/commons-collections-3.2.2.jar hadoop/hdfs/
cp $HADOOP_HOME/lib/hadoop-hdfs/lib/commons-lang-2.6.jar hadoop/hdfs/
cp $HADOOP_HOME/lib/hadoop-hdfs/lib/commons-logging-1.1.3.jar hadoop/hdfs/
cp $HADOOP_HOME/lib/hadoop-hdfs/lib/stax2-api-3.1.4.jar hadoop/hdfs/
cp $HADOOP_HOME/lib/hadoop-hdfs/lib/woodstox-core-5.0.3.jar hadoop/hdfs/
cp $HADOOP_HOME/lib/hadoop-hdfs/lib/htrace-core4-4.1.0-incubating.jar hadoop/hdfs/
cp $HADOOP_HOME/lib/hadoop-hdfs/lib/protobuf-java-2.5.0.jar hadoop/hdfs/

PGXサーバーがHDFSにアクセスできるようにするには、ライブラリを.warファイルにコピーする必要もあります。

mkdir -p WEB-INF/lib
cp /opt/oracle/oracle-spatial-graph/property_graph/hadoop/hdfs/* WEB-INF/lib/
jar -uvf /opt/oracle/oracle-spatial-graph/property_graph/pgx/webapp/pgx-webapp-<version>.war WEB-INF/lib/
rm -r WEB-INF

次に、./pgx/bin/start-serverスクリプトを実行するか、WARファイルをアプリケーション・サーバーにデプロイして、サーバーを起動します。

Yarn

BDSGプロパティ・グラフのインストール・ディレクトリに移動します。

cd /opt/oracle/oracle-spatial-graph/property_graph

HadoopディストリビューションのZookeeper JARファイルへのパス(たとえば、$HADOOP_HOME/lib/zookeeper/zookeeper-3.4.5-cdh6.0.1.jar)を見つけます。次に、次のスクリプトを実行して、Yarnと連携するようにBDSGインストールを構成します。

TMP_DIR=$(mktemp -d)
cd "${TMP_DIR}"
jar xf "${HADOOP_HOME}/lib/zookeeper/zookeeper-3.4.5-cdh6.0.1.jar"
rm META-INF/MANIFEST.MF
jar -uf /opt/oracle/oracle-spatial-graph/property_graph/hadoop/yarn/pgx-yarn-<version>.jar .
rm -rf "${TMP_DIR}"

HBase

BDSGプロパティ・グラフのインストール・ディレクトリに移動します。

cd /opt/oracle/oracle-spatial-graph/property_graph

実行に必要なすべてのHBaseライブラリ(およびその依存関係)を保持するために、hadoop/hbaseディレクトリを作成します。

mkdir -p hadoop/hbase

Hadoopのインストール・ベース・パスを指すようにHADOOP_HOMEを設定します。たとえば:

HADOOP_HOME=/scratch/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678

必要なHDFSライブラリ(およびその依存関係)をhadoop/hdfsディレクトリにコピーします。(前述のJARファイルの正確な場所およびバージョンは、HadoopのディストリビューションおよびHadoopのバージョンによって異なる場合があります。そのため、クラスタ・インストールに合わせてこれらの入力パスのうちのいくつかを変更することが必要になる場合があります。)

cp $HADOOP_HOME/lib/hbase/hbase-client-2.0.0-cdh6.0.1.jar hadoop/hbase
cp $HADOOP_HOME/lib/hbase/hbase-common-2.0.0-cdh6.0.1.jar hadoop/hbase
cp $HADOOP_HOME/lib/hbase/hbase-protocol-2.0.0-cdh6.0.1.jar hadoop/hbase
cp $HADOOP_HOME/lib/hbase/hbase-shaded-protobuf-2.1.0.jar hadoop/hbase
cp $HADOOP_HOME/lib/hbase/lib/shaded-clients/hbase-shaded-client-2.0.0-cdh6.0.1.jar hadoop/hbase
cp $HADOOP_HOME/lib/hadoop/hadoop-common-3.0.0-cdh6.0.1.jar hadoop/hbase
cp $HADOOP_HOME/lib/hadoop-hdfs/hadoop-hdfs-3.0.0-cdh6.0.1.jar hadoop/hbase
cp $HADOOP_HOME/lib/zookeeper/zookeeper-3.4.5-cdh6.0.1.jar hadoop/hbase
cp $HADOOP_HOME/lib/hbase/lib/protobuf-java-2.5.0.jar hadoop/hbase
cp $HADOOP_HOME/lib/hbase/lib/metrics-core-3.2.1.jar hadoop/hbase
cp $HADOOP_HOME/lib/hbase/lib/jettison-1.3.8.jar hadoop/hbase
cp $HADOOP_HOME/lib/hbase/lib/stax2-api-3.1.4.jar hadoop/hbase
cp $HADOOP_HOME/lib/hbase/lib/woodstox-core-5.0.3.jar hadoop/hbase
cp $HADOOP_HOME/lib/hbase/lib/client-facing-thirdparty/htrace-core4-4.2.0-incubating.jar hadoop/hbase
cp $HADOOP_HOME/lib/hbase/lib/client-facing-thirdparty/audience-annotations-0.5.0.jar hadoop/hbase

PGXサーバーがHBaseにアクセスできるようにするには、HBaseライブラリを.warファイルにコピーする必要もあります。

mkdir -p WEB-INF/lib
cp /opt/oracle/oracle-spatial-graph/property_graph/hadoop/hbase/* WEB-INF/lib/
jar -uvf /opt/oracle/oracle-spatial-graph/property_graph/pgx/webapp/pgx-webapp-<version>.war WEB-INF/lib/
rm -r WEB-INF

次に、./pgx/bin/start-serverスクリプトを実行するか、WARファイルをアプリケーション・サーバーにデプロイして、サーバーを起動します。

1.7.3 BDSG環境の構成

環境を構成するには、環境に関連するサブトピックを使用します。

HDFS

HADOOP_CONF_DIR環境変数がクラスタのHDFS構成ディレクトリを指し示すよう指定します。たとえば:

export HADOOP_CONF_DIR=/etc/hadoop/conf

シェルを起動する前に、前のステップのライブラリを指すようにBDSG_CLASSPATH環境変数を設定します。たとえば:

export BDSG_CLASSPATH=/opt/oracle/oracle-spatial-graph/property_graph/hadoop/hdfs/*

次に、シェルを通常どおり起動し、hdfsパス接頭辞を使用してHDFSからデータにアクセスします。

cd /opt/oracle/oracle-spatial-graph/property_graph
./pgx/bin/pgx
[WARNING] BDSG_CLASSPATH environment will be prepended to PGX classpath. If this is not intended, do 'unset BDSG_CLASSPATH' and restart.
 
PGX Shell 3.1.3
type :help for available commands
12:01:30,824 INFO Ctrl$1 - >>> PGX engine 3.1.3 running.
variables instance, session and analyst ready to use
pgx> g = session.readGraphWithProperties('hdfs:/tmp/data/connections.edge_list.json')
==> PgxGraph[name=connections,N=78,E=164,created=1543176112779]

Yarn

次のヘルパー・スクリプトを実行して、Yarnデプロイメントに必要なアーティファクトを任意のHDFSディレクトリにコピーします。

./pgx/scripts/install-pgx-hdfs.sh <dest-dir>

ここで、たとえば<dest-dir>hdfs:/binaries/pgxとすることができます。

hdfsバイナリがPATH環境変数にあることを確認します。

スクリプトが終了したら、インストール済バイナリへのパスおよびクラスタの正しいZookeeper接続文字列が含まれるようにpgx/conf/yarn.confを更新してください。

HBase

JavaアプリケーションでDALを使用してApache HBaseのプロパティ・グラフにアクセスする手順は、次のとおりです。

  1. BDSG_HOME環境変数をプロパティ・グラフのインストール・ディレクトリに設定します。たとえば:
    export BDSG_HOME=/opt/oracle/oracle-spatial-graph/property_graph
  2. BDSG_CLASSPATH環境変数をhadoop/hbaseディレクトリに設定します。たとえば:
    export BDSG_CLASSPATH=/opt/oracle/oracle-spatial-graph/property_graph/hadoop/hbase/*:$BDSG_CLASSPATH
  3. BDSG_CLASSPATH環境変数をhadoop/hbaseディレクトリに設定します。たとえば:
    javac -classpath $BDSG_HOME/lib/'*':$BDSG_CLASSPATH filename.java
  4. 次のようにコンパイル済コードを実行して、Javaアプリケーションを実行します。
    java -classpath ./:$BDSG_HOME/lib/'*':$BDSG_CLASSPATH filename args

GroovyコンソールでDALを使用してApache HBaseのプロパティ・グラフにアクセスする手順は、次のとおりです。

  1. BDSG_CLASSPATH環境変数をhadoop/hbaseディレクトリに設定します。たとえば:
    export BDSG_CLASSPATH=/opt/oracle/oracle-spatial-graph/property_graph/hadoop/hbase/*:$BDSG_CLASSPATH
  2. 通常どおりシェルを起動し、OraclePropertyGraphインスタンスを使用してApache HBaseストレージからデータにアクセスします。

    Apache HBase 2.0からは、HConnectionインタフェースが非推奨のため、Connectionオブジェクトを使用してデータベースに接続します。

    cd /opt/oracle/oracle-spatial-graph/property_graph/dal/groovy
    sh gremlin-opg-hbase.sh
     
    --------------------------------
     
    opg-hbase> conf = HBaseConfiguration.create();
    ==>hbase.rs.cacheblocksonwrite=false
    ==>...
    opg-hbase> conf.set("hbase.zookeeper.quorum", "localhost");
    ==>null
    opg-hbase> conf.set("hbase.zookeeper.property.clientPort","2181");
    ==>null
    opg-hbase> conn = ConnectionFactory.createConnection(conf);
    ==>hconnection-0x720653c2
    opg-hbase> opg=OraclePropertyGraph.getInstance(conf, conn, "connections");
    ==>oraclepropertygraph with name connections
    

1.7.4 Apache Lucene 7.0を使用したBDSGテキスト索引の管理

Apache Luceneを使用してプロパティ・グラフ・データのテキスト索引付けを管理する手順は、次のとおりです。

  1. BDSGプロパティ・グラフのインストール・ディレクトリに移動します。
    cd /opt/oracle/oracle-spatial-graph/property_graph
  2. 実行に必要なApache Lucene 7.0ライブラリ(およびその依存関係)をすべて保持するために、luceneディレクトリを作成します。
    mkdir lucene
  3. Hadoopのインストール・ベース・パスを指すようにHADOOP_HOMEを設定します。たとえば:
    HADOOP_HOME=/scratch/cloudera/parcels/CDH-6.0.1-1.c
  4. 必要なApache Luceneライブラリをluceneディレクトリにコピーします。
    cp $HADOOP_HOME/lib/search/lucene-core.jar lucene
    cp $HADOOP_HOME/lib/search/lucene-queryparser.jar lucene
    cp $HADOOP_HOME/lib/search/lucene-analyzers-common.jar lucene
    

Javaアプリケーションでのテキスト索引の管理

  1. BDSG_HOMEをプロパティ・グラフのインストール・ディレクトリに設定します。たとえば:
    export BDSG_HOME=/opt/oracle/oracle-spatial-graph/property_graph
  2. BDSG_CLASSPATHをluceneディレクトリに設定します。たとえば:
    export BDSG_CLASSPATH=/opt/oracle/oracle-spatial-graph/property_graph/lucene/*:$BDSG_CLASSPATH
  3. Javaコードをコンパイルします。たとえば:
    javac -classpath $BDSG_HOME/lib/'*':$BDSG_CLASSPATH filename.java
  4. コンパイル済コードを実行して、Javaアプリケーションを実行します。たとえば:
    java -classpath ./:$BDSG_HOME/lib/'*':$BDSG_CLASSPATH filename args

Groovyコンソールを使用したテキスト索引の管理

  1. BDSG_CLASSPATHをluceneディレクトリに設定します。たとえば:
    export BDSG_CLASSPATH=/opt/oracle/oracle-spatial-graph/property_graph/lucene/*:$BDSG_CLASSPATH
  2. 通常どおりシェルを起動し、OraclePropertyGraphインスタンスを使用して、Apache HBaseストレージに格納されているプロパティ・グラフのテキスト索引を作成します。たとえば:
    cd /opt/oracle/oracle-spatial-graph/property_graph/dal/groovy
    sh gremlin-opg-hbase.sh
     
    --------------------------------
     
    opg-hbase> conf = HBaseConfiguration.create();
    ==>hbase.rs.cacheblocksonwrite=false
    ==>...
    opg-hbase> dop=2;
    ==>2
    opg-hbase> conf.set("hbase.zookeeper.quorum", "localhost");
    ==>null
    opg-hbase> conf.set("hbase.zookeeper.property.clientPort","2181");
    ==>null
    opg-hbase> conn = ConnectionFactory.createConnection(conf);
    ==>hconnection-0x720653c2
    opg-hbase> opg=OraclePropertyGraph.getInstance(conf, conn, "connections");
    ==>oraclepropertygraph with name connections
    opg-hbase> indexParams = OracleIndexParameters.buildFS(dop /* number of directories */, dop /* number of connections used when indexing */, 10000 /* batch size before commit*/, 500000 /* commit size before Lucene commit*/, true /* enable datatypes */, "./lucene-index" /* index location */);
    ==>[parameter[search-engine,1], parameter[num-subdirectories,4], parameter[directory-type,FS_DIRECTORY], parameter[reindex-numConns,4], parameter[batch-size,10000], parameter[commit-batch-size,500000], parameter[values-as-strings,true], parameter[directory-location,[Ljava.lang.String;@5c1f6d57]]
    opg-hbase> opg.setDefaultIndexParameters(indexParams);
    ==>null
    opg-hbase> indexedKeys = new String[4]; indexedKeys[0] = "name"; indexedKeys[1] = "role"; indexedKeys[2] = "religion"; indexedKeys[3] = "country";
    ==>name
    ==>role
    ==>religion
    ==>country
    opg-hbase> opg.createKeyIndex(indexedKeys, Vertex.class);
    ==>null
    

1.7.5 SolrCloud 7.0を使用したBDSGテキスト索引の管理

Apache Luceneを使用してプロパティ・グラフ・データのテキスト索引付けを管理する手順は、次のとおりです。

  1. BDSGプロパティ・グラフのインストール・ディレクトリに移動します。
    cd /opt/oracle/oracle-spatial-graph/property_graph
  2. 実行に必要なApache Lucene 7.0ライブラリ(およびその依存関係)をすべて保持するために、solrcloudディレクトリを作成します。
    mkdir solrcloud
  3. Hadoopのインストール・ベース・パスを指すようにHADOOP_HOMEを設定します。たとえば:
    HADOOP_HOME=/scratch/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678
  4. 必要なSolrCloudライブラリをluceneディレクトリにコピーします。
    cp $HADOOP_HOME/lib/solr/solr-solrj-7.0.0-cdh6.0.1.jar solrcloud
     
    cp $HADOOP_HOME/lib/solr/lib/noggit-0.8.jar solrcloud
    cp $HADOOP_HOME/lib/solr/lib/httpmime-4.5.3.jar solrcloud
    cp $HADOOP_HOME/lib/search/lucene-core.jar solrcloud
    cp $HADOOP_HOME/lib/search/lucene-queryparser.jar solrcloud
    cp $HADOOP_HOME/lib/search/lucene-analyzers-common.jar solrcloud
    
  5. BDSG_CLASSPATHをsolrcloudディレクトリに設定します。たとえば:
    export BDSG_CLASSPATH=/opt/oracle/oracle-spatial-graph/property_graph/solrcloud/*:$BDSG_CLASSPATH

Javaアプリケーションでのテキスト索引の管理

  1. BDSG_HOMEをプロパティ・グラフのインストール・ディレクトリに設定します。たとえば:
    export BDSG_HOME=/opt/oracle/oracle-spatial-graph/property_graph
  2. BDSG_CLASSPATHをsolrcloudディレクトリに設定します。たとえば:
    export BDSG_CLASSPATH=/opt/oracle/oracle-spatial-graph/property_graph/solrcloud/*:$BDSG_CLASSPATH
  3. Javaコードをコンパイルします。たとえば:
    javac -classpath $BDSG_HOME/lib/'*':$BDSG_CLASSPATH filename.java
  4. コンパイル済コードを実行して、Javaアプリケーションを実行します。たとえば:
    java -classpath ./:$BDSG_HOME/lib/'*':$BDSG_CLASSPATH filename args

Groovyコンソールを使用したテキスト索引の管理

  1. BDSG_CLASSPATHをsolrcloudディレクトリに設定します。たとえば:
    export BDSG_CLASSPATH=/opt/oracle/oracle-spatial-graph/property_graph/solrcloud/*:$BDSG_CLASSPATH
  2. 通常どおりシェルを起動し、OraclePropertyGraphインスタンスを使用して、Apache HBaseストレージに格納されているプロパティ・グラフのテキスト索引を作成します。たとえば:
    cd /opt/oracle/oracle-spatial-graph/property_graph/dal/groovy
    sh gremlin-opg-hbase.sh
     
    --------------------------------
     
    opg-hbase> conf = HBaseConfiguration.create();
    ==>hbase.rs.cacheblocksonwrite=false
    ==>...
    opg-hbase> dop=2;
    ==>2
    opg-hbase> conf.set("hbase.zookeeper.quorum", "localhost");
    ==>null
    opg-hbase> conf.set("hbase.zookeeper.property.clientPort","2181");
    ==>null
    opg-hbase> conn = ConnectionFactory.createConnection(conf);
    ==>hconnection-0x720653c2
    opg-hbase> opg=OraclePropertyGraph.getInstance(conf, conn, "connections");
    ==>oraclepropertygraph with name connections
    opg-hbase> indexParams = OracleIndexParameters.buildSolr("opgconfig" /* solr config */, "localhost:2181/solr" /* solr server url */, "localhost:8983_solr" /* solr node set */, 15 /* zookeeper timeout in seconds */, 1 /* total number of shards */, 1 /* Replication factor */, 1 /* maximum number of shardsper node */, 4 /* dop used for scan */, 10000 /* batch size before commit */, 500000 /* commit size before SolrCloud commit */, 15 /* write timeout in seconds */);
    ==>[parameter[search-engine,0], parameter[config-name,opgconfig], parameter[solr-server-url,localhost:2181/solr], parameter[solr-admin-url,localhost:8983_solr], parameter[zk-timeout,15], parameter[replication-factor,1], parameter[num-shards,1], parameter[max-shards-per-node,1], parameter[reindex-numConns,4], parameter[batch-size,10000], parameter[commit-batch-size,500000], parameter[write-timeout,15]]
    opg-hbase> 
    opg-hbase> opg.setDefaultIndexParameters(indexParams);
    ==>null
     
     
    opg-hbase> indexedKeys = new String[4]; indexedKeys[0] = "name"; indexedKeys[1] = "role"; indexedKeys[2] = "religion"; indexedKeys[3] = "country";
    ==>name
    ==>role
    ==>religion
    ==>country
    opg-hbase> opg.createKeyIndex(indexedKeys, Vertex.class);
    ==>null
    

1.8 アップグレードに伴い必要となるアプリケーション・コードの変更

Apache HBaseおよびSolrCloudを最新バージョンにするなどのアップグレードによりアプリケーション・コードの変更が必要になる場合があります。

1.8.1 Apache HBase 1.xからApache HBase 2.xへのアップグレードによる変更

Big Data Spatial and Graph 2.5.3は、Apache HBaseを新しいバージョンにアップグレードしたCloudera CDH6をサポートしています。

プロパティ・グラフ・インスタンスの作成

Apache HBase 2.0では、HConnectionインタフェースは非推奨のため、データ・アクセス・レイヤーではデータベースへの接続に接続オブジェクトを使用する必要があります。次のコード・スニペットは、Apache HBase 2.0接続オブジェクトからOraclePropertyGraphインスタンスを作成する方法を示しています。

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.client.*;
  
...
  
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", szQuorum);
conf.set("hbase.zookeeper.property.clientPort","2181");
Connection conn = ConnectionFactory.createConnection(conf);
OraclePropertyGraph opg = OraclePropertyGraph.getInstance(conf, hconn, szGraphName);

頂点/エッジのパラレル取得

次のコード・スニペットは、HBaseへの接続の配列を開き(Apache HBase 2.xからのConnection/ConnectionFactory APIを使用)、開いた接続を使用してパラレル問合せを実行してすべての頂点およびエッジを取得します。getVerticesPartitioned/getEdgesPartitionedメソッドの呼出し数は、分割の合計数と使用される接続の数によって制御されます。

int dop = 4;
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", szQuorum);
conf.set("hbase.zookeeper.property.clientPort","2181");
Connection conn = ConnectionFactory.createConnection(conf);
OraclePropertyGraph opg = OraclePropertyGraph.getInstance(conn, "connections");
 
// Create connections used in parallel query
Connection[] conns= new Connection[dop];
for (int i = 0; i < dop; i++) { 
  Configuration conf_new = HBaseConfiguration.create(opg.getConfiguration());
  conns[i] = ConnectionFactory.createConnection(conf_new); 
}
 
long lCountV = 0;
// Iterate over all the vertices¿ splits to count all the vertices
for (int split = 0; split < opg.getVertexTableSplits(); split += dop) { 
  Iterable<Vertex>[] iterables = opg.getVerticesPartitioned(conns /* Connection array */, 
                                                            true /* skip store to cache */, 
                                                            split /* starting split */); 
 
 
  for (Iterable<Vertex> iterable : iterables) {
    lCountV += OraclePropertyGraphUtils.size(iterable); /* consume iterables */
  }
}
 
// Count all vertices
System.out.println("Vertices found using parallel query: " + lCountV);
 
long lCountE = 0;
// Iterate over all the edges¿ splits to count all the edges
for (int split = 0; split < opg.getEdgeTableSplits();  split += dop) { 
  Iterable<Edge>[] iterables = opg.getEdgesPartitioned(conns /* Connection array */, 
                                                       true /* skip store to cache */, 
                                                       split /* starting split */); 
   
  for (Iterable<Vertex> iterable : iterables) {
    lCountE += consumeIterables(iterables); /* consume iterables */
  }
}
 
// Count all edges
System.out.println("Edges found using parallel query: " + lCountE);
 
// Close the connections to the database after completed
for (int idx = 0; idx < conns.length; idx++) { 
  conns[idx].close();
}

既存のグラフの削除

Apache HBase 2.xでは、OraclePropertyGraphUtils.dropPropertyGraphメソッドはHadoopノードとApache HBaseポート番号を接続に使用します。次のコード・フラグメントは、my_graphという名前のグラフをApache HBase 2.xから削除します。

int dop = 4;
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", szQuorum);
conf.set("hbase.zookeeper.property.clientPort","2181");
Connection conn = ConnectionFactory.createConnection(conf);
OraclePropertyGraphUtils.dropPropertyGraph(conn, "my_graph");

1.8.2 SolrCloud 4.10.3からSolrCloud 7.0.0へのアップグレードによる変更

SolrCloud 4.10.3からSolrCloud 7.0.0へのアップグレードには、アプリケーション・コードの変更が必要な場合があります。

プロパティ・グラフ・データのテキスト索引でのパラレル問合せ

SolrCloud 7.0では、SolrCloudServerインタフェースは非推奨のため、データ・アクセス・レイヤーではSolrCloudテキスト検索エンジンへの接続にCloudSolrClientオブジェクトを使用する必要があります。SolrCloudベースのテキスト索引に対してパラレル問合せを実行するには、CloudSolrClientインスタンスのセットを指定する必要があります。CloudSolrClientインスタンスを作成するには、操作SolrIndexUtils.getCloudSolrServerが非推奨になったため、SolrIndexUtils.getCloudSolrClient APIに依存できます。

次のコード・スニペットは、SolrCloud検索エンジンを使用して自動テキスト索引を生成し、パラレル・テキスト問合せを実行します。SolrIndexクラスでのgetPartitionedメソッドの呼出し数は、索引内のシャードの合計数と使用される接続の数によって制御されます。

OraclePropertyGraph opg = OraclePropertyGraph.getInstance(args, szGraphName);
 
 
String configName = "opgconfig";
String solrServerUrl = args[4];//"localhost:2181/solr"
String solrNodeSet = args[5]; //"localhost:8983_solr";
  
int zkTimeout = 15; // zookeeper timeout in seconds
int numShards = Integer.parseInt(args[6]); // number of shards in the index
int replicationFactor = 1; // replication factor
int maxShardsPerNode = 1; // maximum number of shards per node
  
// Create an automatic index using SolrCloud
OracleIndexParameters indexParams =  OracleIndexParameters.buildSolr(configName, solrServerUrl, solrNodeSet, zkTimeout /* zookeeper timeout in seconds */, numShards /* total number of shards */, replicationFactor /* Replication factor */, maxShardsPerNode /* maximum number of shardsper node*/, 4 /* dop used for scan */, 10000 /* batch size before commit*/, 500000 /* commit size before SolrCloud commit*/, 15 /* write timeout in seconds */);
 
opg.setDefaultIndexParameters(indexParams);
 
// Create auto indexing on name property for all vertices
System.out.println("Create automatic index on name for vertices");
opg.createKeyIndex("name", Vertex.class);
 
// Get the SolrIndex object 
SolrIndex<Vertex> index = (SolrIndex<Vertex>) opg.getAutoIndex(Vertex.class);
 
// Open an array of connections to handle connections to SolrCloud needed for parallel text search
CloudSolrClient[] conns = new CloudSolrClient[dop];
 
 
for (int idx = 0; idx < conns.length; idx++) {
  conns[idx] = index.getCloudSolrClient(15 /* write timeout in secs*/);
}
 
// Iterate to cover all the shards in the index
long lCount = 0;
for (int split = 0; split < index.getTotalShards(); split += conns.length) {
  // Gets elements from split to split + conns.length
  Iterable<Vertex>[] iterAr = index.getPartitioned(conns /* connections */, "name"/* key */, "*" /* value */, true /* wildcards */, split /* start split ID */);
  for (Iterable<Vertex> iterable : iterables) {
    lCount += OraclePropertyGraphUtils.size(iterable); /* consume iterables */
  }
}
 
// Close the connections to SolrCloud after completed
for (int idx = 0; idx < conns.length; idx++) { 
  conns[idx].close();
}

SolrCloudを使用したネイティブ問合せ結果の使用

SolrIndexでメソッドget(QueryResponse)を呼び出すことにより、SolrCloudを使用してネイティブ問合せ結果を使用できます。QueryResponseオブジェクトには、特定のSolrCloudコレクションに対するテキスト検索問合せと一致するドキュメント・セットが用意されています。SolrIndexは、QueryResponseオブジェクト内で見つかったドキュメントからのすべての頂点(またはエッジ)を保持するIterableオブジェクトを作成します。

SolrCloud 7.0では、SolrCloudServerインタフェースは非推奨のため、データ・アクセス・レイヤーではOracleプロパティ・グラフのテキスト索引に対するネイティブ問合せ結果を処理するためにCloudSolrClientオブジェクトを使用する必要があります。次のコード・フラグメントは、Apache SolrCloud検索エンジンを使用して自動テキスト索引を生成し、SolrQueryオブジェクトを作成し、これをCloudSolrClientオブジェクトに対して実行してQueryResponseオブジェクトを取得します。後で、特定の結果オブジェクトから頂点のIterableオブジェクトが作成されます。

OraclePropertyGraph opg = OraclePropertyGraph.getInstance(args, szGraphName);
 
 String configName = "opgconfig";
String solrServerUrl = args[4];//"localhost:2181/solr"
String solrNodeSet = args[5]; //"localhost:8983_solr";
  
int zkTimeout = 15; // zookeeper timeout in seconds
int numShards = Integer.parseInt(args[6]); // number of shards in the index
int replicationFactor = 1; // replication factor
int maxShardsPerNode = 1; // maximum number of shards per node
  
// Create an automatic index using SolrCloud
OracleIndexParameters indexParams =  OracleIndexParameters.buildSolr(configName, solrServerUrl, solrNodeSet, zkTimeout /* zookeeper timeout in seconds */, numShards /* total number of shards */, replicationFactor /* Replication factor */, maxShardsPerNode /* maximum number of shardsper node*/, 4 /* dop used for scan */, 10000 /* batch size before commit*/, 500000 /* commit size before SolrCloud commit*/, 15 /* write timeout in seconds */);
 
opg.setDefaultIndexParameters(indexParams);
 
 // Create auto indexing on name property for all vertices System.out.println("Create automatic index on name and country for vertices"); String[] indexedKeys = new String[2]; indexedKeys[0]="name"; indexedKeys[1]="country"; opg.createKeyIndex(indexedKeys, Vertex.class);
 
 // Get the SolrIndex object
SolrIndex<Vertex> index = (SolrIndex<Vertex>) opg.getAutoIndex(Vertex.class);
 
 // Search first for Key name with property value Beyon* using only string data types
String szQueryStrBey = index.buildSearchTerm("name", "Beyo*", String.class);
String key = index.appendDatatypesSuffixToKey("country", String.class);
String value = index.appendDatatypesSuffixToValue("United States", String.class);
String szQueryStrCountry = key + ":" + value;
Solrquery query = new SolrQuery(szQueryStrBey + " AND " + szQueryStrCountry);
 
 CloudSolrClient conn = index.getCloudSolrClient(15 /* write timeout in secs*/);
  
//Query using get operation
QueryResponse qr = conn.query(query, SolrRequest.METHOD.POST);
 
Iterable<Vertex> it = index.get(qr);
long lCount = 0;
while (it.hasNext()) {
  System.out.println(it.next());
  lCount++;
}
 
System.out.println("Vertices found: "+ lCount);