5 問合せサーバーの操作
Oracle Big Data SQLで問合せサーバーを管理する方法について学習します。
5.1 Oracle Big Data SQL Query Serverについて
Oracle Big Data SQL Query Serverは、オプションでOracle Big Data SQLのコンポーネントとしてHadoopクラスタ内のエッジ・ノードにインストールできるOracle Databaseインスタンスです。問合せサーバーは、主として、Oracle外部表を使用してクラスタ(HDFS形式およびHive形式)またはオブジェクト・ストアに格納されているデータを問い合せるために使用します。これにより、Oracle Databaseによって提供されるSQL機能を全面的に利用できます。
外部表を定義するには、ORACLE_HDFS
およびORACLE_HIVE
またはORACLE_BIGDATA
アクセス・ドライバを使用するか、Hiveメタストアのメタデータに基づいて問合せサーバーが外部表を自動的に定義するようにします。後者の場合、HiveデータベースはOracle Databaseスキーマにマップされ、対応するHive表はそれらのスキーマにOracle外部表として定義されます。すべてのデータ認可は、Apache SentryまたはHDFSアクセス制御リスト(ACL)などのHadoopの認可ルールに基づいています。
問合せサーバーをインストールすると、Oracle Databaseのデプロイメントが提供されて、SQLを使用してHadoopクラスタ内のデータを問い合せるように自動的に構成されます。問合せサーバーを再起動すると、データベースがクリーンな状態に復元されるため、管理オーバーヘッドが排除されます。再起動すると、外部表(ORACLE_HIVE、ORACLE_HDFSおよびORACLE_BIGDATAタイプ)、関連する統計、ユーザー定義ビューおよび資格証明が保持されます。再起動により、ユーザー・データが含まれている標準の表が削除されます。
高可用性(HA)、高度なOracleセキュリティ・ポリシー、またはOracle Database内のデータとHadoop内のデータとの組合せを必要とするソリューションの場合、完全なOracle DatabaseをBig Data SQLとともに使用する必要があります。単一のHadoopデプロイメントで、問合せサーバーとBig Data SQL対応Oracle Databaseの両方を使用できます。
問合せサーバーをインストールするには、bds-config.json
構成ファイルにHadoopクラスタ内の既存のエッジ・ノードを指定する必要があります。この同じ構成ファイルは、Hiveデータベースのリストを指定する場合にも使用します。問合せサーバーがHiveメタストア・データベースの表に対応するOracle外部表を自動的に作成するため、インストールが完了したら、それらの表にいつでも問合せができるようになります。問合せサーバーの外部表セットは、対応するHiveメタストア表で自動的に最新の状態に保たれるようになります。そのためには、Cloudera ManagerまたはApache Ambariクラスタ管理ソフトウェアで「Restart this Big Data SQL Query Server」コマンドまたは「Synchronize Hive Databases」コマンドを実行します。また、dbms_bdsqs.sync_hive_databases
PL/SQL APIパッケージ・プロシージャを使用することもできます。
関連項目:
Oracle Big Data SQL構成の両側にソフトウェアをインストールして構成する方法は、Oracle Big Data SQLインストレーション・ガイドの概要を参照してください。
スマート・スキャン対象のデータ・ファイルを設定する方法の詳細は、「HDFSへのOracle表領域の格納」を参照してください。
5.2 重要な用語と概念
エッジ・ノード、エッジ・データベース、セル・ノードおよびHadoopクラスタ統合の概要。
これらの用語は、問合せサーバーを理解するための鍵となります。
エッジ・ノードについて
Hadoopクラスタ内のエッジ・ノードは、Hadoopクラスタと外部ネットワーク間のインタフェースです。一般に、エッジ・ノードは、クライアント・アプリケーションおよびHadoopクラスタ管理ツール(Cloudera ManagerやApache Ambariなど)の実行に使用されます。エッジ・ノードは、NFSまたはHttpFSを介してHDFSアクセスを提供するか、またはRESTサーバーを実行することで、データ・ゲートウェイとして機能できます。
セル・ノードについて
BDSセルはDataNodeで実行され、問合せ処理の一部を、データが存在するHadoopクラスタDataNodeにプッシュ・ダウンできます。これにより、処理対象のデータ量がデータベースに送信されるように、負荷の分散と削減の両方が実現されます。これにより、Big Dataワークロードのパフォーマンスが大幅に向上する可能性があります。
Hadoopクラスタ統合
Oracle Big Data SQLには、Cloudera ManagerまたはApache Ambariで管理できる次の3つのサービス・ロールが含まれています。
- Big Data SQL Server: Hadoopクラスタに対してSQL問合せを実行できます。アプリケーションは、JDBCまたはSQL*Netを使用してこのサーバーに接続します。
- Big Data SQLエージェント: Big Data SQLのインストールを管理し、Copy to Hadoop機能によっても使用されます。
- Big Data SQL Server: Big Data SQLセルとも呼ばれ、問合せ処理の一部を、データが存在するHadoopクラスタDataNodesにプッシュ・ダウンできます。
5.3 問合せサーバーの機能
Big Data SQL問合せサーバーは、自動インストールと構成、Hadoopクラスタ・マネージャとの統合、およびクラスタ・メタデータの自動統合を提供します。
- 自動インストールと構成:
bds-config.json
構成ファイルにHadoopクラスタの既存のターゲット・エッジ・ノードを指定した場合、Oracle Big Data SQLインストーラは自動的に問合せサーバーをインストールおよび構成します。問合せサーバーをインストールするエッジ・ノードを指定するには、次の例のように、edgedb
パラメータ、ノードおよび有効な属性をbds-config.json
構成ファイルに追加します。ここで、<edgenode_host_name>
はエッジ・ノードの名前です。"edgedb": { "node" : "dbnode.domain.com", "enabled" : "true", "sync_hive_db_list" : "my_hive_db_1,my_hive_db2" }
ノート:
bds-config.json
構成ファイルにedgedbサブセクションが含まれていない場合、問合せサーバーはインストールされません。関連項目:
インストール・ガイドのbds-config.jsonの構成例には、完全に値が移入されたbds-config.json
ファイルが示されています。この例には、使用可能なすべての構成パラメータが含まれています。 - Hadoopクラスタ・マネージャとの統合: Cloudera ManagerまたはApache Ambari Hadoopクラスタ管理ツールを使用して、問合せサーバーをサービスとしてモニターおよび管理できます。
- Hiveとの同期化: Oracle Big Dataサービスを起動すると、問合せサーバーはHiveメタストアにある自身のメタデータを自動的にリフレッシュします。最初のリフレッシュの後、ユーザーは問合せサーバーとHiveメタストア内の最新のメタデータを同期化できます。
5.4 問合せサーバーと同期化するHiveデータベースの指定
問合せサーバーとメタストア内の目的のHiveデータベースを同期化するには、その前にHiveデータベースのリストを指定する必要があります。
- インストール時に、
bds-config.json
構成ファイルにsync_hive_db_list
パラメータを指定します。 - インストール後、Cloudera ManagerまたはApache Ambariで
sync_hive_db_list
構成パラメータを更新できます。
問合せサーバーをインストールすると、指定したHiveメタストア・データベース・リストに基づいてスキーマと外部表が自動的に作成されます。以後問合せサーバーを再起動するたびに、デルタ同期が実行されます。
5.4.1 bds-config.json構成ファイルでのHiveデータベースの指定
bds-config.json
構成ファイルを使用すると、インストール・プロセスの一部として問合せサーバーと同期化するHiveデータベースの初期リストを指定できます。
構成ファイルに、sync_hive_db_list
構成パラメータとHiveデータベースのリストを含めます。次の例では、sync_hive_db_list
構成パラメータに対して2つのHiveデータベース、htdb0
およびhtdb1
を指定しています。Hiveメタストアに他のデータベースが含まれていても、これら2つのデータベースのみが問合せサーバーと同期化されます。
"edgedb": {
"node": "<edgenode_host_name>
",
"enabled": "true",
"sync_hive_db_list": "htdb0,htdb1"
. . .
}
問合せサーバーとメタストア内のすべてのHiveデータベースを同期化するには、次に示すように、*ワイルドカード文字を使用します。
"edgedb": {
"node": "EdgeNode_Host_Name",
"enabled": "true"
"sync_hive_db_list": "*"
. . .
}
bds-config.json
構成ファイルにsync_hive_db_list
構成パラメータが含まれていない場合、Hiveデータベースと問合せサーバーの間で同期は行われません。その場合、Cloudera ManagerまたはApache Ambariのsync_hive_db_list
構成パラメータを使用して、Hiveデータベースを指定する必要があります。
ノート:
問合せサーバーは、内部データをOracle表に格納することを目的としたものではありません。問合せサーバーを再起動すると、初期状態にリセットされ、クリーンな状態になります。これにより、ストレージ管理やデータベース構成などの一般的なデータベース・メンテナンスが不要になります。問合せサーバーの目的は、Hadoop、オブジェクト・ストア、KafkaおよびNoSQLデータベース内のデータに対してSQLフロントエンドを提供することであり、汎用RDBMSを提供することではありません。5.5 問合せサーバーとHiveとの同期化
Cloudera Manager、Apache Ambariまたはdbms_bdsqs.sync_hive_databases
PL/SQL APIを使用して、問合せサーバーと指定したHiveデータベースを同期化できます。
- Cloudera ManagerまたはApache Ambariで「Restart this Big Data SQL Query Server」コマンドを実行します。
- Cloudera ManagerまたはApache Ambariで「Synchronize Hive Databases」コマンドを実行します。
- エッジ・ノードで
dbms_bdsqs.sync_hive_databases
PL/SQL APIをローカルに呼び出します。
bds-config.json
構成ファイルを使用するか、Cloudera Managerのsync_hive_db_list構成パラメータを使用して、同期化に使用するHiveデータベースを指定する必要があります。
dbms_bdsqs.sync_hive_databases
PL/SQL APIは、他の2つの方法ですでに同期化されているHiveデータベースのHive表定義をリフレッシュするにすぎません。
5.5.1 Cloudera Managerを使用した問合せサーバーの手動再起動
Cloudera ManagerまたはApache Ambariで問合せサーバーを再起動することによって、問合せサーバーと指定したHiveデータベースを同期化できます。
bds-config.json
構成ファイルを使用するか、Cloudera Managerのsync_hive_db_list構成パラメータを使用して、同期化に使用するHiveデータベースを指定する必要があります。
5.5.2 Cloudera Managerを使用した問合せサーバーの手動同期化
Cloudera ManagerまたはApache Ambariを使用すると、問合せサーバーと指定したHiveデータベースを手動で同期化できます。
bds-config.json
構成ファイルを使用するか、Cloudera Managerのsync_hive_db_list構成パラメータを使用して、同期化に使用するHiveデータベースを指定する必要があります。
5.5.3 PL/SQL APIを使用した問合せサーバーの手動同期化
PL/SQL APIを使用して、問合せサーバーと指定したHiveデータベースを同期化できます。
そのためには、問合せサーバーがインストールされているエッジ・ノードでローカルにdbms_bdsqs.sync_hive_databases
PL/SQL APIを起動します。
このプロシージャには、パラメータが含まれていません。これにより、すでに問合せサーバーにあるすべてのHiveデータベースが同期化されます。APIは、sync_hive_db_list
構成パラメータにリストされているHiveデータベースのみで問合せサーバーをリフレッシュします。連続する各同期化(リフレッシュとも呼ばれます)は、問合せサーバー・メタデータの最後のリフレッシュ以降に行われた変更を処理します。
同期化は、最後のリフレッシュ以降にHiveメタストアで追加または削除された表を取得します。これには、スキーマが変更された可能性がある表も含まれます。
5.5.4 問合せサーバー完全同期の有効化
問合せサーバーでデルタ同期(デフォルト)と完全同期のどちらを実行するかを指定できます。
問合せサーバーのインストール・プロセス中に、bds-config.json
構成ファイルまたはsync_hive_db_list
構成パラメータのいずれかで指定できるHiveデータベース・リストに基づいて、Oracleスキーマおよび適切な外部表が作成されます。この場合、問合せサーバーは完全同期を実行します。デフォルトでは、問合せサーバーは後続の再起動時または同期化時にデルタ同期を実行します。
Cloudera ManagerまたはApache Ambariの「Enable full synchronization」パラメータを使用して、問合せサーバーで完全同期とデルタ同期のどちらを実行するのかを制御できます。デフォルトでは、この構成パラメータは選択解除されています。問合せサーバーが完全同期を実行できるようにするには、Cloudera ManagerまたはApache Ambariでこのチェック・ボックスを選択します。たとえば、Cloudera Managerを使用すると、次のように、問合せサーバーは再起動中または手動同期化中に完全同期を実行できます。
- ログイン資格証明を使用してCloudera Managerにログインします。
- Cloudera Managerで、「Search」フィールドを使用して、「Enable full synchronization」構成パラメータを検索します。「Search」フィールドに「/ Enable full synchronization」と入力し(名前を入力していくと、該当する名前がリストに表示されます)、[Enter]を押します。
- 「Big Data SQL: Enable full synchronization」をクリックします。デフォルトでは、このチェック・ボックスは選択解除されています。これは、問合せサーバーがデルタ同期を実行することを示しています。
- 完全同期を有効にするには、チェック・ボックスを選択し、「Save Changes」をクリックします。
完全同期では、問合せサーバーから既存のスキーマおよび外部表がすべて削除され、sync_hive_db_list
構成パラメータで指定したHiveデータベース・リストに基づいて、新しいスキーマおよび新しい外部表が再作成されます。
デフォルトでは、問合せサーバーは指定したメタストアのHiveデータベースと問合せサーバーの間でデルタ同期を実行します。表の削除や追加などHiveデータベースを変更すると、それが問合せサーバーに反映されます。ただし、問合せサーバーを初めて起動したときには、bds-config.json
構成ファイルで指定したHiveデータベース、またはCloudera ManagerやApache Ambariのsync_hive_db_list
構成パラメータで指定したHiveデータベースに基づいて、Oracleスキーマが作成されます。
問合せサーバーとHiveを初めて同期化した場合、そのプロセスは通常より遅くなります。これは、指定したデータベース(Cloudera ManagerまたはApache Ambariで構成したもの)のすべての表をHadoopクラスタにインポートしているためです。その後のリフレッシュでは、新規表の追加など、Hiveメタデータに対して行われた変更のみをリフレッシュするので、大幅に高速になります。デルタ・インポート中、問合せサーバーは追加/変更された表の新しい統計も収集します。
5.6 問合せサーバーの再起動とメタデータ永続性
Cloudera Manager、Apache AmbariまたはPL/SQL APIを使用して、問合せサーバー・メタデータをリフレッシュできます。
次のキー・メタデータを保存しておくと、問合せサーバーの再起動後に復元できます。
- 表統計
統計の収集は、負荷のかかる操作である場合があります。表統計は、各メタデータの同期化後に自動的に収集されます。以後の統計収集は、次のPL/SQLパッケージ・プロシージャおよびパラメータを使用して取得できます。
DBMS_STATS.GATHER_TABLE_STATS (ownname => <schema>, tabname => <table-name>, estimate_percent => dbms_stats.auto_sample_size);
ノート:
estimate_percent=> dbms_stats.auto_sample_size
パラメータを使用していることを確認してください。 ORACLE_HIVE
アクセス・ドライバを使用するHive外部表。ORACLE_HDFS
アクセス・ドライバを使用するHDFS外部表。- ユーザー定義ビュー。
5.7 問合せサーバーのセキュリティ
シングルユーザー・モードまたはマルチユーザー・モードを使用して、問合せサーバーに接続できます。問合せサーバーのユーザーは、BDSQLUSR
というプラガブル・データベースに接続します。クラスタがセキュアである(Kerberosを使用する)かセキュアでないかによって、データベースに接続する方法は2つあります。
問合せサーバー・データベースへの接続
Hadoopクラスタ内のデータを問い合せるために、ユーザーは問合せサーバーに接続できます(問合せサーバーがインストールされている場合)。Big Data SQLのインストール中に、Big Data SQLインストーラは、指定したエッジ・ノードにBDSQLUSR
という問合せサーバー・データベースを作成およびインストールします。また、それ以外にも、Hadoopクラスタのデータを問い合せるためにそのエッジ・ノードで必要なものをすべてインストールします。
問合せサーバー・ユーザーは、シングルユーザー・モードまたはマルチユーザー・モードを使用して、問合せサーバー・データベースに接続できます。デフォルトでは、問合せサーバーは、セキュアでないHadoopクラスタの場合はシングルユーザー・モードとして構成されます。
シングルユーザー・モードでの問合せサーバーへの接続
問合せサーバーは、セキュアでないHadoopクラスタに対してシングルユーザー・モードをサポートしています。このモードでは、すべてのユーザーがBDSQLUSR
問合せサーバー・データベースにユーザーbdsql
として接続し、管理者による問合せサーバーのインストール中に選択されたパスワードを指定します。
問合せは、oracle
ユーザー権限を持つクラスタで実行されます。つまり、oracle
ユーザーは、Sentry権限またはHDFS認可あるいはその両方を使用して、基礎となるHadoopデータへのアクセスが認可されている必要があります。たとえば、次のようにSQL*Plusを使用して、問合せサーバー・データベースに接続できます。
sqlplus BDSQL/<bdsql_password>@BDSQLUSR
ノート:
前述のコマンドで<bdsql_password>
を、Oracle Big Data SQLのインストール時に管理者が指定した実際のBDSQL
パスワードに置き換えてください。
BDSQLユーザー・パスワードの変更
Oracle Big Data SQL Query Serverをセキュアでないクラスタにインストールする場合は、次のようにALTER USER
を使用してbdsql
ユーザーのパスワードを変更できます。
# su - oracle
sqlplus / as sysdba
sql> alter session set container=bdsqlusr;
sql> alter user bdsql identified by "<new_password>";
ノート:
<new_password>
を新しいパスワードに置き換えてください。新しいパスワードは、必要なOracleセキュア・パスワード・ガイドラインに準拠している必要があります。新しいパスワードを選択する方法については、セキュアなパスワードの選択を参照してください。
Kerberosで保護されたクラスタでは、ユーザーbdsql
が無効であることに注意してください。
シングルユーザー・モードでの問合せサーバーへの接続(セキュアでないHadoopクラスタ)
問合せサーバーは、セキュアでないHadoopクラスタに対してシングルユーザー・モードをサポートしています。このモードでは、すべてのユーザーがBDSQLUSR
問合せサーバー・データベースにユーザーBDSQL
として接続し、管理者が問合せサーバーのインストール中に選択したパスワードを指定します。
問合せは、Big Data SQL認可の構成に応じて2人のユーザーのうちのどちらかとしてクラスタで実行されます。Big Data SQLがマルチユーザー認可で設定されている場合、問合せは、Hadoopクラスタ上でOSユーザーbdsql
として実行されます。マルチユーザー認可が構成されていない場合、問合せは、ユーザーoracle
として実行されます。
つまり、Big Data SQLユーザーは、Sentry権限またはHDFS認可(あるいはその両方)を使用することで、基礎となるHadoopデータへのアクセスが認可されている必要があります。
マルチユーザー・モードでの問合せサーバーへの接続(Kerberos対応Hadoopクラスタ)
問合せサーバーは、Kerberos対応のHadoopクラスタをサポートしています。このモードは、Kerberosプリンシパルに対応する外部で識別された複数のユーザー・アカウントが存在する場合に使用します。接続ユーザーのアイデンティティ(Kerberosプリンシパル)は、bds-config.json
構成ファイルでimpersonation_enabled
パラメータがtrue
に設定されている場合に、Hadoopクラスタに対する認可に使用されます。このパラメータをfalse
に設定すると、Hadoopクラスタに対する認可はユーザーoracle
として実行されます。SentryはClouderaクラスタで使用されます。HDFS認可は、Hortonworksクラスタに使用されます。(Oracle Big Data SQLは、Hortonworks HDPでApache Rangerをまだ使用していません。)
ノート:
Hadoop Secure Impersonationを使用して、oracleアカウントに対し、他の指定のユーザーのかわりにタスクを実行するように指示する方法については、マルチユーザー認可モデルを参照してください。kinit
を使用してKerberosで認証を行う必要があります。セキュアなクラスタにBig Data問合せサーバーをインストールまたは再構成すると、JaguarはHadoop DataNodeもインストールされているノードで実行されているKey Distribution Center (KDC)からすべてのプリンシパルを収集します。プリンシパルごとに、外部で識別されたユーザーがBig Data SQL問合せサーバーに作成されます。このインストール時の動作は、bds-config.json
構成ファイルのsyncPrincipals
パラメータによって制御されます。この操作は、次のコマンド(Jaguar操作のスペルが異なることに注意)を実行して起動することもできます。
jaguar sync_principals
DBMS_BDSQS_ADMIN
パッケージを使用することもできます。これらの問合せサーバー・ユーザーは、Hadoopクラスタにアクセスするのと同じKerberosプリンシパルです。
DBMS_BDSQS_ADMIN.ADD_KERBEROS_PRINCIPALS(principals_list varchar2, op_semantics varchar2 DEFAULT 'STOP_ON_FIRST_ERROR')
DBMS_BDSQS_ADMIN.DROP_KERBEROS_PRINCIPALS(principals_list varchar2, op_semantics varchar2 DEFAULT 'STOP_ON_FIRST_ERROR')
ノート:
DBMS_BDSQS_ADMIN
パッケージのプロシージャを実行する前に、OS認証を使用してユーザーsys
としてOracle Big Data SQL Query Serverに接続する必要があります。たとえば、OSユーザーoracle
としてSQL*Plusにログインできます。Oracle Big Data SQLリファレンスを参照してください
[user_name@cluster_name ~]$ kinit user_name
Password for user_name@cluster_name.US.ORACLE.COM:
[user_name@cluster_name ~]$ sqlplus /@BDSQLUSR
SQL*Plus: Release 18.0.0.0.0 - Production on Tue Oct 2 13:54:39 2018
Version 18.3.0.0.0
Copyright (c) 1982, 2018, Oracle. All rights reserved.
Last Successful login time: Tue Oct 02 2018 13:54:20 -05:00
Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.3.0.0.0
SQL>
ノート:
前述の例では、user_name
およびcluster_name
に実際のユーザー名とクラスタ名が反映されています。