Impala¶
Virtual DataPort には、Impala へのデータ一括読み込みを実行するために、以下の 2 つのメカニズムが実装されています。
組み込みライブラリ: これは Denodo 8.0 で新しく実装されたものです。
外部 Hadoop インストール環境: Denodo の 旧バージョンで使用されていたメカニズムです。Hadoop をダウンロードして構成する必要があります。
データソースを作成する場合に使用できるのは新しい実装のみです。ただし、古い実装で構成された既存のデータソースを開いた場合、引き続き古い実装を使用することも、古い実装を組み込み実装に変更することもできます。
組み込み実装¶
Administration Tool で JDBC データソースを編集し、[Read & Write] タブをクリックして [Use bulk data load APIs] をチェックします。[File System] ドロップダウンでデータファイルのアップロードに使用するファイルシステムを選択します。選択できるオプションは、[HDFS] と [S3] です。
HDFS
[HDFS URI] に Virtual DataPort がデータファイルをアップロードする URI を入力します。たとえば、「 hdfs://acme-node1.denodo.com/user/admin/data/
」と入力します。
S3
[S3 URI] フィールドに Virtual DataPort がデータファイルをアップロードする S3 バケットの URI を入力します。たとえば、「
s3://my-bucket/
」と入力します。認証を構成します。以下の 2 つの方法があります。
AWS アクセスキー を使用します。
[AWS access key ID] と [AWS secret access key] を入力します。
または、[パスワードボールト (資格情報保管場所) から資格情報を取得 (Obtain credentials from password vault)] を選択して、 資格情報保管場所 から資格情報を取得します。
必要に応じて、[AWS IAM role ARN] を入力できます。AWS ユーザーは、このロールを引き受けて、バケットを操作するために必要な権限を取得します。ロール ARN は、引き受ける IAM ロールの Amazon リソースネームです。ロール ARN は、
arn:aws:iam::<awsAccountId>:role/<roleName>
のように指定します。または、この Virtual DataPort サーバーが動作している AWS インスタンスからデータベースの資格情報を自動的に取得します。そのためには、[Use Denodo AWS instance credentials] をチェックします。オプションで、
AWS IAM role ARN
を指定して、必要な権限を取得することもできます。
[Hadoop properties] セクションでは、 core-site.xml
のような Hadoop 構成ファイルで使用されている Hadoop プロパティを設定できます。
実行時に、クエリに Impala への一括読み込みが含まれる場合、Virtual DataPort は、すべてのデータを 1 つのファイルに保存してディスクに完全に書き込んでから Impala に転送するのではなく、データを複数のチャンクで並列してアップロードします。
ビューのキャッシュをロードするクエリを実行するにあたって、キャッシュデータベースが Impala であるとします。キャッシュロードプロセスは以下のように実行されます。
VDP サーバーは、JDBC データソースの資格情報を使用して Impala に接続し、CREATE TABLE ステートメントを実行します。このステートメントで、データの場所として [Read & Write] で構成されている URI を指定します。データソースのユーザーアカウントは、この場所に対するアクセス権限を持っている必要があることに注意してください。
VDP サーバーは、結果の最初の数行を取得するとすぐに、それらをデータファイルに書き込み始めます。このファイルは、Parquet 形式でディスクに書き込まれます。
サーバーは、ファイルに 5,000,000 行を書き込むと、ファイルを閉じて、Impala データソースで定義されている場所に送信し始めます。同時に、後続の行を別のファイルに書き込みます。
5,000,000 は、データソースの [Read & Write] タブの [Batch insert size (rows)] フィールドのデフォルト値であり、変更可能です。この値を増やすと、アップロードプロセスの並列性が低下することに注意してください。
サーバーは、別のデータファイルへの書き込みを終了すると (つまり、ファイルがバッチ挿入サイズに到達すると)、先に生成されていたファイルの転送が完了していなくても、Impala にファイルを転送し始めます。デフォルトでは、クエリあたり最大 10 ファイルを同時に転送します。ファイルの数がこの制限に到達すると、サーバーはデータファイルに行を書き込み続けますが、それ以上ファイルを転送しません。
この制限は、VQL シェルで次のコマンドを実行することによって変更できます。
SET 'com.denodo.vdb.util.tablemanagement.sql.insertion.DFInsertWorker.hdfs.maxParallelUploads' = '<new limit per query>';
すべてのファイルがアップロードされると、キャッシュテーブルにキャッシュデータが格納された状態になります。なぜなら、テーブル作成文で指定した場所にアップロードデータファイルが存在するからです。
外部 Hadoop インストール環境¶
注釈
このオプションは、VQL を使用して Hadoop 実行可能ファイルで作成された既存のデータソースの場合にのみ使用できます。
この手法でデータ一括読み込みを実行できるようにするには、以下の手順に従って実施してください。
Virtual DataPort のホストに Java Development Kit バージョン 8 (JDK) をインストールします。これは Hadoop に必要です。Java Runtime Environment (JRE) は有効ではありません。
この JDK のパスを参照するように JAVA_HOME 環境変数を設定します。Windows ではこのパスに空白文字が含まれることは普通ですが、Hadoop では空白文字はサポートされません。JDK が空白文字を含むパスにインストールされている場合、JAVA_HOME 環境変数を C:\Java に設定して、次のシンボリックリンクを作成します。
mklink /d "C:\Java" "C:\Program Files\Java\jdk1.8.0_152"
このコマンドを実行して権限エラーが発生した場合、Windows メニューをクリックし、[コマンド プロンプト] を見つけて右クリックして、[管理者として実行] をクリックします。
接続する Hadoop の特定のバージョンを調べて、 Apache Hadoop のサイト に移動し、使用するバージョンに対応するバイナリファイル (ソースファイルではない) をダウンロードします。たとえば、 hadoop-2.9.0.tar.gz をダウンロードします。
Hadoop では、Hadoop サーバーとそれにアクセスするためのクライアントを含む 1 つのファイルを提供しています。クライアントライブラリのみを含むパッケージは存在しません。
Virtual DataPort サーバーを実行しているホストでこのファイルを解凍します。
Linux では、次のコマンドを実行して解凍します。
tar -xzf <archive_name>.tar.gz
Windows では、ディレクトリ
<DENODO_HOME>/dll/vdp/winutils
内のファイルを<HADOOP_HOME>/bin
にコピーします。そうしないと、Parquet ファイルの生成および Hadoop へのコネクションは失敗します。次の環境変数をシステムで設定します。
HADOOP_HOME={<directory where you decompressed Hadoop>}
データ一括読み込みのためにファイルをアップロードする場合、Hadoop に接続するために使用する認証方法に応じて、以下のオプションのいずれかを選択します。
Kerberos 認証ではなく標準認証を使用して Hadoop に接続するには、Virtual DataPort サーバーを実行しているホストで次の環境変数を設定します。
HADOOP_USER_NAME=<username in Hadoop>
このユーザー名のユーザーは、データのアップロード先である HDFS フォルダに対する読み取り権限と書き込み権限を持っている必要があります。
注釈
Hadoop に接続するアプリケーションが同じホスト内に複数存在する場合、環境変数を設定する代わりに、
HADOOP_USER_NAME
変数とHADOOP_HOME
変数を設定し、プラットフォームに応じてhadoop.cmd
またはhadoop
を呼び出すスクリプトを作成します。後でデータ一括読み込みを構成する際に、このスクリプトを参照します。Kerberos 認証を使用して Hadoop に接続するには、以下の変更を行います。
<HADOOP_HOME>/etc/hadoop/core-site.xml
ファイルを編集して、以下のプロパティを追加します。<property> <name>hadoop.security.authentication</name> <value>kerberos</value> </property> <property> <name>hadoop.security.authorization</name> <value>true</value> </property>
以下のスクリプトを作成します。
Linux の場合、次の内容を記述した
<DENODO_HOME>/renew_kerberos_ticket_for_bulk_data_load.sh
ファイルを作成します。#!/bin/bash kinit -k -t "<path to the keytab file>" <Kerberos principal name of the Hadoop service> $HADOOP_HOME/hadoop "$@"
ファイルを作成した後、次のコマンドを実行します。
chmod +x <DENODO_HOME>/renew_kerberos_ticket_for_bulk_data_load.sh
Windows の場合、次の内容を記述した
<DENODO_HOME>/renew_kerberos_ticket_for_bulk_data_load.bat
ファイルを作成します。@echo off kinit -k -t "<path to the keytab file>" <Kerberos principal name of the Hadoop service> %HADOOP_HOME%\hadoop.cmd %*
<path to the keytab file>
は、Hadoop サーバーに接続するためのキーを含むキータブファイルのパスで置き換えます。hadoop
を呼び出す前にkinit
を呼び出すことによって、Hadoop に接続できる有効な Kerberos チケットがシステムに存在することを確認します。
Administration Tool で JDBC データソースを編集して、[Read & Write] タブをクリックします。[Use bulk data load APIs] をチェックして、以下の設定を行います。
[Hadoop executable location] ボックスに、Windows では
hadoop.cmd
ファイルのパスを、Linux ではhadoop
のパスをそれぞれ入力します。前の手順でrenew_kerberos_ticket_for_bulk_data_load
スクリプトを作成した場合は、そのファイルのパスを入力します。[HDFS URI] に Virtual DataPort がデータファイルをアップロードする URI を入力します。たとえば、「
hdfs://acme-node1.denodo.com/user/admin/data/
」と入力します。
実行時に、クエリに Impala への一括読み込みが含まれる場合、Virtual DataPort は、すべてのデータを 1 つのファイルに保存してディスクに完全に書き込んでから Impala に転送するのではなく、データを複数のチャンクで並列してアップロードします。
ビューのキャッシュをロードするクエリを実行するにあたって、キャッシュデータベースが Impala であるとします。キャッシュロードプロセスは以下のように実行されます。
VDP サーバーは、JDBC データソースの資格情報を使用して Impala に接続し、CREATE TABLE ステートメントを実行します。このステートメントで、データの場所として [Read & Write] で構成されている URI を指定します。データソースのユーザーアカウントは、この場所に対するアクセス権限を持っている必要があることに注意してください。
VDP サーバーは、結果の最初の数行を取得するとすぐに、それらをデータファイルに書き込み始めます。このファイルは、Parquet 形式でディスクに書き込まれます。
サーバーは、ファイルに 5,000,000 行を書き込むと、ファイルを閉じて、Impala データソースで定義されている場所に送信し始めます。同時に、後続の行を別のファイルに書き込みます。
これを行うために、Virtual DataPort を実行しているホストで
hadoop.cmd fs put...
コマンドをローカルに実行します。Impala の構成によっては、このプロセスの次の手順を完了できるように、データソースのユーザー名を指定して
HADOOP_USER_NAME
環境変数をエクスポートする必要がある場合があります。このコマンドを実行する際、Virtual DataPort はデータソースの資格情報を使用 しません 。単にコマンドを実行するだけです。したがって、このホストからのコネクションを許可するように HDFS システムを構成する必要があります。たとえば、Virtual DataPort を実行しているホストでこのコネクションを許可する SSH キーをセットアップするか、または Kerberos 経由でのコネクションを許可します。
5,000,000 は、データソースの [Read & Write] タブの [Batch insert size (rows)] フィールドのデフォルト値であり、変更可能です。この値を増やすと、アップロードプロセスの並列性が低下することに注意してください。
サーバーは、別のデータファイルへの書き込みを終了すると (つまり、ファイルがバッチ挿入サイズに到達すると)、先に生成されていたファイルの転送が完了していなくても、Impala にファイルを転送し始めます。デフォルトでは、クエリあたり最大 10 ファイルを同時に転送します。ファイルの数がこの制限に到達すると、サーバーはデータファイルに行を書き込み続けますが、それ以上ファイルを転送しません。
この制限は、VQL シェルで次のコマンドを実行することによって変更できます。
SET 'com.denodo.vdb.util.tablemanagement.sql.insertion.DFInsertWorker.hdfs.maxParallelUploads' = '<new limit per query>';
すべてのファイルがアップロードされると、キャッシュテーブルにキャッシュデータが格納された状態になります。なぜなら、テーブル作成文で指定した場所にアップロードデータファイルが存在するからです。