Cloudera で Azure Data Lake Store をサポート
執筆者: Paige Liu (Software Engineer, Azure)
このポストは、4 月 20 日に投稿された Cloudera now supports Azure Data Lake Store の翻訳です。
Cloudera Enterprise Data Hub 5.11 (英語) がリリースされ、Azure Data Lake Store (ADLS) 上の Cloudera クラスターで Spark や Hive、MapReduce のワークロードを実行できるようになりました。これらのワークロードを ADLS で実行すると、以下のようなメリットがあります。
- データ容量にかかわらずクラスターの拡大/縮小が可能。
- クラスターの追加や削除にかかわらずデータを保存可能。Azure Data Lake Analytics や Azure SQL Data Warehouse などの他のクラスターやコンピューティング エンジンでも、同じデータに対してワークロードを実行できます。
- Azure Active Directory と統合されたロール ベースのアクセス制御、および POSIX ベースの ACL によるユーザーやグループのきめ細かい認証が可能。
- 分析ワークロードに最適化されたパフォーマンスを発揮するクラウド HDFS で、数百テラバイトのデータの読み込みや書き込みを同時に実行可能。
- アカウントの容量や個々のファイル容量が無制限。
- Azure Key Vault でサービス側またはユーザー側で管理されるキーを使用して既定で保存中のデータを暗号化可能。通信中のデータは SSL で暗号化されます。
- 低コストで高可用性を実現。HDFS とクラウド ストレージ インフラストラクチャ レベルの両方でデータを複製する必要はなく、データのレプリカは Data Lake Store で管理され、HDFS 互換インターフェイスで接続されます。
使用を開始する場合は、まず Azure Marketplace で Cloudera Enterprise Data Hub のテンプレート (英語) または Cloudera Director のテンプレート (英語) を入手し、Cloudera クラスターを作成します。クラスターの作成が完了したら、以降で説明する手順のいずれかで ADLS を有効化します。
クラスター全体でアクセスできるように Data Lake Store を追加する
手順 1: ADLS での ID 管理と認証に Azure Active Directory を使用します。Cloudera クラスターから ADLS にアクセスするには、まず Azure AD でサービス プリンシパルを作成します。この際、サービス プリンシパルのアプリケーション ID、認証キー、テナント ID が必要です。
手順 2: 前の手順で作成したサービス プリンシパルにアクセス許可を割り当て、ADLS にアクセスできるようにします。Azure ポータルから Data Lake Store に移動し、データ エクスプローラーを開きます。次に目的のパスに移動し、[Access] を選択して、サービス プリンシパルを追加し適切なアクセス許可を割り当てます。ADLS でのアクセス制御の詳細については、こちらのドキュメントを参照してください。
手順 3: [Cloudera Manager]、[HDFS]、[Configuration] の順に選択し、core-site.xml で以下の構成を行います。
手順 1 で取得したサービス プリンシパルのプロパティの値でパラメーターを設定します。
<property>
<name>dfs.adls.oauth2.client.id</name>
<value>Application ID</value>
</property>
<property>
<name>dfs.adls.oauth2.credential</name>
<value>Authentication Key</value>
</property>
<property>
<name>dfs.adls.oauth2.refresh.url</name>
<value>https://login.microsoftonline.com/<Tenant ID>/oauth2/token</value>
</property>
<property>
<name>dfs.adls.oauth2.access.token.provider.type</name>
<value>ClientCredential</value>
</property>
手順 4: 以下のような Hadoop コマンドを実行して、ADLS にアクセスできることを確認します。
hdfs dfs -ls adl://<your adls account>.azuredatalakestore.net/<path to file>/
Hadoop コマンド ラインで Data Lake Store を指定する
クラスター全体に Data Lake Store のアクセス許可を構成する上記の方法の他に、MapReduce または Spark ジョブのコマンド ラインから ADLS のアクセス情報を指定することもできます。この方法では、サービス プリンシパルの代わりに Azure AD の更新トークンを使用し、ユーザーのホーム ディレクトリに存在する .JCEKS ファイルを使用して資格情報を暗号化します。この方法では以下のようなメリットがあります。
- 各ユーザーがクラスター全体の資格情報ではなく、自身の資格情報を使用可能。
- ユーザーの資格情報が各ユーザーのホーム ディレクトリの .JCEKS ファイルにより暗号化されているため、他のユーザーに開示されない。
- 構成ファイル内に資格情報を平文で記述する必要がない。
- Azure AD でサービス プリンシパルの作成権限を持つユーザーに依存する必要がない。
以下の手順は、クロス プラットフォームの Azure クライアント ツールにサインインして更新トークンを取得し、これを使用してセットアップを行う場合の例です。
手順 1: azure login コマンドで Azure CLI にサインインします。次に、ユーザーのホーム ディレクトリ内の .azure/accessTokens.json から「refreshToken」と「_clientId」を取得します。
手順 2: 以下のコマンドを実行して、ADLS にアクセスする資格情報をセットアップします。
export HADOOP_CREDSTORE_PASSWORD=<your encryption password>
hadoop credential create dfs.adls.oauth2.client.id -value <_clientId from Step 1> -provider jceks://hdfs/user/<username>/cred.jceks
hadoop credential create dfs.adls.oauth2.refresh.token -value ‘<refreshToken from Step 1>’ -provider jceks://hdfs/user/<username>/cred.jceks
手順 3: 以下のような Hadoop コマンドを実行して、ADLS にアクセスできることを確認します。
hdfs dfs -Ddfs.adls.oauth2.access.token.provider.type=RefreshToken -Dhadoop.security.credential.provider.path=jceks://hdfs/user/<username>/cred.jceks -ls adl://<your adls account>.azuredatalakestore.net/<path to file>
hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-0.20-mapreduce/hadoop-examples.jar teragen -Dmapred.child.env="HADOOP_CREDSTORE_PASSWORD=$HADOOP_CREDSTORE_PASSWORD" -Dyarn.app.mapreduce.am.env="HADOOP_CREDSTORE_PASSWORD=$HADOOP_CREDSTORE_PASSWORD" -Ddfs.adls.oauth2.access.token.provider.type=RefreshToken -Dhadoop.security.credential.provider.path=jceks://hdfs/user/<username>/cred.jceks 1000 adl://<your adls account>.azuredatalakestore.net/<path to file>
EDH 5.11 での ADLS のサポートに関する制限事項
- ADLS でサポートされているのは、Spark、Hive、MapReduce のワークロードのみです。ADLS での Impala や HBase、その他のサービスのサポートは、今後のリリースで予定されています。
- ADLS は、セカンダリ ストレージとしてサポートされます。ADLS にアクセスする場合、adl://<ユーザーの ADLS アカウント>.azuredatalakestore.net/<ファイル パス> という形式の完全修飾 URL を使用します。