Denodo Distributed File System Custom Wrapper
警告 |
このラッパーは、HDFS、S3、Azure Blob Storage、Azure Data Lake Storage、および Google Cloud Storage のファイルストアを読み込むことができますが、Denodo 6.0 および Denodo 7.0 の場合、このラッパーの技術的アーティファクトの大半では、従来製品との互換性のため、次のように名前に HDFS が含まれています。
Denodo 8.0 については、アーティファクト名は次のように変更されています。
|
はじめに
Distributed File System Custom Wrapper ディストリビューションには、HDFS、S3、Azure Data Lake Storage、Azure Blob Storage、Azure Data Lake Storage Gen 2、および Google Cloud Storage に保存されている各種ファイル形式を読み込むことができる Virtual DataPort カスタムラッパーが用意されています。
サポートされている形式は以下のとおりです。
- 区切り形式テキスト
- Parquet
- Avro
- シーケンス
- マップ
また、分散ファイルシステムから情報を取得し、関連のあるものを表示するカスタムラッパーもあります。
- DFSListFilesWrapper: このラッパーを利用すると、分散フォルダーの検査、(単一フォルダー内の、または再帰的な) ファイルのリストの取得、ファイルのメタデータの任意の部分 (ファイル名、ファイルサイズ、最終更新日など) を使用したファイルのフィルタリングを行うことができます。
使用法
Distributed File System Custom Wrapper ディストリビューションは、次のコンポーネントで構成されています。
- /conf: 場合によってはコメント化の必要があるプロパティを含む、core-site.xml サンプルファイルが入ったフォルダー。
- /dist:
- denodo-(h)dfs-customwrapper-${version}.jar。カスタムラッパー。
- denodo-(h)dfs-customwrapper-${version}-jar-with-dependencies.jar。カスタムラッパーとその依存関係。このラッパーの方が VDP へのインストールが容易なため、利用をお勧めします。
- /lib: denodo-(h)dfs-customwrapper-${version}.jar を使用する場合にこのラッパーに必要なすべての依存関係。
VDP へのカスタムラッパーのインポート
VDP で Distributed File System Custom Wrapper を使用するには、Admin Tool を使用して拡張機能として追加する必要があります。
Distributed File System Custom Wrapper ディストリビューションから denodo-(h)dfs-customwrapper-${version}-jar-with-dependencies.jar ファイルを選択し、VDP にアップロードします。この jar にはすでに必要な依存関係がすべて含まれているため、他の jar は必要ありません。
重要 |
このラッパーの jar-with-dependencies バージョンには Hadoop クライアントライブラリが含まれているため、jar を VDP にアップロードする際、Java ヒープ領域を回避するために、VDP Admin Tool に対する JVM のヒープ領域を拡大する必要があります。 |
VDP の Distributed File System 拡張機能
Distributed File System データソースの作成
カスタムラッパー jar ファイルを VDP にアップロードしたら、このカスタムラッパーの新規データソースおよび対応する基本ビューを通常どおり作成できます。
[New] → [Data Source] → [Custom] を開き、次のラッパーのいずれかを指定します。
- com.denodo.connect.hadoop.hdfs.wrapper.DFSListFilesWrapper
- com.denodo.connect.dfs.wrapper.DFSListFilesWrapper (Denodo 8.0 の場合)
- com.denodo.connect.hadoop.hdfs.wrapper.HDFSAvroFileWrapper
- com.denodo.connect.dfs.wrapper.DFSAvroFileWrapper (Denodo 8.0 の場合)
- com.denodo.connect.hadoop.hdfs.wrapper.HDFSDelimitedTextFileWrapper
- com.denodo.connect.dfs.wrapper.DFSDelimitedTextFileWrapper (Denodo 8.0 の場合)
- com.denodo.connect.hadoop.hdfs.wrapper.HDFSMapFileWrapper
- com.denodo.connect.dfs.wrapper.DFSMapFileWrapper (Denodo 8.0 の場合)
- com.denodo.connect.hadoop.hdfs.wrapper.HDFSParquetFileWrapper
- com.denodo.connect.dfs.wrapper.DFSParquetFileWrapper (Denodo 8.0 の場合)
- com.denodo.connect.hadoop.hdfs.wrapper.HDFSSequenceFileWrapper
- com.denodo.connect.dfs.wrapper.DFSSequenceFileWrapper (Denodo 8.0 の場合)
- com.denodo.connect.hadoop.hdfs.wrapper.S3ParquetFileWrapper
- com.denodo.connect.dfs.wrapper.S3ParquetFileWrapper (Denodo 8.0 の場合)
また、[Select Jars] をチェックし、カスタムラッパーの jar ファイルを選択します。
Distributed File System データソース
選択したラッパーによって入力パラメーターが異なります。パラメーターを更新するには、更新ボタンを押す必要があります。
(H)DFSDelimitedTextFileWrapper
区切り形式テキストファイルを読み込むためのカスタムラッパーです。
区切り形式テキストファイルはプレーンテキストを保存するもので、各行にはタブ、スペース、コンマなどの区切り文字によって区切られた値があります。
このカスタムラッパーデータソースには、以下のパラメーターが必要です。
- File system URI: ファイルシステムを識別するスキームと機関を示す URI。
- HDFS: hdfs://<ip>:<port>
- S3: s3a://<bucket>
<bucket> にアンダースコアを含めることはできません。「S3 の命名規則」を参照してください。
資格情報の構成については、「S3」を参照してください。
- Azure Data Lake Storage:
adl://<account name>.azuredatalakestore.net/
資格情報の構成については、「Azure Data Lake Storage」を参照してください。
- Azure Blob Storage:
wasb[s]://<container>\@<account>.blob.core.windows.net
資格情報の構成については、「Azure Blob Storage」を参照してください。
- Azure Data Lake Storage Gen 2:
abfs[s]://<filesystem>\@<account>.dfs.core.windows.net
資格情報の構成については、「Azure Data Lake Storage Gen 2」を参照してください。
- Google Cloud Storage:
gs://<bucket>
資格情報の構成については、「Google Storage」を参照してください。
! 注意 |
補間変数を示すために使用される特殊文字 @、\、^、{、} のいずれかを含むリテラルを入力する場合、それらの文字を \ でエスケープする必要があります。 たとえば、URI に「@」が含まれる場合、「\@」と入力する必要があります。 |
- Custom core-site.xml file (オプション): デフォルトのコアパラメーターをオーバーライドする構成ファイル。
- Custom hdfs-site xml file (オプション): デフォルトの HDFS パラメーターをオーバーライドする構成ファイル。
(H)DFSDelimitedTextFileWrapper データソースの編集
カスタムラッパーデータソースを登録すると、その基本ビューを作成するかどうかを尋ねられます。その基本ビューには以下のパラメーターが必要です。
- Path: 区切り形式ファイルまたはそのファイルを含むディレクトリの入力パス。
- File name pattern (オプション): このラッパーでディレクトリ内の一部のファイルのみからデータを取得する場合、それらのファイルが属するディレクトリのシーケンスを含め、それらのファイルの名前に一致する正規表現を入力することができます。
たとえば、名前が invoice_jan.csv や invoice_feb.csv などのパターンに従っているすべてのファイルのデータを基本ビューが返すようにする場合、File name pattern を「(.*)invoice_(.*)\\.csv」に設定します (後述の「注意」で説明しているように、正規表現をエスケープしています)。ラッパーで処理することになったのは、以下のディレクトリに属するファイルです。
- /accounting/invoices/2019/invoice_jan.csv
- /accounting/invoices/2019/invoice_feb.csv
- …
注: File name pattern 値では、ファイルのフルパスが考慮されます。上記の例では、ファイル名が「invoice...」ではなく「/accounting...」で始まっているため、パターン「invoice_(.*)\\.csv」ではこの結果は返されません。
! 注意 |
補間変数を示すために使用される特殊文字 @、\、^、{、} のいずれかを含むリテラルを入力する場合、それらの文字を \ でエスケープする必要があります。 たとえば、ファイル名のパターンに「\」が含まれる場合、「\\」と入力する必要があります。 |
- Delete after reading: パスによって指定されたファイルまたはディレクトリをラッパーの終了時に削除します。
- Include full path column: チェックした場合、各行のデータの取得元であるファイルのフルパスを示す列がビューに追加されます。
- Separator (オプション): 行の値の区切り文字。デフォルトはコンマ (,) で、改行 (\n または \r) は使用できません。
一部の「不可視」文字は特別な方法で入力する必要があります。
文字 |
意味 |
\t |
タブ |
\f |
フォームフィード |
! 注意 |
補間変数を示すために使用される特殊文字 @、\、^、{、} のいずれかを含むリテラルを入力する場合、それらの文字を \ でエスケープする必要があります。 たとえば、区切り文字がタブ文字「\t」である場合、「\\t」と入力する必要があります。 |
! 注意 |
2 文字以上からなる区切り文字が分断された場合、標準のコンマ区切り値との互換性を維持できないため、Quote、Comment Marker、Escape、Null value、Ignore Spaces の各パラメーターはサポートされません。 |
- Quote (オプション): 特殊文字を含む値のカプセル化に使用する文字。デフォルトは quote (“) です。
- Comment marker (オプション): コメント行の開始を示す文字。コメントは、デフォルトでは無効です。
- Escape (オプション): エスケープ文字。エスケープは、デフォルトでは無効です。
- Null value (オプション): Null 値を示すために使用する文字列。デフォルトの設定はなく、Null は空の文字列と区別されません。
! 注意 |
補間変数を示すために使用される特殊文字 @、\、^、{、} のいずれかを含むリテラルを入力する場合、それらの文字を \ でエスケープする必要があります。 たとえば、Null 値が「\N」の場合、「\\N」と入力する必要があります。 |
- Ignore spaces: 値の前後のスペースを無視するかどうかを指定します。デフォルトは False です。
- Header: チェックした場合、先頭行にこのファイル内のフィールドの名前が含まれているものと見なされます。これらの名前は、このラッパーから作成される基本ビューのフィールド名となります。デフォルトは True です。
- Ignore matching errors: 想定される列数を持たないファイルの行を無視するかどうかを指定します。デフォルトは True です。
このチェックボックスのチェックをはずした場合、想定された構造を持たない行があると、エラーが返されます。このチェックボックスをチェックした場合、ラッパーがクエリ内の行を無視したかどうかは、実行トレースの属性「Number of invalid rows」で確認できます。
- File encoding: 読み込むファイルのエンコードをこのパラメーターで指定できます。
(H)DFSDelimitedTextFileWrapper の基本ビューの編集
ビューのスキーマ
Path 入力パラメーターがディレクトリを示す場合、ラッパーを実行するとファイルまたはファイルのグループに含まれる値が返されます。
ビューの結果
(H)DFSParquetFileWrapper
Parquet ファイルを読み込むためのカスタムラッパーです。
Parquet は、Hadoop エコシステムの列型データストアです。列単位レベルの効率的なデータ圧縮とエンコードスキーマを提供します。
このカスタムラッパーデータソースには、以下のパラメーターが必要です。
- File system URI: ファイルシステムを識別するスキームと機関を示す URI。
- HDFS: hdfs://<ip>:<port>
- S3: s3a://<bucket>
<bucket> にアンダースコアを含めることはできません。「S3 の命名規則」を参照してください。
資格情報の構成については、「S3」を参照してください。
- Azure Data Lake Storage:
adl://<account name>.azuredatalakestore.net/
資格情報の構成については、「Azure Data Lake Storage」を参照してください。
- Azure Blob Storage:
wasb[s]://<container>\@<account>.blob.core.windows.net
資格情報の構成については、「Azure Blob Storage」を参照してください。
- Azure Data Lake Storage Gen 2:
abfs[s]://<filesystem>\@<account>.dfs.core.windows.net
資格情報の構成については、「Azure Data Lake Storage Gen 2」を参照してください。
- Google Cloud Storage:
gs://<bucket>
資格情報の構成については、「Google Storage」を参照してください。
! 注意 |
補間変数を示すために使用される特殊文字 @、\、^、{、} のいずれかを含むリテラルを入力する場合、それらの文字を \ でエスケープする必要があります。 たとえば、URI に「@」が含まれる場合、「\@」と入力する必要があります。 |
- Thread Pool size (オプション): プール内の最大許容スレッド数。設定しない場合、値は利用可能なプロセッサー数に基づいて計算されます。このパラメーターは、Parquet ファイルを並列で読み込む場合に意味があります。(JOIN や UNION などの操作を実行する、または同じビューで多くのインスタンスを同時実行するために) スレッドプールを複数のインスタンスで同時に使用する場合、十分な領域を確保できるように留意することが重要です。
- Custom core-site.xml file (オプション): デフォルトのコアパラメーターをオーバーライドする構成ファイル。
- Custom hdfs-site xml file (オプション): デフォルトの HDFS パラメーターをオーバーライドする構成ファイル。
(H)DFSParquetFileWrapper データソースの編集
カスタムラッパーデータソースを登録すると、その基本ビューを作成するかどうかを尋ねられます。その基本ビューには以下のパラメーターが必要です。
- Parquet File Path: 読み込むファイルのパス。
- File name pattern (オプション): このラッパーでディレクトリ内の一部のファイルのみからデータを取得する場合、それらのファイルが属するディレクトリのシーケンスを含め、それらのファイルの名前に一致する正規表現を入力することができます。
たとえば、名前が flights_jan.parquet や flights_feb.parquet などのパターンに従っているすべてのファイルのデータを基本ビューが返すようにする場合、File name pattern を「(.*)flights_(.*)\\.parquet」に設定します (後述の「注意」で説明しているように、正規表現をエスケープしています)。ラッパーで処理することになったのは、以下のディレクトリに属するファイルです。
- /airport/LAX/2019/flights_jan.parquet
- /airport/LAX/2019/flights_feb.parquet
- …
注: File name pattern 値では、ファイルのフルパスが考慮されます。上記の例では、ファイル名が「flights...」ではなく「/airport...」で始まっているため、パターン「flights_(.*)\\.parquet」ではこの結果は返されません。
! 注意 |
補間変数を示すために使用される特殊文字 @、\、^、{、} のいずれかを含むリテラルを入力する場合、それらの文字を \ でエスケープする必要があります。 たとえば、ファイル名のパターンに「\」が含まれる場合、「\\」と入力する必要があります。 |
- Include full path column: チェックした場合、各行のデータの取得元であるファイルのフルパスを示す列が追加されます。
- Parallelism type (必須): 読み込み方法を選択します。
- No Parallelism: 1 つのスレッドのみを使用してファイルを順次読み込みます。
- Automatic: Parquet メタデータを分析し、No Parallelism、By File、By Row Group、By Column の中から最適な読み込み方法の選択を自動的に試みます。
- Parallelism by File: Parallelism level で構成されたスレッドごとに 1 ファイルずつ、並列で読み込みます。
- Parallelism by Row Group: ファイルの合計行グループを Parallelism level で構成されたスレッド数に分けて、ファイルを並列で読み込みます。
注: 旧バージョンの Parquet ライブラリの制約のため、この種の並列処理がサポートされたのは Denodo 7.0 以降です。
- Parallelism by Column: ファイルの合計列グループを Parallelism level で構成されたスレッド数に分けて、ファイルを並列で読み込みます。
- Parallelism level (オプション): 並列処理が有効な場合に Parquet ファイルを同時に読み込むスレッド数。ユーザーが構成しなかった場合、値は利用可能なプロセッサー数に基づいて計算されます。
! 注意 |
このデータソースからのビューの複数のインスタンスを同時に実行する場合 (これは、JOIN や UNION などの操作を実行した結果か、あるいは同じビューで多くのインスタンスを同時実行した結果と考えられます)、同時実行するように各ビューで定義されている並列処理のレベルだけでなく、データソースで定義されているスレッドプールのサイズも考慮に入れることが重要です。 |
- Cluster/partition fields (オプション): ファイルの分割またはクラスター化の基準であったフィールド。これらのフィールドは、「Automatic parallelism type」を設定した場合に、ファイルの最適な読み込み方法を選択するためのヒントになります。
(H)DFSParquetFileWrapper の基本ビューの編集
ビューのスキーマ
ラッパーを実行すると、ファイルに含まれる値が返されます。
ビューの結果
クエリの最適化
- 投影プッシュダウン
Denodo では、列の不必要な読み込みを避けるために、選択した列のみが Parquet ファイルから読み込まれます。
- 述語プッシュダウン
Denodo では、Parquet ファイルに保存されているメタデータに基づいて、クエリ内のフィルター述語が評価されます。これにより、大量のデータチャンクの読み込みが回避され、クエリ性能が向上します。
- サポートされるデータ型は以下のとおりです。
- BINARY (UTF8, JSON, BSON), BOOLEAN, DOUBLE, FLOAT, INT32 (DECIMAL, DATE), INT64
サポートされる演算子は以下のとおりです。
- eq, ne, lt, le, gt, ge
- パーティションプルーニング
この最適化は、パーティション列の各値がサブディレクトリに保存された状態 (例: /requestsPartitioned/responseCode=500/) で、Parquet データセットが複数のディレクトリに分割されている場合に可能です。
Denodo は、パーティション列が WHERE 句で参照されている場合、大量の I/O を除外することができます。
S3ParquetFileWrapper
S3 内の Parquet ファイルを読み込むためのカスタムラッパーです。
Parquet は、列単位レベルの効率的なデータ圧縮とエンコードスキーマを提供する列型データストアです。
このラッパーは (H)DFSParquetFileWrapper と同じ動作ですが、S3 のみにアクセスするため、構成がはるかに簡単です。
このカスタムラッパーデータソースには、以下のパラメーターが必要です。
- File system URI: ファイルシステムを識別するスキームと機関を示す URI。
- S3: s3a://<bucket>
<bucket> にアンダースコアを含めることはできません。「S3 の命名規則」を参照してください。
資格情報の構成については、「S3」を参照してください。
! 注意 |
補間変数を示すために使用される特殊文字 @、\、^、{、} のいずれかを含むリテラルを入力する場合、それらの文字を \ でエスケープする必要があります。 たとえば、URI に「@」が含まれる場合、「\@」と入力する必要があります。 |
- Access Key ID (オプション): s3a を使用するアクセスキー ID。このパラメーターは、fs.s3a.access.key パラメーターを設定します。
- Secret Access Key (オプション): s3a を使用するシークレットアクセスキー。このパラメーターは、fs.s3a.secret.key パラメーターを設定します。
- IAM Role to Assume (オプション): 引き受ける Amazon S3 IAM ロール。このパラメーターは、fs.s3a.assumed.role.arn パラメーターを設定します。このパラメーターは、IAM ロールのアクセス権限で S3 バケットにアクセスするために必要です。
- Endpoint (オプション): s3a を使用する S3 エンドポイント。このパラメーターは、fs.s3a.endpoint パラメーターを設定します。このパラメーターは、特定リージョンのエンドポイントを設定するために使用されます。
Endpoint は、S3 互換ストレージ、つまり Amazon S3 とは異なるストレージにアクセスする場合、必須 です。
- USE EC2 IAM credentials: チェックした場合、com.amazonaws.auth.InstanceProfileCredentialsProvider を使用して、実際の EC2 インスタンスから資格情報が取得されます。この機能は、Denodo Platform が EC2 インスタンス上で動作していて、このインスタンスで IAM ロールが構成されている場合にのみ有効です。
- Custom core-site.xml file (オプション): Access Key ID、Secret Access Key、および Endpoint 以外のデフォルトのコアパラメーターをオーバーライドする構成ファイル。
- Thread Pool size (オプション): プール内の最大許容スレッド数。設定しない場合、値は利用可能なプロセッサー数に基づいて計算されます。このパラメーターは、Parquet ファイルを並列で読み込む場合に意味があります。(JOIN や UNION などの操作を実行する、または同じビューで多くのインスタンスを同時実行するために) スレッドプールを複数のインスタンスで同時に使用する場合、十分な領域を確保できるように留意することが重要です。
S3ParquetFileWrapper データソースの編集
S3 バケットとの接続には以下の各種オプションがあります。
- パブリックバケット: この場合、バケットにアクセスするために必要な構成は、File system URI と Parquet File Path のみです。
- IAM ユーザー: この場合、バケットにアクセスするには、File system URI、Parquet File Path、Access Key ID、および Secret Access Key を構成する必要があります。
- IAM ロール: この場合、バケットにアクセスするには、File system URI、Parquet File Path、Access Key ID、Secret Access Key、および IAM Role to Assume を構成する必要があります。
- インスタンスロール: この場合、バケットにアクセスするために必要なのは、File system URI と Parquet File Path を構成し、Use EC2 IAM credentials をチェックするのみです。このオプションは、Denodo が EC2 インスタンス上で動作している場合にのみ有効です。チェックした場合、com.amazonaws.auth.InstanceProfileCredentialsProvider を使用して、実際の EC2 インスタンスから資格情報が取得されます。
他の S3 コネクションのパラメーターを構成する必要がある場合、「S3」で説明しているように、Custom core-site.xml ファイルを使用することができます。
カスタムラッパーデータソースを登録すると、その基本ビューを作成するかどうかを尋ねられます。その基本ビューには以下のパラメーターが必要です。
- Parquet File Path: 読み込むファイルのパス。
- File name pattern (オプション): このラッパーでディレクトリ内の一部のファイルのみからデータを取得する場合、それらのファイルが属するディレクトリのシーケンスを含め、それらのファイルの名前に一致する正規表現を入力することができます。
たとえば、名前が flights_jan.parquet や flights_feb.parquet などのパターンに従っているすべてのファイルのデータを基本ビューが返すようにする場合、File name pattern を「(.*)flights_(.*)\\.parquet」に設定します (後述の「注意」で説明しているように、正規表現をエスケープしています)。ラッパーで処理することになったのは、以下のディレクトリに属するファイルです。
- /airport/LAX/2019/flights_jan.parquet
- /airport/LAX/2019/flights_feb.parquet
- …
注: File name pattern 値では、ファイルのフルパスが考慮されます。上記の例では、ファイル名が「flights...」ではなく「/airport...」で始まっているため、パターン「flights_(.*)\\.parquet」ではこの結果は返されません。
! 注意 |
補間変数を示すために使用される特殊文字 @、\、^、{、} のいずれかを含むリテラルを入力する場合、それらの文字を \ でエスケープする必要があります。 たとえば、ファイル名のパターンに「\」が含まれる場合、「\\」と入力する必要があります。 |
- Include full path column: チェックした場合、各行のデータの取得元であるファイルのフルパスを示す列がビューに追加されます。
- Parallelism type (必須): 読み込み方法を選択します。
- No Parallelism: 1 つのスレッドのみを使用してファイルを順次読み込みます。
- Automatic: Parquet メタデータを分析し、No Parallelism、By File、By Row Group、By Column の中から最適な読み込み方法の選択を自動的に試みます。
- Parallelism by File: Parallelism level で構成されたスレッドごとに 1 ファイルずつ、並列で読み込みます。
- Parallelism by Row Group: ファイルの合計行グループを Parallelism level で構成されたスレッド数に分けて、ファイルを並列で読み込みます。
注: 旧バージョンの Parquet ライブラリの制約のため、この種の並列処理がサポートされたのは Denodo 7.0 以降です。
- Parallelism by Column: ファイルの合計列グループを Parallelism level で構成されたスレッド数に分けて、ファイルを並列で読み込みます。
- Parallelism level (オプション): 並列処理が有効な場合に Parquet ファイルを同時に読み込むスレッド数。ユーザーが構成しなかった場合、値は利用可能なプロセッサー数に基づいて計算されます。
! 注意 |
このデータソースからのビューの複数のインスタンスを同時に実行する場合 (これは、JOIN や UNION などの操作を実行した結果か、あるいは同じビューで多くのインスタンスを同時実行した結果と考えられます)、同時実行するように各ビューで定義されている並列処理のレベルだけでなく、データソースで定義されているスレッドプールのサイズも考慮に入れることが重要です。 |
- Cluster/partition fields (オプション): ファイルの分割またはクラスター化の基準であったフィールド。これらのフィールドは、「Automatic parallelism type」を設定した場合に、ファイルの最適な読み込み方法を選択するためのヒントになります。
S3ParquetFileWrapper の基本ビューの編集
ビューのスキーマ
ラッパーを実行すると、ファイルに含まれる値が返されます。
ビューの結果
クエリの最適化
- 投影プッシュダウン
Denodo では、列の不必要な読み込みを避けるために、選択した列のみが Parquet ファイルから読み込まれます。
- 述語プッシュダウン
Denodo では、Parquet ファイルに保存されているメタデータに基づいて、クエリ内のフィルター述語が評価されます。これにより、大量のデータチャンクの読み込みが回避され、クエリ性能が向上します。
- サポートされるデータ型は以下のとおりです。
- BINARY (UTF8, JSON, BSON), BOOLEAN, DOUBLE, FLOAT, INT32 (DECIMAL, DATE), INT64
サポートされる演算子は以下のとおりです。
- eq, ne, lt, le, gt, ge
- パーティションプルーニング
この最適化は、パーティション列の各値がサブディレクトリに保存された状態 (例: /requestsPartitioned/responseCode=500/) で、Parquet データセットが複数のディレクトリに分割されている場合に可能です。
Denodo は、パーティション列が WHERE 句で参照されている場合、大量の I/O を除外することができます。
(H)DFSAvroFileWrapper
Avro ファイルを読み込むためのカスタムラッパーです。
重要 |
(H)DFSAvroFileWrapper を使用して Avro ファイルに直接アクセスすることは推奨しません。これは、Hadoop クラスター上で動作するアプリケーションによる使用を主な目的とするシリアル化システムだからです。代わりに、Hive、Impala、Spark のようなファイルに対して抽象化レイヤーを使用することをお勧めします。 |
Avro は、Hadoop 用の行ベースのストレージ形式で、シリアル化プラットフォームとして広く使用されています。Avro では、データ定義 (スキーマ) を JSON 形式で保存するため、どのプログラムでも読み込みや解釈が容易です。データ自体はバイナリ形式で保存されるため、コンパクトで効率的です。
このカスタムラッパーデータソースには、以下のパラメーターが必要です。
- File system URI: ファイルシステムを識別するスキームと機関を示す URI。
- HDFS: hdfs://<ip>:<port>
- S3: s3a://<bucket>
<bucket> にアンダースコアを含めることはできません。「S3 の命名規則」を参照してください。
資格情報の構成については、「S3」を参照してください。
- Azure Data Lake Storage:
adl://<account name>.azuredatalakestore.net/
資格情報の構成については、「Azure Data Lake Storage」を参照してください。
- Azure Blob Storage:
wasb[s]://<container>\@<account>.blob.core.windows.net
資格情報の構成については、「Azure Blob Storage」を参照してください。
- Azure Data Lake Storage Gen 2:
abfs[s]://<filesystem>\@<account>.dfs.core.windows.net
資格情報の構成については、「Azure Data Lake Storage Gen 2」を参照してください。
- Google Cloud Storage:
gs://<bucket>
資格情報の構成については、「Google Storage」を参照してください。
! 注意 |
補間変数を示すために使用される特殊文字 @、\、^、{、} のいずれかを含むリテラルを入力する場合、それらの文字を \ でエスケープする必要があります。 たとえば、URI に「@」が含まれる場合、「\@」と入力する必要があります。 |
- Custom core-site.xml file (オプション): デフォルトコアパラメーターをオーバーライドする構成ファイル。
- Custom hdfs-site xml file (オプション): デフォルト HDFS パラメーターをオーバーライドする構成ファイル。
(H)DFSAvroFileWrapper データソースの編集
カスタムラッパーデータソースを登録すると、その基本ビューを作成するかどうかを尋ねられます。その基本ビューには以下のパラメーターが必要です。
- File name pattern (オプション): このラッパーでディレクトリ内の一部のファイルのみからデータを取得する場合、それらのファイルが属するディレクトリのシーケンスを含め、それらのファイルの名前に一致する正規表現を入力することができます。
たとえば、名前が employees_jan.avro や employees_feb.avro などのパターンに従っているすべてのファイルのデータを基本ビューが返すようにする場合、File name pattern を「(.*)employees_(.*)\\.avro」に設定します (後述の「注意」で説明しているように、正規表現をエスケープしています)。ラッパーで処理することになったのは、以下のディレクトリに属するファイルです。
- /hr/2019/employees_jan.avro
- /hr/2019/employees_feb.avro
- …
注: File name pattern 値では、ファイルのフルパスが考慮されます。上記の例では、ファイル名が「employees...」ではなく「/hr...」で始まっているため、パターン「employees_(.*)\\.avro」ではこの結果は返されません。
! 注意 |
補間変数を示すために使用される特殊文字 @、\、^、{、} のいずれかを含むリテラルを入力する場合、それらの文字を \ でエスケープする必要があります。 たとえば、ファイル名のパターンに「\」が含まれる場合、「\\」と入力する必要があります。 |
- Delete after reading: パスによって指定されたファイルをラッパーの終了時に削除します。
- Include full path column: チェックした場合、各行のデータの取得元であるファイルのフルパスを示す列がビューに追加されます。
また、相互排他的な 2 つのパラメーターがあります。
- Avro schema path: Avro スキーマファイルの入力パス
- Avro schema JSON: Avro スキーマの JSON
! 注意 |
補間変数を示すために使用される特殊文字 @、\、^、{、} のいずれかを含むリテラルを Avro schema JSON パラメーターに入力する場合、それらの文字を \ でエスケープする必要があります。以下に例を示します。 \{ "type": "map", "values": \{ "type": "record", "name": "ATM", "fields": [ \{ "name": "serial_no", "type": "string" \}, \{ "name": "location", "type": "string" \} ]\} \} |
(H)DFSAvroFileWrapper 基本ビューの編集
/user/cloudera/schema.avsc ファイルの内容:
{"type" : "record", "name" : "Doc", "doc" : "adoc", "fields" : [ { "name" : "id", "type" : "string" }, { "name" : "user_friends_count", "type" : [ "int", "null" ] }, { "name" : "user_location", "type" : [ "string", "null" ] }, { "name" : "user_description", "type" : [ "string", "null" ] }, { "name" : "user_statuses_count", "type" : [ "int", "null" ] }, { "name" : "user_followers_count", "type" : [ "int", "null" ] }, { "name" : "user_name", "type" : [ "string", "null" ] }, { "name" : "user_screen_name", "type" : [ "string", "null" ] }, { "name" : "created_at", "type" : [ "string", "null" ] }, { "name" : "text", "type" : [ "string", "null" ] }, { "name" : "retweet_count", "type" : [ "int", "null" ] }, { "name" : "retweeted", "type" : [ "boolean", "null" ] }, { "name" : "in_reply_to_user_id", "type" : [ "long", "null" ] }, { "name" : "source", "type" : [ "string", "null" ] }, { "name" : "in_reply_to_status_id", "type" : [ "long", "null" ] }, { "name" : "media_url_https", "type" : [ "string", "null" ] }, { "name" : "expanded_url", "type" : [ "string", "null" ] } ] } |
ビューのスキーマ
ビューを実行すると、VQL 文の WHERE 句で指定された Avro ファイルに含まれる値が返されます。
SELECT * FROM avro_ds_file WHERE avrofilepath = '/user/cloudera/file.avro' |
ビューの結果
フラット化操作を適用した結果は以下のとおりです。
フラット化の結果
フィールド投影
(H)DFSAvroFileWrapper で投影を扱う方法としては、以下のいずれかの JSON スキーマ パラメーターを使用することをお勧めします。
- Avro schema path
- Avro schema JSON
目的のフィールドのみを含む JSON スキーマをラッパーに与えることにより、(H)DFSAvroFileWrapper が使用するリーダーはそれらのフィールドのみを VDP に返すため、選択操作が高速化されます。
前述の例で使用した /user/cloudera/schema.avsc ファイルの一部のフィールドのみでパラメーター Avro schema JSON を構成した場合、次のようになります (エスケープされた文字を確認してください)。
選択したフィールドを含むスキーマ:
\{ "type" : "record", "name" : "Doc", "doc" : "adoc", "fields" : [ \{ "name" : "id", "type" : "string" \}, \{ "name" : "user_friends_count", "type" : [ "int", "null" ] \}, \{ "name" : "user_location", "type" : [ "string", "null" ] \}, \{ "name" : "user_followers_count", "type" : [ "int", "null" ] \}, \{ "name" : "user_name", "type" : [ "string", "null" ] \}, \{ "name" : "created_at", "type" : [ "string", "null" ] \} ] \} |
VDP の基本ビューには、前述の例の基本ビューのサブセットが含まれることになります。これは、ラッパーに与えられた新しい JSON スキーマと一致します。
選択したフィールドを含む基本ビュー
選択したフィールドを含むビューの結果
(H)DFSSequenceFileWrapper
シーケンスファイルを読み込むためのカスタムラッパーです。
シーケンスファイルは、各レコードがシリアル化されたキーとシリアル化された値を持つ、レコード指向のバイナリファイルです。
このカスタムラッパーデータソースには、以下のパラメーターが必要です。
- File system URI: ファイルシステムを識別するスキームと機関を示す URI。
- HDFS: hdfs://<ip>:<port>
- S3: s3a://<bucket>
<bucket> にアンダースコアを含めることはできません。「S3 の命名規則」を参照してください。
資格情報の構成については、「S3」を参照してください。
- Azure Data Lake Storage:
adl://<account name>.azuredatalakestore.net/
資格情報の構成については、「Azure Data Lake Storage」を参照してください。
- Azure Blob Storage:
wasb[s]://<container>\@<account>.blob.core.windows.net
資格情報の構成については、「Azure Blob Storage」を参照してください。
- Azure Data Lake Storage Gen 2:
abfs[s]://<filesystem>\@<account>.dfs.core.windows.net
資格情報の構成については、「Azure Data Lake Storage Gen 2」を参照してください。
- Google Cloud Storage:
gs://<bucket>
資格情報の構成については、「Google Storage」を参照してください。
! 注意 |
補間変数を示すために使用される特殊文字 @、\、^、{、} のいずれかを含むリテラルを入力する場合、それらの文字を \ でエスケープする必要があります。
たとえば、URI に「@」が含まれる場合、「\@」と入力する必要があります。 |
- Custom core-site.xml file (オプション): デフォルトのコアパラメーターをオーバーライドする構成ファイル。
- Custom hdfs-site xml file (オプション): デフォルトの HDFS パラメーターをオーバーライドする構成ファイル。
(H)DFSSequenceFileWrapper データソースの編集
カスタムラッパーデータソースを登録すると、その基本ビューを作成するかどうかを尋ねられます。その基本ビューには以下のパラメーターが必要です。
- Path: シーケンスファイルまたはそのファイルを含むディレクトリの入力パス。
- File name pattern (オプション): このラッパーでディレクトリ内の一部のファイルのみからデータを取得する場合、それらのファイルが属するディレクトリのシーケンスを含め、それらのファイルの名前に一致する正規表現を入力することができます。
たとえば、名前が file_1555297166.seq や file_1555300766.seq などのパターンに従っているすべてのファイルのデータを基本ビューが返すようにする場合、File name pattern を「(.*)file_(.*)\\.seq」に設定します (後述の「注意」で説明しているように、正規表現をエスケープしています)。ラッパーで処理することになったのは、以下のディレクトリに属するファイルです。
- /result/file_1555297166.seq
- /result/file_1555300766.seq
- …
注: File name pattern 値では、ファイルのフルパスが考慮されます。上記の例では、ファイル名が「file...」.ではなく「/result...」で始まっているため、パターン「file_(.*)\\.seq」ではこの結果は返されません。
! 注意 |
補間変数を示すために使用される特殊文字 @、\、^、{、} のいずれかを含むリテラルを入力する場合、それらの文字を \ でエスケープする必要があります。 たとえば、ファイル名のパターンに「\」が含まれる場合、「\\」と入力する必要があります。 |
- Delete after reading: パスによって指定されたファイルまたはディレクトリをラッパーの終了時に削除します。
- Include full path column: チェックした場合、各行のデータの取得元であるファイルのフルパスを示す列がビューに追加されます。
- Key class: org.apache.hadoop.io.Writable インターフェイスを実装しているキークラス名。
- Value class: org.apache.hadoop.io.Writable インターフェイスを実装している値クラス名。
(H)DFSSequenceFileWrapper の基本ビューの編集
ビューのスキーマ
Path 入力パラメーターがディレクトリを示す場合、ラッパーを実行するとファイルまたはファイルのグループに含まれるキー/値ペアが返されます。
ビューの結果
(H)DFSMapFileWrapper
マップファイルを読み込むためのカスタムラッパーです。
マップは、2つのシーケンスファイルを含むディレクトリです。データファイル (/data) は、シーケンスファイルと同じで、バイナリキー/値ペアとして保存されたデータを含んでいます。インデックスファイル (/index) は、データに素早くアクセスするために、データファイル内部のシーク位置を持つキー/値のマップを含んでいます。
マップファイルの形式
このカスタムラッパーデータソースには、以下のパラメーターが必要です。
- File system URI: ファイルシステムを識別するスキームと機関を示す URI。
- HDFS: hdfs://<ip>:<port>
- S3: s3a://<bucket>
<bucket> にアンダースコアを含めることはできません。「S3 の命名規則」を参照してください。
資格情報の構成については、「S3」を参照してください。
- Azure Data Lake Storage:
adl://<account name>.azuredatalakestore.net/
資格情報の構成については、「Azure Data Lake Storage」を参照してください。
- Azure Blob Storage:
wasb[s]://<container>\@<account>.blob.core.windows.net
資格情報の構成については、「Azure Blob Storage」を参照してください。
- Azure Data Lake Storage Gen 2:
abfs[s]://<filesystem>\@<account>.dfs.core.windows.net
資格情報の構成については、「Azure Data Lake Storage Gen 2」を参照してください。
- Google Cloud Storage:
gs://<bucket>
資格情報の構成については、「Google Storage」を参照してください。
! 注意 |
補間変数を示すために使用される特殊文字 @、\、^、{、} のいずれかを含むリテラルを入力する場合、それらの文字を \ でエスケープする必要があります。 たとえば、URI に「@」が含まれる場合、「\@」と入力する必要があります。 |
- Custom core-site.xml file (オプション): デフォルトのコアパラメーターをオーバーライドする構成ファイル。
- Custom hdfs-site xml file (オプション): デフォルトの HDFS パラメーターをオーバーライドする構成ファイル。
(H)DFSMapFileWrapper データソースの編集
カスタムラッパーデータソースを登録すると、その基本ビューを作成するかどうかを尋ねられます。その基本ビューには以下のパラメーターが必要です。
- Path: マップファイルを含むディレクトリの入力パス。また、インデックスまたはデータファイルへのパスを指定することも可能です。フォルダーの概念がないフラットファイルシステムである S3 を使用する場合、インデックスまたはデータファイルへのパスを使用する必要があります。
- File name pattern (オプション): このラッパーでディレクトリ内の一部のファイルのみからデータを取得したい場合、それらのファイルが属するディレクトリのシーケンスを含め、それらのファイルの名前に一致する正規表現を入力することができます。
たとえば、名前が invoice_jan.whatever や invoice_feb.whatever などのパターンに従っているすべてのファイルのデータを基本ビューが返すようにする場合、File name pattern を「(.*)invoice_(.*)\\.whatever」に設定します (後述の「注意」で説明しているように、正規表現をエスケープしています)。ラッパーで処理することになったのは、以下のディレクトリに属するファイルです。
- /accounting/invoices/2019/invoice_jan.whatever
- /accounting/invoices/2019/invoice_feb.whatever
- …
注: File name pattern 値では、ファイルのフルパスが考慮されます。上記の例では、ファイル名が「invoice...」ではなく「/accounting...」で始まっているため、パターン「invoice_(.*)\\.whatever」ではこの結果は返されません。
! 注意 |
補間変数を示すために使用される特殊文字 @、\、^、{、} のいずれかを含むリテラルを入力する場合、それらの文字を \ でエスケープする必要があります。 たとえば、ファイル名のパターンに「\」が含まれる場合、「\\」と入力する必要があります。 |
- Delete after reading: パスによって指定されたファイルまたはディレクトリをラッパーの終了時に削除します。
- Include full path column: チェックした場合、各行のデータの取得元であるファイルのフルパスを示す列がビューに追加されます。
- Key class: org.apache.hadoop.io.WritableComparable インターフェイスを実装しているキークラス名。WritableComparable は、レコードをキー順に並べ替えるために使用されています。
- Value class: org.apache.hadoop.io.Writable インターフェイスを実装している値クラス名。
(H)DFSMapFileWrapper の基本ビューの編集
ビューのスキーマ
Path 入力パラメーターがディレクトリを示す場合、ラッパーを実行するとファイルまたはファイルのグループに含まれるキー/値ペアが返されます。
ビューの結果
WebHDFSFileWrapper
警告 |
WebHDFSFileWrapper は非推奨です。
HDFSAvroFileWrapper、HDFSSequenceFileWrapper、HDFSMapFileWrapper、または HDFSParquetFileWrapper を使用し、File system URI パラメーターに webhdfs スキームを指定して、xml 構成ファイルに資格情報を配置します。 |
DFSListFilesWrapper
分散ファイルシステムからファイル情報を取得するためのカスタムラッパーです。
このカスタムラッパーデータソースには、以下のパラメーターが必要です。
- File system URI: ファイルシステムを識別するスキームと機関を示す URI。
- HDFS: hdfs://<ip>:<port>
- S3: s3a://<bucket>
<bucket> にアンダースコアを含めることはできません。「S3 の命名規則」を参照してください。
資格情報の構成については、「S3」を参照してください。
- Azure Data Lake Storage:
adl://<account name>.azuredatalakestore.net/
資格情報の構成については、「Azure Data Lake Storage」を参照してください。
- Azure Blob Storage:
wasb[s]://<container>\@<account>.blob.core.windows.net
資格情報の構成については、「Azure Blob Storage」を参照してください。
- Azure Data Lake Storage Gen 2:
abfs[s]://<filesystem>\@<account>.dfs.core.windows.net
資格情報の構成については、「Azure Data Lake Storage Gen 2」を参照してください。
- Google Cloud Storage:
gs://<bucket>
資格情報の構成については、「Google Cloud Storage」を参照してください。
! 注意 |
補間変数を示すために使用される特殊文字 @、\、^、{、} のいずれかを含むリテラルを入力する場合、それらの文字を \ でエスケープする必要があります。 たとえば、URI に「@」が含まれる場合、「\@」と入力する必要があります。 |
- Custom hdfs-site xml file (オプション): 資格情報パラメーターなどのデフォルトパラメーターをオーバーライドする構成ファイル。
DFSDListFilesFilesWrapper データソースの編集
ラッパーに対してクエリを実行するためのエントリポイントは、パラメーター parentfolder です。このラッパーは、この与えられたディレクトリ内にあるファイルをリストします。これは再帰的に実行することが可能で、パラメーター recursive を「true」に設定すれば、サブフォルダーの内容も取得できます。
実行パネル
このカスタムラッパーのスキーマには、以下の列が含まれています。
- Parentfolder: 親ディレクトリのパス。このラッパーは、このディレクトリ内にあるすべてのファイルをリストします。
- このパラメーターは、SELECT 操作では必須です。
- relativepath: parentfolder に対するファイルの位置。再帰的クエリを実行する場合に役立ちます。
- filename: ファイルの拡張子を含めた、ファイルまたはフォルダーの名前。
- extension: ファイルの拡張子。ファイルがディレクトリの場合は「null」にします。
- fullpath: スキーム情報を含むファイルのフルパス。
- pathwithoutscheme: スキーム情報を含まないファイルのフルパス。
- filetype: 「file」または「directory」。
- encrypted: ファイルが暗号化されている場合は「true」、それ以外の場合は「false」です。
- Datemodified: 1970 年 1 月 1 日 (UTC) 以降のミリ秒単位でのファイルの更新日時。
- owner: ファイルの所有者。
- group: ファイルに関連付けられているグループ。
- permissions: 記号表記 (rwxr-xr-x) によるファイルのアクセス許可。
- size: バイト単位でのファイルのサイズ。フォルダーの場合は「null」にします。
- recursive: 「false」 の場合、ファイルの検索は parentfolder の直接の子であるファイルに限定されます。「true」の場合、検索は parentfolder のサブフォルダーを含めて再帰的に実行されます。
- このパラメーターは、SELECT 操作では必須です。
ビューのスキーマ
以下の VQL 文では、「/user/cloudera」hdfs ディレクトリ内のファイルが再帰的に返されます。
SELECT * FROM listing_dfs
WHERE parentfolder = '/user/cloudera' AND recursive = true
ビューの結果
このクエリをさらにフィルタリングすると、「2018-09-01」以降に更新されたファイルのみを取得できます。
SELECT * FROM listing_dfs
WHERE parentfolder = '/user/cloudera' AND recursive = true
AND datemodified > DATE '2018-09-01'
ビューの結果
DFSListFilesWrapper による機能拡張
区切り形式ファイル、Parquet、Avro、シーケンス、マップといったファイル形式を読み込むこのディストリビューションのラッパーは、DFSListFilesWrapper と併用した場合、機能が強化されます。
これらのラッパーでは、いずれも読み込み対象のファイルまたはディレクトリの入力パスが必要であるため、DFSListFilesWrapper を使用すれば、更新日時などのメタデータ属性値に基づいて、目的のファイルパスを取得することができます。
たとえば、/user/cloudera/df/awards ディレクトリ内のファイルのうち、11 月に更新されたものを取得するとします。
このシナリオの構成方法を以下の手順で説明します。
- /user/cloudera/df/awards ディレクトリのファイルをリストする DFSListFilesWrapper 基本ビューを作成します。
- csv ファイルの内容を読み取る HDFSDelimitedTextFileWrapper 基本ビューを作成します。
たとえば @path のように (@ は値パラメーターを補間変数として識別する接頭辞)、その値に補間変数を追加することにより、基本ビューの Path をパラメーター化します。
変数 @path を使用することにより、基本ビューを作成する際に、最終的なパス値を与える必要がなくなります。Path パラメーターの値は、実行時に DFSListFilesWrapper ビューによって (次の手順で構成する) JOIN 操作を通じて与えられます。
- 作成した 2 つのビューを結合する派生ビューを作成します。結合条件は以下のとおりです。
DFSListFilesWrapper.pathwithoutscheme = HDFSDelimitedTextFileWrapper.path
- 次の条件で結合ビューを実行します。
SELECT * FROM join:view
WHERE recursive = true
AND parentfolder = '/user/cloudera/df/awards'
AND datemodified > DATE '2018-11-1'
これにより、区切り形式ファイルから、11 月に更新されたデータのみが取得されます。
S3
Distributed File System Custom Wrapper は、以下の Hadoop FileSystem クライアントにより、S3 に保存されているデータにアクセスできます。
- s3a
以前の s3n:// クライアントおよび Amazon EMR の s3:// クライアントによって作成されたファイルに対応しています。
S3A 認証プロパティの構成
S3A は、各種認証メカニズムをサポートしています。このカスタムラッパーは、デフォルトでは以下の順序で資格情報を検索します。
- 構成ファイル内。
この認証方法を使用する場合、ラッパー構成ファイル Custom core-site.xml で資格情報 (アクセスキーおよびシークレットキー) を宣言します。ディストリビューションの conf フォルダーの中にある core-site.xml をガイドとして使用できます。
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>fs.s3a.access.key</name> <value>YOUR ACCESS KEY ID</value> </property> <property> <name>fs.s3a.secret.key</name> <value>YOUR SECRET ACCESS KEY</value> </property> </configuration> |
- 次に、環境変数 WS_ACCESS_KEY_ID および AWS_SECRET_ACCESS_KEY を検索します。
- それでも見つからなければ、IAM ロールを使用して一連の一時的な資格情報を取得します。
Amazon EC2 Instance Metadata Service に対してクエリを実行して、EC2 VM に発行される資格情報の取得を試みます。このメカニズムを利用できるのは、Amazon EC2 インスタンス上でアプリケーションを実行していて、かつそのインスタンスに関連付けられた IAM ロールがある場合のみですが、最高の使いやすさとセキュリティが得られます (Amazon EC2 インスタンスを扱う場合)。
注: シークレットはすべて JCEKS ファイルに保存できます。これらは暗号化され、パスワードで保護されたファイルです。詳細については、『Hadoop CredentialProvider Guide』を参照してください。
一時的なセキュリティ資格情報
一時的なセキュリティ資格情報は、Amazon Security Token Service から取得でき、アクセスキー、シークレットキー、およびセッショントークンで構成されます。
これらを使用して認証するには、以下の手順に従って実施してください。
- org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider をプロバイダーとして宣言します。
- プロパティ fs.s3a.session.token でセッションキーを設定し、アクセスキーおよびシークレットキーのプロパティをこの一時的セッションのプロパティに設定します。
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>fs.s3a.aws.credentials.provider</name> <value>org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider </value> </property> <property> <name>fs.s3a.access.key</name> <value>YOUR ACCESS KEY ID</value> </property> <property> <name>fs.s3a.secret.key</name> <value>YOUR SECRET ACCESS KEY</value> </property> <property> <name>fs.s3a.session.token </name> <value>SECRET-SESSION-TOKEN</value> </property> </configuration> |
セッション資格情報の有効期限は、その資格情報が発行された時点で固定されます。いったん有効期限が切れると、アプリケーションは AWS の認証を受けることができなくなるため、新しい一連の資格情報を取得する必要があります。
注: シークレットはすべて JCEKS ファイルに保存できます。これらは暗号化され、パスワードで保護されたファイルです。詳細については、『Hadoop CredentialProvider Guide』を参照してください。
IAM Assumed Role の使用方法
Assumed Role を使用するには、ラッパー構成ファイル Custom core-site.xml の構成オプション fs.s3a.aws.credentials.provider で、Assumed Role 資格情報プロバイダー org.apache.hadoop.fs.s3a.auth.AssumedRoleCredentialProvider を使用するように構成する必要があります。
この Assumed Role 資格情報プロバイダーは、Session Token Service Assumed Role API への接続に必要な fs.s3a.assumed.role.* オプションで読み取ります。
- まず、完全な資格情報で認証します。これは、通常の fs.s3a.access.key および fs.s3a.secret.key ペア、環境変数、またはその他の有効期間の長いシークレットのサプライヤーを意味します。
org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider 以外の認証メカニズムを使用する場合、プロパティ fs.s3a.assumed.role.credentials.provider で設定します。
- 次に、fs.s3a.assumed.role.arn で指定された特定のロールを引き受けます。
- その後、このログインは fs.s3a.assumed.role.session.duration で構成された頻度で更新されます。
以下に、このカスタムラッパーの構成ファイル Custom core-site.xml を使用して IAM Assumed Role を構成するために必要なプロパティを示します。ディストリビューションの conf フォルダーの中にある core-site.xml をガイドとして使用できます。
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>fs.s3a.aws.credentials.provider</name> <value>org.apache.hadoop.fs.s3a.AssumedRoleCredentialProvider</value> <value>org.apache.hadoop.fs.s3a.auth.AssumedRoleCredentialProvider</value> </property> <property> <name>fs.s3a.assumed.role.arn</name> <value>YOUR AWS ROLE</value> <description> AWS ARN for the role to be assumed. Required if the fs.s3a.aws.credentials.provider contains org.apache.hadoop.fs.s3a.AssumedRoleCredentialProvider </description> </property> <property> <name>fs.s3a.assumed.role.credentials.provider</name> <value>org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider</value> <description> List of credential providers to authenticate with the STS endpoint and retrieve short-lived role credentials. Only used if AssumedRoleCredentialProvider is the AWS credential Provider. If unset, uses "org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider". </description> </property> <property> <name>fs.s3a.assumed.role.session.duration</name> <value>30m</value> <description> Duration of assumed roles before a refresh is attempted. Only used if AssumedRoleCredentialProvider is the AWS credential Provider. Range: 15m to 1h </description> </property> <property> <name>fs.s3a.access.key</name> <value>YOUR ACCESS KEY ID</value> </property> <property> <name>fs.s3a.secret.key</name> <value>YOUR SECRET ACCESS KEY</value> </property> </configuration> |
注: シークレットはすべて JCEKS ファイルに保存できます。これらは暗号化され、パスワードで保護されたファイルです。詳細については、『Hadoop CredentialProvider Guide』を参照してください。
S3 互換ストレージのプロパティ
バケット名にアンダースコアを含めることはできません。「S3 の命名規則」を参照してください。
S3 互換ストレージ、つまり Amazon S3 とは異なるストレージにアクセスする場合、プロパティ fs.s3a.endpoint が必須です。
仮想ホスト形式のアドレス指定を使用しているか、パス形式のアドレス指定を使用しているかによっては、プロパティ fs.s3a.path.style.access も必須になる可能性があります (デフォルトではホスト形式が有効)。
- ホスト形式: http://bucket.endpoint/object
- パス形式: http://endpoint/bucket/object
また、次の構成では、SSL の有効化または無効化が可能であることを確認してください。有効にした場合、SSL 証明書を検証するように Denodo サーバーを構成する必要があります。
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>fs.s3a.endpoint</name> <value>IP ADDRESS TO CONNECT TO</value> </property> <property> <name>fs.s3a.path.style.access</name> <value>true/false</value> <description>Enables S3 path style access that is disabling the default virtual hosting behavior(default: false)</description> </property> <property> <name>fs.s3a.access.key</name> <value>YOUR ACCESS KEY ID</value> </property> <property> <name>fs.s3a.secret.key</name> <value>YOUR SECRET ACCESS KEY</value> </property> <property> <name>fs.s3a.connection.ssl.enabled</name> <value>true/false</value> <description>Enables or disables SSL connections to S3 (default: true)</description> </property> </configuration> |
注: シークレットはすべて JCEKS ファイルに保存できます。これらは暗号化され、パスワードで保護されたファイルです。詳細については、『Hadoop CredentialProvider Guide』を参照してください。
署名バージョン 4 のサポート
署名バージョン4の署名プロトコルを使用する場合、AWS では明確なリージョンエンドポイントを使用することが要求され、したがって特定のエンドポイントを使用するように S3A を構成する必要があります。これを行うには、ラッパーの Custom core-site.xml の構成オプション fs.s3a.endpoint を使用します。ディストリビューションの conf フォルダーの中にある core-site.xml をガイドとして使用できます。適切に構成しない場合、無効なリクエスト例外がスローされる可能性があります。
構成の一例として、S3 Frankfurt のエンドポイントが S3.eu-central-1.amazonaws.com の場合を次に示します。
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>fs.s3a.endpoint</name> <value>s3.eu-central-1.amazonaws.com</value> <description>AWS S3 endpoint to connect to. An up-to-date list is this property, the standard region (s3.amazonaws.com) is assumed. </property> </configuration> |
サポートされる AWS リージョンのバージョンの全リストは、Amazon Simple Storage Service (Amazon S3) Web サイトに掲載されています。
Azure Data Lake Storage
Distributed File System Custom Wrapper は、Azure Data Lake Storage に保存されているデータにアクセスできます。
認証プロパティの構成
ラッパー構成ファイル Custom core-site.xml に資格情報を配置します。ディストリビューションの conf フォルダーの中にある core-site.xml をガイドとして使用できます。
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>fs.adl.oauth2.access.token.provider.type</name> <value>ClientCredential</value> </property> <property> <name>fs.adl.oauth2.refresh.url</name> <value>YOUR TOKEN ENDPOINT</value> </property> <property> <name>fs.adl.oauth2.client.id</name> <value>YOUR CLIENT ID</value> </property> <property> <name>fs.adl.oauth2.credential</name> <value>YOUR CLIENT SECRET</value> </property> </configuration> |
注: シークレットはすべて JCEKS ファイルに保存できます。これらは暗号化され、パスワードで保護されたファイルです。詳細については、『Hadoop CredentialProvider Guide』を参照してください。
Azure Blob Storage
Distributed File System Custom Wrapper は、Azure Blob Storage に保存されているデータにアクセスできます。
認証プロパティの構成
ラッパー構成ファイル Custom core-site.xml に資格情報を配置します。ディストリビューションの conf フォルダーの中にある core-site.xml をガイドとして使用できます。
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>fs.azure.account.key.<account>.blob.core.windows.net</name> <value>YOUR ACCESS KEY</value> </property> </configuration> |
注: シークレットはすべて JCEKS ファイルに保存できます。これらは暗号化され、パスワードで保護されたファイルです。詳細については、『Hadoop CredentialProvider Guide』を参照してください。
Azure Data Lake Storage Gen 2
Distributed File System Custom Wrapper for Denodo 7.0 以降 (この機能には Java 8 が必要であるため) では、このラッパーは Azure Data Lake Storage Gen 2 に保存されているデータにアクセスできます。
デフォルトでは、ADLS Gen2 は abfs:// および abfss:// によって TLS を使用します。fs.azure.always.use.https=false プロパティを設定した場合、TLS は abfs:// によって無効化され、abfss:// によって有効化されます。
認証プロパティの構成
認証プロパティを構成するには、ラッパー構成ファイル Custom core-site.xml に資格情報を配置します。ディストリビューションの conf フォルダーの中にある core-site.xml をガイドとして使用できます。
以下の 2 つの認証方法から選択できます。
- OAuth 2.0:
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>fs.azure.account.auth.type</name> <value>OAuth</value> </property> <property> <name>fs.azure.account.oauth.provider.type</name> <value>org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider</value> </property> <property> <name>fs.azure.account.oauth2.client.endpoint</name> <value>URL of OAuth endpoint</value> </property> <property> <name>fs.azure.account.oauth2.client.id</name> <value>CLIENT-ID</value> </property> <property> <name>fs.azure.account.oauth2.client.secret</name> <value>SECRET</value> </property> </configuration> |
- Shared Key: ストレージアカウントの認証シークレットを使用します。
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>fs.azure.account.key.<account>.dfs.core.windows.net</name> <value>YOUR ACCOUNT KEY</value> </property> </configuration> |
注: シークレットはすべて JCEKS ファイルに保存できます。これらは暗号化され、パスワードで保護されたファイルです。詳細については、『Hadoop CredentialProvider Guide』を参照してください。
Google Cloud Storage
Distributed File System Custom Wrapper for Denodo 7.0 以降 (この機能には Java 8 が必要であるため) では、このラッパーは Google Cloud Storage に保存されているデータにアクセスできます。
認証プロパティの構成
ラッパー構成ファイル Custom core-site.xml に資格情報を配置します。ディストリビューションの conf フォルダーの中にある core-site.xml をガイドとして使用できます。
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration>
<property> <name>google.cloud.auth.service.account.enable</name> <value>true</value> <description>Whether to use a service account for GCS authorization. If an email and keyfile are provided then that service account will be used. Otherwise the connector will look to see if it running On a GCE VM with some level of GCS access in its service account scope, and use that service account.</description> </property> <property> <name>google.cloud.auth.service.account.json.keyfile</name> <value>/PATH/TO/KEYFILE</value> <description>The JSON key file of the service account used for GCS access when google.cloud.auth.service.account.enable is true.</description> </property> </configuration> |
アクセス許可
(H)DFSDelimitedTextFileWrapper や (H)DFSAvroFileWrapper など、Google Cloud Storage からファイルの内容を読み取るラッパーは、storage.objects.get アクセス許可を使用してアクセスする必要があります。
DFSListFilesWrapper は、バケットからファイルをリストするため、storage.buckets.get アクセス許可を使用してアクセスする必要があります。
ロールおよびアクセス許可の詳細については、https://cloud.google.com/storage/docs/access-control/iam-roles を参照してください。
圧縮ファイル
Distributed File System Custom Wrapper は、以下の圧縮形式で圧縮されたファイルを透過的に読み込みます。
- gzip
- DEFLATE (zlib)
- bzip2
- snappy
- LZO
- LZ4
- Zstandard
Kerberos によるセキュアクラスター
Kerberos を有効にした状態で Hadoop クラスターにアクセスするために必要な構成は、分散ファイルシステムにアクセスするために必要な構成と同じです。また、ユーザーが Kerberos 資格情報を提供する必要があります。
Kerberos パラメーターは以下のとおりです。
- Kerberos enabled: Kerberos を有効にして Hadoop クラスターにアクセスする場合にチェックします。
- Kerberos principal name (オプション): Kerberos v5 プリンシパル名 (例: primary/instance\@realm)。
! 注意 |
補間変数を示すために使用される特殊文字 @、\、^、{、} のいずれかを含むリテラルを入力する場合、それらの文字を \ でエスケープする必要があります。 たとえば、Kerberos プリンシパル名に「@」が含まれる場合、「\@」と入力する必要があります。 |
- Kerberos keytab file (オプション): Kerberos プリンシパルのキーを含む keytab ファイル。
- Kerberos password (オプション): プリンシパルに関連付けられたパスワード。
- Kerberos Distribution Center (オプション): Kerberos キー配布センター。
Distributed File System Custom Wrapper は、以下の 3 通りの方法で Kerberos が有効な Hadoop クラスターにアクセスします。
- たとえば、Kerberos クライアントの kinit コマンドを使用して取得した有効な Kerberos チケットがチケットキャッシュに入っている。
この場合に必要なのは、Kerberos enabled パラメーターのチェックのみです。ラッパーは、Kerberos チケットを使用して Hadoop クラスターに対して自身を認証します。
- 有効な Kerberos チケットがチケットキャッシュに入っていない。この場合、Kerberos principal name パラメーターと、以下のいずれかのパラメーターを指定する必要があります。
- Kerberos keytab file パラメーター
- Kerberos password パラメーター
これら 3 つのシナリオのいずれの場合も、krb5.conf ファイルがファイルシステム内に存在していなければなりません。Kerberos 構成ファイルの一例を以下に示します。
[libdefaults] renew_lifetime = 7d forwardable = true default_realm = EXAMPLE.COM ticket_lifetime = 24h dns_lookup_realm = false dns_lookup_kdc = false [domain_realm] sandbox.hortonworks.com = EXAMPLE.COM cloudera = CLOUDERA [realms] EXAMPLE.COM = { admin_server = sandbox.hortonworks.com kdc = sandbox.hortonworks.com } CLOUDERA = { kdc = quickstart.cloudera admin_server = quickstart.cloudera max_renewable_life = 7d 0h 0m 0s default_principal_flags = +renewable } [logging] default = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log kdc = FILE:/var/log/krb5kdc.log |
krb5.conf ファイルの検索アルゴリズムは、以下のとおりです。
- システムプロパティ java.security.krb5.conf が設定されている場合、その値はパスとファイル名を指定するものと見なされます。
- そのシステムプロパティ値が設定されていない場合、ディレクトリ内で構成ファイルが検索されます。
- <java-home>\lib\security (Windows)
- <java-home>/lib/security (Solaris および Linux)
- それでもファイルが見つからない場合、以下の検索が試みられます。
- /etc/krb5/krb5.conf (Solaris)
- c:\winnt\krb5.ini (Windows)
- /etc/krb5.conf (Linux)
ただし、例外があります。同じキー配布センターと同じレルムを使用する VDP ビューを作成する場合、ファイルシステム内に krb5.conf ファイルを用意する代わりに、Kerberos Distribution Center パラメーターを指定することもできます。
データソースの編集
トラブルシューティング
症状
エラーメッセージ: 「org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block.」
対策
Custom hdfs-site.xml ファイルに以下のプロパティを追加します。
<property> <name>dfs.client.use.datanode.hostname</name> <value>true</value> </property> |
症状
エラーメッセージ: 「SIMPLE authentication is not enabled. Available:[TOKEN, KERBEROS]」
対策
Kerberos 対応 Hadoop クラスターに接続しようとしています。それに応じてカスタムラッパーを適切に構成する必要があります。このカスタムラッパーでの Kerberos の構成については、「Kerberos によるセキュアクラスター」を参照してください。
症状
エラーメッセージ: 「Cannot get Kerberos service ticket: KrbException: Server not found in Kerberos database (7).」
対策
nslookup が KDC の完全修飾ホスト名を返していることを確認します。返していない場合、クライアントマシンの KDC エントリの /etc/hosts を「IP address fully.qualified.hostname alias」の形に修正します。
症状
エラーメッセージ: 「This authentication mechanism is no longer supported.」
対策
URL、s3a://<id>:<secret>@<bucket> に資格情報を配置する方法は推奨されません。資格情報は core-site.xml で構成してください (「S3」を参照)。
症状
エラーメッセージ: 「Could not initialize class org.xerial.snappy.Snappy」
対策
Linux プラットフォームでは、Snappy 圧縮/解凍を有効にした場合、たとえクラスパスからネイティブライブラリが利用可能でもエラーが発生することがあります。
Snappy 圧縮のネイティブライブラリ snappy-<version>-libsnappyjava.so は、snappy-java-<version>.jar ファイルに含まれています。このライブラリは、JVM が JAR を初期化する際、デフォルトの一時ディレクトリに追加されます。上記の例外は、デフォルトの一時ディレクトリが noexec オプションを指定してマウントされている場合に発生します。
これを解決するには、Denodo サーバーの JVM オプションとして、noexec オプションを指定しないですでにマウントされている別の一時ディレクトリを指定する必要があります。
-Dorg.xerial.snappy.tempdir=/path/to/newtmp |
付録
Hadoop ベンダーのクライアントライブラリの使用方法
場合によっては、このカスタムラッパーで配布される Apache Hadoop ライブラリではなく、接続先の Hadoop ベンダー (Cloudera や Hortonworks など) のライブラリを使用することが推奨されます。
Hadoop ベンダーのライブラリを使用する場合、「VDP へのカスタムラッパーのインポート」で説明しているように、Distributed File System Custom Wrapper を拡張機能としてインポートする必要はありません。
[Select Jars] オプションではなく、「Classpath」パラメーターを使用してカスタムデータソースを作成する必要があります。
[Browse] をクリックし、以下に示す、このカスタムラッパーに必要な依存関係を含むディレクトリを選択します。
- このカスタムラッパーディストリビューションの dist ディレクトリの denodo-hdfs-customwrapper-${version}.jar ファイル (以下の画像の、オレンジ色で強調表示されたファイル)。
- Apache Hadoop ライブラリをベンダー固有のライブラリに置き換えた、このカスタムラッパーディストリビューションの lib ディレクトリの内容 (以下の画像の、Cloudera jar であることを示す、接尾辞が青色で強調表示されたファイル)。
Cloudera および Hortonworks Hadoop ディストリビューションのライブラリは、以下のリポジトリから入手できます。
- Hortonworks リポジトリ:
http://repo.hortonworks.com/content/repositories/releases/org/apache/hadoop/
C:\Work\denodo-hdfs-libs ディレクトリ
Distributed File System データソース
! 注意 |
[Browse] をクリックしたときの参照先は、Administration Tool が稼働しているホストではなく、サーバーが稼働しているホストのファイルシステムです。 |
MapR XD (MapR-FS) への接続方法
MapR のマニュアルより引用: 「MapR XD Distributed File and Object Store は、構造化データおよび非構造化データを管理します。エクサバイト規模のデータを保存できるように設計されており、数兆個のファイルをサポートし、1 つのプラットフォームで分析機能と操作機能を兼ね備えています。」
MapR XD は HDFS 互換 API をサポートしているため、DFS Custom Wrapper を使用して MapR FileSystem に接続することができます。ここでは、その手順について説明します。
MapR Client のインストール
MapR クラスターに接続するには、クライアントマシン (VDP サーバーが稼働しているマシン) に MapR Client をインストールする必要があります。
- MapR Client をインストールするマシンのオペレーティングシステムがサポートされていることを確認します。「MapR Client Support Matrix」を参照してください。
- https://package.mapr.com/releases/ で MapR パッケージを取得し、https://mapr.com/docs/home/AdvancedInstallation/SettingUptheClient-install-mapr-client.html で説明されているインストール手順を実施します。これらの手順は、オペレーティングシステムによって大きく異なります。
$MAPR_HOME 環境変数を、MapR Client をインストールしたディレクトリに設定します。MAPR_HOME 環境変数を定義しない場合、/opt/mapr がデフォルトパスです。
mapr-clusters.conf ファイルのコピー
mapr-clusters.conf を MapR クラスターから VDP マシンの $MAPR_HOME/conf フォルダーにコピーします。
demo.mapr.com secure=true maprdemo:7222 |
MapR チケットの生成 (セキュアクラスターのみ)
セキュアクラスターにアクセスする必要があるすべてのユーザーの一時ディレクトリ (デフォルトの場所) に、MapR チケット (maprticket_<ユーザー名>) が入っている必要があります。
生成するには $MAPR_HOME/maprlogin コマンドラインツールを使用します。
C:\opt\mapr\bin>maprlogin.bat password -user mapr [Password for user 'mapr' at cluster 'demo.mapr.com': ] MapR credentials of user 'mapr' for cluster 'demo.mapr.com' are written to 'C:\Users\<username>\AppData\Local\Temp/maprticket_<username>' |
JVM オプションの追加
-Dmapr.library.flatclass を VDP サーバーの JVM オプションに追加します。
VDP サーバーの JVM オプション
追加しない場合、VDP は Kafka カスタムラッパーの実行中に、JNISecurity.SetParsingDone() から例外 java.lang.UnsatisfiedLinkError をスローします。
カスタムデータソースの作成
MapR ベンダーのライブラリを使用する場合、DFS カスタムラッパーを Denodo にインポートする必要はありません。
[Select Jars] オプションではなく、「Classpath」パラメーターを使用してカスタムデータソースを作成する必要があります。[Browse] をクリックし、以下に示す、このカスタムラッパーに必要な依存関係を含むディレクトリを選択します。
- このカスタムラッパーディストリビューションの dist ディレクトリの denodo-hdfs-customwrapper-${version}.jar ファイル
- Apache Hadoop ライブラリを MapR のライブラリに置き換えた、このカスタムラッパーディストリビューションの lib ディレクトリの内容
MapR Maven リポジトリは、http://repository.mapr.com/maven/ にあります。使用する必要がある JAR ファイルの名前には、使用している Hadoop、Kafka、Zookeeper、および MapR のバージョンが以下のように含まれています。
- hadoop-xxx-<hadoop_version>-<mapr_version>
- maprfs-<mapr_version>
MapRClient ネイティブライブラリは maprfs-<mapr_version> jar にバンドルされているため、すでにインストールした MapR Client に付属する maprfs jar を使用する必要があります (ライブラリはオペレーティングシステムに依存するため)。
- zookeeper-<zookeeper_version>-<mapr_version>
- json-<version>
- このカスタムラッパーディストリビューションの lib ディレクトリ内にあるその他の依存関係
! 重要 |
MapR ネイティブライブラリは、これらのカスタムラッパー依存関係に含まれており、一度だけロードできます。 したがって、以下のような他の MapR ソースに Denodo でアクセスする予定がある場合、
同じクラスパスを使用して、すべてのカスタムラッパーおよび JDBC ドライバーを構成する必要があります。上の画像の「C:\Work\MapR Certification\mapr-lib」を参照してください。 この構成により、Denodo は同じクラスローダーを再利用して、ネイティブライブラリを一度だけロードすることができます。 |
データソースと基本ビューの構成
DFS ラッパーのパラメーターを、以下のように通常どおり構成します。
MapR データソースの編集
MapR の基本ビューの編集