共用方式為


將 Apache HBase 遷移至新的版本和儲存體帳戶

本文討論如何用不同 Azure 儲存體帳戶,將 Azure HDInsight 上的 Apache HBase 叢集更新為較新版本。

本文僅適用於在來源和目的地叢集中使用不同 Azure 儲存體帳戶的情況。 如要升級來源和目的地叢集具有相同儲存體帳戶的版本,請參閱 將 Apache HBase 移轉至新版本

升級時的停機時間應該只有幾分鐘的時間。 這個停機時間是因排清所有記憶體內部資料的步驟,以及在新叢集上設定及重新啟動服務的時間所造成。 您的結果會依節點數目、資料量和其他變數而有所不同。

檢閱 Apache HBase 相容性

在升級 Apache HBase 之前,請確認來源和目的地叢集上的 HBase 版本相容。 請檢閱 HBase 版本相容性矩陣和 HBase 參考指南 中的版本資訊,以確定您的應用程式與新版本相容。

以下為範例相容性矩陣。 Y 表示相容性,而 N 表示潛在的不相容性:

相容性類型 主要版本 次要版本 Patch
用戶端-伺服器連線相容性 Y
伺服器-伺服器相容性 Y
檔案格式相容性 Y
用戶端 API 相容性 Y
用戶端二進位相容性 N N
伺服器端有限的 API 相容性
穩定 Y
發展中 N N
不穩定 N N N
相依性相容性 Y
作業相容性 N N

任何重大的不相容都需在 HBase 版本的版本資訊中加以說明。 在執行 HDInsight 和 HBase 目標版本的叢集中測試您的應用程式。

如需關於 HDInsight 版本和相容性的更多資訊,請參閱 Azure HDInsight 版本

Apache HBase 叢集移轉概觀

如要將 Azure HDInsight 上的 Apache HBase 叢集升級並移轉至新的儲存體帳戶,請完成下列基本步驟。 如需詳細的指示,請參閱詳細步驟和命令。

準備來源叢集:

  1. 停止擷取。
  2. 排清 memstore 資料。
  3. 停止 Ambari 的 HBase。
  4. 對於具有加速寫入的叢集,請備份「預寫記錄檔 (WAL)」目錄。

準備目的地叢集:

  1. 建立目的地叢集。
  2. 停止 Ambari 的 HBase。
  3. 清除 Zookeeper 資料。
  4. 切換使用者至 HBase。

完成移轉:

  1. 清除目的地檔案系統、移轉資料,然後移除/hbase/hbase.id
  2. 清除並移轉 WAL。
  3. 從 Ambari 目的地叢集啟動所有服務。
  4. 驗證 HBase。
  5. 刪除來源叢集。

詳細的移轉步驟和命令

使用這些詳細的步驟和命令,用儲存體帳戶來移轉 Apache HBase 叢集。

準備來源叢集

  1. 停止擷取來源 HBase 叢集。

  2. 排清您要升級的來源 HBase 叢集。

    HBase 會將傳入資料寫入名為 memstore 的記憶體內部存放區中。 memstore 觸達特定的大小之後,HBase 會將 memstore 排清到磁碟,以長期儲存在叢集的儲存體帳戶中。 升級之後若刪除來源叢集,也會刪除 memstores 中的所有資料。 若要保留資料,請先將每個資料表的 memstore 手動排清到磁碟再進行升級。

    您可以從 hbase-utils GitHub 存放庫執行 flush_all_tables.sh 指令碼,以排清 memstore 資料。

    您也可以從 HDInsight 叢集執行下列 HBase 殼層命令來排清 memstore 資料:

    hbase shell
    flush "<table-name>"
    
  3. 透過https://<OLDCLUSTERNAME>.azurehdinsight.net登入來源叢集上的 Apache Ambari,並停止 HBase 服務。

  4. 在確認提示字元中,選取方塊以開啟 HBase 的維護模式。

    如需連線至 Ambari 及使用 Ambari 的詳細資訊,請參閱使用 Ambari Web UI 管理 HDInsight 叢集

  5. 如果您的來源 HBase 叢集沒有加速寫入功能,請跳過此步驟。 針對具有加速寫入的來源 HBase 叢集,請在來源叢集的任何 Zookeeper 節點或背景工作角色節點上,從 SSH 工作階段執行下列命令,以備份 HDFS 下的 WAL 目錄。

    hdfs dfs -mkdir /hbase-wal-backup
    hdfs dfs -cp hdfs://mycluster/hbasewal /hbase-wal-backup
    

準備目的地叢集

  1. 在 Azure 入口網站中,設定新的目的地 HDInsight 叢集,其使用與來源叢集不同的儲存體帳戶。

  2. https://<NEWCLUSTERNAME>.azurehdinsight.net的新叢集上登入 Apache Ambari,並停止 HBase 服務。

  3. 在任何 Zookeeper 節點或背景工作角色節點中執行下列命令,以清除目的地叢集上的 Zookeeper 資料:

    hbase zkcli
    rmr /hbase-unsecure
    quit
    
  4. 執行sudo su hbase切換使用者至 HBase。

清除並移轉檔案系統和 WAL

根據您的來源 HDI 版本,以及來源和目的地叢集是否有加速寫入,執行下列命令。 目的地叢集一律為 HDI 4.0 版,由於 HDI 3.6 屬於基本支援,因此不建議用於新的叢集。

對於儲存體帳戶的<container-endpoint-url>https://<storageaccount>.blob.core.windows.net/<container-name>。 在 URL 結尾傳遞儲存體帳戶的 SAS 權杖。

  • 對於儲存體類型 WASB 的<container-fullpath>wasbs://<container-name>@<storageaccount>.blob.core.windows.net
  • Azure Data Lake Storage Gen2 儲存體類型的<container-fullpath>abfs://<container-name>@<storageaccount>.dfs.core.windows.net

複製命令

HDFS 複製命令為hdfs dfs <copy properties starting with -D> -cp

在複製不在分頁 Blob 中的檔案時,請使用hadoop distcp以提升效能:hadoop distcp <copy properties starting with -D>

如要傳遞儲存體帳戶的金鑰,請使用:

  • -Dfs.azure.account.key.<storageaccount>.blob.core.windows.net='<storage account key>'
  • -Dfs.azure.account.keyprovider.<storageaccount>.blob.core.windows.net=org.apache.hadoop.fs.azure.SimpleKeyProvider

您也可以在複製 HBase 資料檔案時,使用 AzCopy 來提升效能。

  1. 執行 AzCopy 命令:

    azcopy cp "<source-container-endpoint-url>/hbase" "<target-container-endpoint-url>" --recursive
    
  2. 如果目的地儲存體帳戶為 Azure Blob 儲存體,請於複製之後執行此步驟。 如果目的地儲存體帳戶為 Data Lake Storage Gen2,請跳過此步驟。

    Hadoop WASB 驅動程式會使用對應至每個目錄特殊 0 大小的 Blob。 AzCopy 會在執行複製時跳過這些檔案。 某些 WASB 作業會使用這些 Blob,因此必須於目的地叢集中將其建立。 如要建立 Blob,請從目的地叢集中的任何節點執行下列 Hadoop 命令:

    sudo -u hbase hadoop fs -chmod -R 0755 /hbase
    

您可以從 開始 AzCopy 來下載 AzCopy。 如需使用 AzCopy 的詳細資訊,請參閱 azcopy copy

來源叢集為具有加速寫入的 HDI 3.6 或 HDI 4.0,且目的地叢集具有加速寫入

  1. 如要清除檔案系統並移轉資料,請執行下列命令:

    hdfs dfs -rm -r /hbase 
    hadoop distcp <source-container-fullpath>/hbase /
    
  2. 執行hdfs dfs -rm /hbase/hbase.id以移除hbase.id

  3. 若要清除並移轉 WAL,請執行下列命令:

    hdfs dfs -rm -r hdfs://<destination-cluster>/hbasewal
    hdfs dfs -cp <source-container-fullpath>/hbase-wal-backup/hbasewal hdfs://<destination-cluster>/hbasewal
    

來源叢集為沒有加速寫入的 HDI 3.6,且目的地叢集具有加速寫入

  1. 如要清除檔案系統並移轉資料,請執行下列命令:

    hdfs dfs -rm -r /hbase 
    hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs,/hbase-wals" -cp <source-container-fullpath>/hbase /
    hdfs dfs -rm -r /hbase/*WALs
    
  2. 執行hdfs dfs -rm /hbase/hbase.id以移除hbase.id

  3. 若要清除並移轉 WAL,請執行下列命令:

    hdfs dfs -rm -r hdfs://<destination-cluster>/hbasewal/*
    hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs,/hbase-wals" -cp <source-container-fullpath>/hbase/*WALs hdfs://<destination-cluster>/hbasewal
    

來源叢集為沒有加速寫入的 HDI 3.6,且目的地叢集沒有加速寫入

  1. 如要清除檔案系統並移轉資料,請執行下列命令:

    hdfs dfs -rm -r /hbase 
    hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs,/hbase-wals" -cp <source-container-fullpath>/hbase /
    hdfs dfs -rm -r /hbase/*WALs
    
  2. 執行hdfs dfs -rm /hbase/hbase.id以移除hbase.id

  3. 若要清除並移轉 WAL,請執行下列命令:

    hdfs dfs -rm -r /hbase-wals/*
    hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs,/hbase-wals" -cp <source-container-fullpath>/hbase/*WALs /hbase-wals
    

來源叢集為沒有加速寫入的 HDI 4.0,且目的地叢集具有加速寫入

  1. 如要清除檔案系統並移轉資料,請執行下列命令:

    hdfs dfs -rm -r /hbase 
    hadoop distcp <source-container-fullpath>/hbase /
    
  2. 執行hdfs dfs -rm /hbase/hbase.id以移除hbase.id

  3. 若要清除並移轉 WAL,請執行下列命令:

    hdfs dfs -rm -r hdfs://<destination-cluster>/hbasewal
    hdfs dfs -Dfs.azure.page.blob.dir="/hbase-wals" -cp <source-container-fullpath>/hbase-wals hdfs://<destination-cluster>/hbasewal
    

來源叢集是沒有加速寫入的 HDI 4.0,且目的地叢集沒有加速寫入

  1. 如要清除檔案系統並移轉資料,請執行下列命令:

    hdfs dfs -rm -r /hbase 
    hadoop distcp <source-container-fullpath>/hbase /
    
  2. 執行hdfs dfs -rm /hbase/hbase.id以移除hbase.id

  3. 若要清除並移轉 WAL,請執行下列命令:

    hdfs dfs -rm -r /hbase-wals/*
    hdfs dfs -Dfs.azure.page.blob.dir="/hbase-wals" -cp <source-container-fullpath>/hbase-wals /
    

完成移轉

  1. 在目的地叢集上,儲存您的變更,並依照 Ambari 提示重新啟動所有必要服務。

  2. 將您的應用程式指向目的地叢集。

    注意

    您應用程式的靜態 DNS 名稱會在升級時變更。 您不必將此 DNS 名稱寫入程式碼,而是可以在網域名稱的 DNS 設定中設定 CNAME,以指向叢集的名稱。 另一個選項是使用您應用程式的組態檔,以便您無須重新部署即可進行更新。

  3. 啟動擷取。

  4. 驗證 HBase 一致性以及簡單的資料定義語言 (DDL) 和資料操作語言 (DML) 作業。

  5. 如果目的地叢集狀態理想,即可刪除來源叢集。

下一步

若要深入了解 Apache HBase 和升級 HDInsight 叢集,請參閱下列文章: