hadoop-azure-datalakeモジュールは、Azure Data Lake Storeとの統合をサポートします。このサポートは、JARファイルazure-datalake-store.jarを通じて提供されます。
adlスキームを使用するURLを使用して、ファイルシステムパスを参照します。setOwner()、setAcl、removeAclEntries()、modifyAclEntries()は、ユーザー名およびグループ名としてUPNまたはOID(オブジェクトID)を受け入れます。次の操作に対する部分的またはサポートなし
listStatus()およびgetFileStatus()として返されるユーザーおよびグループ情報は、Azure Active Directoryに関連付けられているGUIDの形式です。Azure Data Lake Storageのアクセスパスの構文は
adl://<Account Name>.azuredatalakestore.net/
ストアの使用に関する詳細については、Azure Portalを使用してAzure Data Lake Storeを使い始めるを参照してください。
Azure Data Lake Storageの使用には、OAuth2仕様に従って、HTTPSヘッダーの一部としてOAuth2ベアラートークンが存在する必要があります。有効なOAuth2ベアラートークンは、Azure Data Lake Storageアカウントへのアクセス権を持つ有効なユーザーに対して、Azure Active Directoryサービスから取得する必要があります。
Azure Active Directory(Azure AD)は、MicrosoftのマルチテナントクラウドベースのディレクトリおよびID管理サービスです。Active Directoryとはを参照してください。
次のセクションでは、core-site.xmlでのOAuth2構成について説明します。
クレデンシャルは、リフレッシュトークン(ユーザーに関連付けられている)またはクライアントクレデンシャル(サービスプリンシパルに類似)を使用して構成できます。
次のプロパティをクラスターのcore-site.xmlに追加します
<property> <name>fs.adl.oauth2.access.token.provider.type</name> <value>RefreshToken</value> </property>
アプリケーションは、クライアントIDに関連付けられたAzure Active Directoryサービスから、クライアントIDとOAuth2リフレッシュトークンを設定する必要があります。Java用Active Directoryライブラリを参照してください。
クライアントIDとリフレッシュトークンを共有しないでください。秘密にしておく必要があります。
<property> <name>fs.adl.oauth2.client.id</name> <value></value> </property> <property> <name>fs.adl.oauth2.refresh.token</name> <value></value> </property>
アクセス制御(IAM)を選択します次のプロパティをcore-site.xmlに追加します
<property> <name>fs.adl.oauth2.access.token.provider.type</name> <value>ClientCredential</value> </property> <property> <name>fs.adl.oauth2.refresh.url</name> <value>TOKEN ENDPOINT FROM STEP 7 ABOVE</value> </property> <property> <name>fs.adl.oauth2.client.id</name> <value>CLIENT ID FROM STEP 7 ABOVE</value> </property> <property> <name>fs.adl.oauth2.credential</name> <value>PASSWORD FROM STEP 7 ABOVE</value> </property>
Azure VMは、VM内のID拡張機能によって管理される「サービスID」を使用してプロビジョニングできます。これを行う利点は、クレデンシャルが拡張機能によって管理され、core-site.xmlに入れる必要がないことです。
MSIを使用するには、VMデプロイテンプレートをID拡張機能を使用するように変更します。テンプレートで指定したポート番号をメモします。これは、VM内のID拡張機能によってlocalhostに公開されるトークンサービスのRESTエンドポイントのポート番号です。デフォルトの推奨ポート番号は50342です。推奨ポート番号が使用されている場合、構成で以下のmsi.port設定を省略できます。
次のプロパティをcore-site.xmlに追加します
<property> <name>fs.adl.oauth2.access.token.provider.type</name> <value>Msi</value> </property> <property> <name>fs.adl.oauth2.msi.port</name> <value>PORT NUMBER FROM ABOVE (if different from the default of 50342)</value> </property>
注:この認証方法は、対話型ツールの実行には適していますが、クラスターに送信されたジョブには機能しません。
ユーザーベースのログインを使用するために、Azure Active Directoryはデバイスコードを使用したログインフローを提供します。
デバイスコードフローを使用するには、まずAzureポータルでネイティブアプリの登録を作成し、アプリのクライアントIDを構成として指定する必要があります。手順は次のとおりです
次のプロパティをcore-site.xmlに追加します
<property> <name>fs.adl.oauth2.devicecode.clientappid</name> <value>APP ID FROM STEP 5 ABOVE</value> </property>
通常、DeviceCodeをデフォルトのトークンプロバイダータイプとして追加することは望ましくありません。ただし、ローカルコマンドを使用する場合は使用できます
hadoop fs -Dfs.adl.oauth2.access.token.provider.type=DeviceCode -ls ...
これを実行すると、任意のブラウザ(SSHセッション外の別のマシンでも)からログインするために使用できるURLとデバイスコードが出力されます。ログインが完了すると、コマンドが続行されます。
多くのHadoopクラスターでは、core-site.xmlファイルは世界中で読み取り可能です。これらのクレデンシャルを保護するために、クレデンシャルプロバイダーフレームワークを使用して安全に保存し、アクセスすることをお勧めします。
すべてのADLSクレデンシャルプロパティは、クレデンシャルプロバイダーによって保護できます。クレデンシャルプロバイダーAPIの詳細については、クレデンシャルプロバイダーAPIを参照してください。
hadoop credential create fs.adl.oauth2.client.id -value 123
-provider localjceks://file/home/foo/adls.jceks
hadoop credential create fs.adl.oauth2.refresh.token -value 123
-provider localjceks://file/home/foo/adls.jceks
<property> <name>fs.adl.oauth2.access.token.provider.type</name> <value>RefreshToken</value> </property> <property> <name>hadoop.security.credential.provider.path</name> <value>localjceks://file/home/foo/adls.jceks</value> <description>Path to interrogate for protected credentials.</description> </property>
hadoop distcp
[-D fs.adl.oauth2.access.token.provider.type=RefreshToken
-D hadoop.security.credential.provider.path=localjceks://file/home/user/adls.jceks]
hdfs://<NameNode Hostname>:9001/user/foo/srcDir
adl://<Account Name>.azuredatalakestore.net/tgtDir/
注:core-site.xmlにジョブ固有の構成を追加する代わりに、distcpコマンドラインにプロバイダーパスプロパティをオプションで追加できます。上の角かっこは、この機能を示しています。
クレデンシャルがcore-site.xmlで構成されると、Hadoopコンポーネントは、次の形式のURLを使用して、そのAzure Data Lake Storageアカウント内のファイルを参照できます。
adl://<Account Name>.azuredatalakestore.net/<path>
スキームadlは、Azure Data Lake StorageによってバックアップされたHadoop互換ファイルシステムのURLを識別します。adlは、Azure Data Lake Storage APIとのすべてのやり取りに、暗号化されたHTTPSアクセスを利用します。
たとえば、次のFileSystem Shellコマンドは、youraccountという名前のストレージアカウントへのアクセスを示しています。
hadoop fs -mkdir adl://yourcontainer.azuredatalakestore.net/testDir hadoop fs -put testFile adl://yourcontainer.azuredatalakestore.net/testDir/testFile hadoop fs -cat adl://yourcontainer.azuredatalakestore.net/testDir/testFile test file content
hadoop-azure-datalakeモジュールは、getFileStatus()、listStatus()、およびgetAclStatus()呼び出し中にユーザー/グループ情報がどのように表現されるかを構成するためのサポートを提供します。
次のプロパティをcore-site.xmlに追加してください。
<property>
<name>adl.feature.ownerandgroup.enableupn</name>
<value>true</value>
<description>
When true : User and Group in FileStatus/AclStatus response is
represented as user friendly name as per Azure AD profile.
When false (default) : User and Group in FileStatus/AclStatus
response is represented by the unique identifier from Azure AD
profile (Object ID as GUID).
For performance optimization, Recommended default value.
</description>
</property>
異なるADLアカウントには、異なるADLクライアント構成でアクセスできます。これにより、異なるログイン詳細情報を使用することもできます。
fs.adlオプションは、アカウントごとに設定できます。fs.adl.プレフィックスをfs.adl.account.ACCOUNTNAME.に置き換えることで設定します。ここで、ACCOUNTNAMEはアカウントの名前です。fs.adl.値をオーバーライドします。例として、構成では、パブリックアカウントadl://<some-public-account>.azuredatalakestore.net/を使用するための基本構成と、プライベートアカウントadl://myprivateaccount.azuredatalakestore.net/を使用するためのアカウント固有の構成を持つことができます。
<property> <name>fs.adl.oauth2.client.id</name> <value>CLIENTID</value> </property> <property> <name>fs.adl.oauth2.credential</name> <value>CREDENTIAL</value> </property> <property> <name>fs.adl.account.myprivateaccount.oauth2.client.id</name> <value>CLIENTID1</value> </property> <property> <name>fs.adl.account.myprivateaccount.oauth2.credential</name> <value>CREDENTIAL1</value> </property>
hadoop-azureモジュールには、完全なユニットテストスイートが含まれています。ほとんどのテストは、mvn testを実行することで追加構成なしで実行されます。これには、Azure Data Lake Storageのインメモリエミュレーションであるモックストレージに対するテストが含まれます。
一部のテストは、Azure Data Lake Storageに対して実行できます。これらのテストを実行するには、上記のセクションで説明したAdlアカウント情報と次のプロパティを使用して、src/test/resources/auth-keys.xmlを作成してください。
<property>
<name>fs.adl.test.contract.enable</name>
<value>true</value>
</property>
<property>
<name>test.fs.adl.name</name>
<value>adl://yourcontainer.azuredatalakestore.net</value>
</property>