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>