搭配 Azure HDInsight 叢集使用 Data Lake Storage Gen2

Azure Data Lake Storage Gen2 是巨量資料分析專用的雲端儲存體服務,以 Azure Blob 儲存體為基礎。 Data Lake Storage Gen2 結合 Azure Blob 儲存體和 Azure Data Lake Storage Gen1 的功能。 產生的服務提供來自 Azure Data Lake Storage Gen1 的功能,包括:檔案系統語意、目錄層級和檔案層級安全性,以及適應性。 還有來自 Azure Blob 儲存體的低成本階層式儲存體、高可用性及災害復原功能。

如需完整比較使用 Data Lake Storage Gen2 建立叢集的選項,請參閱比較用於 Azure HDInsight 叢集的儲存體選項

警告

不論使用與否,HDInsight 叢集都是按分鐘計費。 請務必在使用完叢集後將它刪除。 請參閱如何刪除 HDInsight 叢集

Data Lake Storage Gen2 可用性

Data Lake Storage Gen2 是幾乎適用於所有 Azure HDInsight 叢集類型的儲存體選項,可作為預設和額外儲存體帳戶。 不過,針對 Data Lake Storage Gen2,HBase 只能有一個帳戶。

注意

選取 Data Lake Storage Gen2 作為主要儲存體類型之後,就無法選取 Data Lake Storage Gen1 作為額外儲存體。

使用 Data Lake Storage Gen2 建立 HDInsight 叢集

有關如何建立可存取 Data Lake Storage Gen2 的 HDInsight 叢集,請使用下列連結取得詳細指示。

HDInsight 中 Data Lake Storage Gen2 的存取控制

Data Lake Storage Gen2 支援哪些種類的權限?

Data Lake Storage Gen2 使用的存取控制模型支援 Azure 角色型存取控制 (Azure RBAC) 和 POSIX 型存取控制清單 (ACL)。 Data Lake Storage Gen1 支援的存取控制清單只能控制對資料的存取。

Azure RBAC 使用角色指派將權限集實際套用至 Azure 資源的使用者、群組和服務主體。 一般而言,這些 Azure 資源僅限於最上層資源 (例如 Azure Blob 儲存體帳戶)。 就 Azure Blob 儲存體及 Data Lake Storage Gen2 而言,此機制已擴充至檔案系統資源。

如需以 Azure RBAC 控制檔案權限的詳細資訊,請參閱 Azure 角色型存取控制 (Azure RBAC)

如需以 ACL 控制檔案權限的詳細資訊,請參閱檔案和目錄的存取控制清單

如何控制存取 Data Lake Storage Gen2 中的資料?

HDInsight 叢集對於 Data Lake Storage Gen2 中檔案的存取能力,是透過受控身分識別予以控制。 受控識別是在 Microsoft Entra 中註冊的身分識別,其認證由 Azure 所管理。 使用受控識別時,您不需要在 Microsoft Entra ID 中註冊服務主體。 或維護憑證之類的認證。

Azure 服務有兩種受控識別:系統指派和使用者指派。 HDInsight 會利用使用者指派的受控身分識別來存取 Data Lake Storage Gen2。 user-assigned managed identity 建立為獨立的 Azure 資源。 透過建立程序,Azure 會在所使用訂用帳戶信任的 Microsoft Entra 租用戶中建立身分識別。 建立身分識別之後,即可將它指派給一個或多個 Azure 服務執行個體。

使用者指派的身分識別與獲指派此身分識別的 Azure 服務執行個體,兩者的生命週期分開管理。 如需受控識別的詳細資訊,請參閱什麼是適用於 Azure 資源的受控識別?

如何為 Microsoft Entra 使用者設定權限,以使用 Hive 或其他服務查詢 Data Lake Storage Gen2 中的資料?

若要為使用者設定權限來查詢資料,請在 ACL 中使用 Microsoft Entra 安全性群組作為指派的主體。 請勿直接將檔案存取權限指派給個別使用者或服務主體。 使用 Microsoft Entra 安全性群組來控制權限流程時,您可以新增和移除使用者或服務主體,而不需要將 ACL 重新套用至整個目錄結構。 您只需要從適當的 Microsoft Entra 安全性群組新增或移除使用者即可。 ACL 不是繼承而來,因此重新套用 ACL 必須更新每個檔案和子目錄的 ACL。

從叢集存取檔案

有幾種方式可讓您從 HDInsight 叢集存取 Data Lake Storage Gen2 中的檔案。

  • 使用完整格式名稱。 使用這種方法,您可以針對想要存取的檔案提供完整路徑。

    abfs://<containername>@<accountname>.dfs.core.windows.net/<file.path>/
    
  • 使用簡短路徑格式。 使用這種方法,您可以利用以下方式取代到叢集根目錄的路徑:

    abfs:///<file.path>/
    
  • 使用相對路徑。 使用這種方法,您可以針對想要存取的檔案,只提供相對路徑。

    /<file.path>/
    

資料存取範例

範例是以叢集前端節點的 ssh 連線為基礎。 這些範例會使用這三個 URI 配置。 請將 CONTAINERNAMESTORAGEACCOUNT 取代為相關值

一些 hdfs 命令

  1. 在本機儲存體上建立檔案。

    touch testFile.txt
    
  2. 在叢集儲存體上建立目錄。

    hdfs dfs -mkdir abfs://CONTAINERNAME@STORAGEACCOUNT.dfs.core.windows.net/sampledata1/
    hdfs dfs -mkdir abfs:///sampledata2/
    hdfs dfs -mkdir /sampledata3/
    
  3. 將資料從本機儲存體複製到叢集儲存體。

    hdfs dfs -copyFromLocal testFile.txt  abfs://CONTAINERNAME@STORAGEACCOUNT.dfs.core.windows.net/sampledata1/
    hdfs dfs -copyFromLocal testFile.txt  abfs:///sampledata2/
    hdfs dfs -copyFromLocal testFile.txt  /sampledata3/
    
  4. 列出叢集儲存體上的目錄內容。

    hdfs dfs -ls abfs://CONTAINERNAME@STORAGEACCOUNT.dfs.core.windows.net/sampledata1/
    hdfs dfs -ls abfs:///sampledata2/
    hdfs dfs -ls /sampledata3/
    

建立 Hive 資料表

顯示三個檔案位置以供說明之用。 若為實際執行,請僅使用其中一個 LOCATION 項目。

DROP TABLE myTable;
CREATE EXTERNAL TABLE myTable (
    t1 string,
    t2 string,
    t3 string,
    t4 string,
    t5 string,
    t6 string,
    t7 string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
STORED AS TEXTFILE
LOCATION 'abfs://CONTAINERNAME@STORAGEACCOUNT.dfs.core.windows.net/example/data/';
LOCATION 'abfs:///example/data/';
LOCATION '/example/data/';

下一步