hadoop-azure-datalake
模組提供與 Azure Data Lake Store 整合的支援。此支援透過 JAR 檔案 azure-datalake-store.jar
提供。
adl
架構的 URL 參照檔案系統路徑,以進行安全 Webhdfs,亦即 SSL 加密存取。setOwner()
、setAcl
、removeAclEntries()
、modifyAclEntries()
接受 UPN 或 OID(物件 ID)作為使用者和群組名稱。部分或不支援下列作業
listStatus()
和 getFileStatus()
傳回的使用者和群組資訊,其格式為 Azure Active Directory 中關聯的 GUID。Azure Data Lake Storage 存取路徑語法為
adl://<Account Name>.azuredatalakestore.net/
有關使用儲存體的詳細資訊,請參閱 使用 Azure 入口網站開始使用 Azure Data Lake Store
使用 Azure Data Lake Storage 需要 OAuth2 持有者權杖,作為 HTTPS 標頭的一部分,符合 OAuth2 規範。必須從 Azure Active Directory 服務取得有效的 OAuth2 持有者權杖,供有權存取 Azure Data Lake Storage 帳戶的有效使用者使用。
Azure Active Directory (Azure AD) 是 Microsoft 的多租用戶雲端目錄和身分管理服務。請參閱 什麼是 ActiveDirectory。
下列各節說明 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 更新權杖。請參閱 Active Directory Library For Java。
請勿分享客戶端 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 內的的身分識別擴充功能管理。這樣做的優點是,身分識別由擴充功能管理,不必放入 core-site.xml。
若要使用 MSI,請修改 VM 部署範本以使用身分識別擴充功能。請注意您在範本中指定的埠號:這是身分識別擴充功能在 VM 中公開給本機端權杖服務的 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 ActiveDirectory 提供使用裝置碼的登入流程。
若要使用裝置碼流程,使用者必須先在 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 ...
執行此操作會列印一個 URL 和裝置代碼,可從任何瀏覽器(甚至在 ssh 會話外部的不同機器上)使用來登入。登入後,指令會繼續執行。
在許多 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/
注意:您也可以將提供者路徑屬性新增到 distcp
命令列,而不是將工作特定設定新增到一般 core-site.xml
。上面方括號說明了此功能。
在 core-site.xml
中設定憑證後,任何 Hadoop 元件都可以使用下列格式的 URL 參照該 Azure Data Lake Storage 帳戶中的檔案
adl://<Account Name>.azuredatalakestore.net/<path>
adl
架構識別由 Azure Data Lake Storage 支援的 Hadoop 相容檔案系統上的 URL。adl
使用加密的 HTTPS 存取來與 Azure Data Lake Storage API 進行所有互動。
例如,下列 檔案系統 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>