將 HDFS 資料從內部部署環境遷移至 Google Cloud Platform

本指南說明將資料從內部部署的 Hadoop 分散式檔案系統 (HDFS) 移至 Google Cloud Platform (GCP) 的程序。

我們針對如何從內部部署 Hadoop 遷移資料提供了四個指南,這是第二個指南:

規劃您的資料遷移

下列各節說明將資料從內部部署 HDFS 遷移至 GCP 的最佳做法。我們計劃以漸進方式遷移,讓您可以預留時間在移動每個資料主體之後遷移工作,以及進行實驗和測試。

決定移動資料的方式

將 HDFS 資料轉移至雲端有兩種不同的遷移模型:推送和提取。這兩個模型雖然都使用 Hadoop DistCp 將資料從內部部署 HDFS 叢集複製到 Cloud Storage,卻是透過不同的方法進行。

推送模型是最簡易的模型:來源叢集會在其資料節點上執行 distcp 工作,再將檔案直接推送至 Cloud Storage,如下圖所示:

使用推送模型來遷移 HDFS 資料

提取模型比較複雜,但有一些優勢。暫時的 Cloud Dataproc 叢集會在其資料節點上執行 distcp 工作、從來源叢集提取檔案,並將檔案複製到 Cloud Storage,如下圖所示:

使用提取模型來遷移 HDFS 資料

推送模型是最簡易的模型,由於來源叢集可以將資料直接推送到 Cloud Storage,因此您不需要建立額外的運算資源來執行複製工作。不過,如果您打算在遷移過程中繼續使用來源叢集執行其他一般性資料處理工作,您應確保來源叢集上有充足的資源,例如 CPU、RAM 和網路頻寬等,才能讓來源叢集同時執行這些複製工作。

如果來源叢集已經以最大運算能力執行,且如果您無法在來源叢集上增加資源來執行複製,那麼您應考慮改用提取模型。

雖然提取模型比推送模型複雜,但有多項優點:

  • 由於來源節點只會用在提供叢集外的區塊,因此對來源叢集的 CPU 和 RAM 資源造成的影響會降到最低。您也可以在 GCP 上微調提取叢集資源的規格來處理複製工作,並在遷移完成後刪除提取叢集。
  • 減少來源叢集的網路流量,因此可提供較大的傳出頻寬與更快的移轉速度。
  • 由於暫時的 Cloud Dataproc 叢集已安裝連接器,並負責將資料移轉至 Cloud Storage,因此您不需要在來源叢集上安裝 Cloud Storage 連接器

如要瞭解兩種模型對網路用量帶來的影響,請想想 Hadoop 在 HDFS 中處理資料複製的方式。Hadoop 會將每個檔案分割為多個區塊,區塊大小通常為 128-256 MB。Hadoop 會在多個資料節點與多個機架上複製這些區塊,避免在資料節點或機架發生錯誤時造成資料遺失。標準設定是每個區塊儲存 3 個備用資源。

Hadoop 也會採用「機架感知」能力,確保每個區塊有 2 份複本會位在同一個機架內的不同資料節點中以降低延遲時間,而第三份複本則位在不同的機架中,以提升備援能力與可用性。這個複製邏輯的摘要如下圖所示:

透過機架感知能力進行 HDFS 區塊複製作業

使用推送模型來複製檔案時 (也就是當 distcp 對應工作在來源叢集的資料節點上執行時),系統會先從多個資料節點收集檔案的所有區塊,接著將檔案的區塊從來源叢集推送到 Cloud Storage。網路上的流量會用掉檔案總計大小將近兩倍的資源,如下圖所示:

使用推送模型時的網路用量

當您使用提取模型來複製檔案時 (也就是當 distcp 對應工作在 GCP 中提取叢集的資料節點上執行時),每個區塊會直接離開來源叢集,因此只會在網路上傳輸一次。整體網路流量會受限於檔案總計大小,如下圖所示:

使用提取模型時的網路用量

您在使用提取模型時,應該要監控 distcp 對應工作的數量與使用頻寬,以避免因同時執行過多連線而對來源叢集造成太大衝擊。

決定將您的資料移至何處

Hadoop 遷移的最終結果會是雲端原生解決方案或是混合式解決方案。這兩種解決方案之間的差別在於,您的系統是否保留任何內部部署元件。在雲端原生解決方案中,您可以將資料儲存在雲端,並在雲端對這些資料執行工作。在混合式解決方案中,有些資料仍保留在內部部署。您也可以在內部部署對該資料執行工作,或是在能使用內部部署資料的雲端上執行工作。

雲端原生解決方案最容易維護,但您可能基於業務或技術要求,需要在內部部署保留某些資料或是處理資料。各混合式解決方案的內容與各案例的狀況高度相關,其中會包含能滿足您工作負載需求的各種技術與服務。

將資料移至 Cloud Storage 以外的產品

將您大部分的資料移至 Cloud Storage。然而,某些情況下,您可能會考慮將資料移至不同的 GCP 產品:

  • 如果要從 Apache HBase 遷移資料,建議您將資料移至能提供同等功能的 Cloud BigTable

  • 如果要從 Apache Impala 遷移資料,建議您將資料移至能提供同等功能的 BigQuery

您可能在 HBase 或 Impala 中都有可用資料,而不需要將資料儲存到 Cloud BigTable 或 BigQuery。如果您的工作不需要 Cloud Bigtable 或 BigQuery 的功能,便可將資料儲存在 Cloud Storage。

規劃資料位置時須考量權限

對於使用 HDFS 內部部署即可遷移的檔案,GCP 不會使用同樣詳細的權限設定。設定檔案權限最簡便的方法就是在各 Cloud Storage 值區層級設定權限。如果您已為不同的 HDFS 資料組設定不同權限,可以考慮在 Cloud Storage 建立不同值區,讓每個值區都有不同的權限,再將 HDFS 資料放入具有適用於該資料的權限的值區中。

如果您將檔案移至在 Cloud Storage 中與在 HDFS 中不同的結構,請記得追蹤所有變更。將工作移至 Cloud Dataproc 後,您需要提供新資料位置的正確路徑。

規劃漸進式遷移

請計劃以獨立的資料片段慢慢移動資料。排定大量時間,在兩次資料遷移之間將對應工作移至雲端。開始遷移作業時,請先移動優先順序較低的資料,例如備份和封存。

分割您的資料

如果您打算以漸進方式移動資料,則必須將資料分割為多個部分。下列各節將說明分割資料集最常見的策略。

按時間戳記分割資料

分割資料以便逐步遷移的常用方法是將較舊的資料儲存在雲端,同時將新資料保存在內部部署系統的 HDFS 中。這項做法可讓您在較舊、較不重要的資料上測試新的遷移工作。以這種方式分割資料,可讓您從少量資料開始遷移作業。

重要事項:

  • 除了按時間分割資料之外,您還可以使用其他方法分割資料嗎?您可以按資料支援的工作或資料所屬的機構來分割資料,然後再按時間進一步分割資料,獲得更為特定的一組資料。
  • 您應該使用絕對日期/時間或是相對日期/時間?有時按某個時間點分割資料比較合理,例如在對系統進行重大變更之前,先將所有產生的資料封存。如果您想要建立補充作業工作來測試雲端中的系統,以確認是否可以處理舊資料使其達到目前的標準,則通常適合使用絕對日期/時間。而在其他情況下,您可能會依據與目前日期有關的時間戳記,將資料移至雲端。舉例來說,您可能會移動所有建立超過一年的資料,或是過去三個月未曾編輯的所有資料。
  • 您做決定時會使用什麼日期/時間值?檔案通常具有多個日期/時間值。有時檔案建立日期是最重要的。但您也可能會想要使用最近一次編輯的時間,或是檔案中繼資料的其他時間戳記。
  • 您所有的資料是否具有相同的時間戳記格式?您可以透過許多方式來處理時間戳記。如果資料來源不只一個,時間戳記可能會儲存成不同的格式。請確認您的時間戳記格式一致,才能使用這些戳記來分割資料。

按工作分割資料

有時您可以根據使用資料的工作來分割資料。如果您是以漸進方式遷移工作,這種做法便特別有用。您可以只移動您移動的工作所使用的資料。

重要事項:

  • 您移至雲端的工作是否獨立運作?對於在獨立資料單元上運作的工作,按工作分割資料是絕佳的選擇。但如果工作使用的資料分散在整個系統中,則會難以管理。
  • 這些資料未來是否可能有相同的用途?隔離資料之前,請先仔細思考該資料是否有其他用途。
  • 工作遷移的範圍是否適當,能否產生可管理的資料區塊?

您也可以使用更廣泛的功能條件來分割資料,不只使用多個工作組。舉例來說,您可以在雲端執行所有的 ETL 工作,然後在內部部署執行分析與報表工作。

按擁有權分割資料

在某些情況下,您可以按擁有權所在區域來分割資料。採用這個方法的其中一項優點是,您的資料組織能夠與您的業務組織相符。另一項好處則是,您可以利用 GCP 的角色式存取權管理。舉例來說,將特定業務角色使用的資料遷移至 Cloud Storage 的隔離值區,會讓設定權限變得更輕鬆容易。

重要事項:

  • 這些擁有者之間的界線劃分得夠清楚嗎?通常我們會清楚知道特定資料項目的主要擁有者是誰,但有時最常存取這些資料的人不是資料擁有者。
  • 還有其他可與擁有者搭配使用的分割條件嗎?按擁有者分割資料之後,可能會產生超大型資料集。您可以按工作或按時間再次分割資料,將資料範圍進一步縮小。

在混合式解決方案中維持資料同步

使用混合式解決方案的其中一項挑戰是,有時工作需要同時從 GCP 和從內部部署系統存取資料。如果工作必須從這兩個環境中存取資料集,您便需要在其中一個環境建立主要儲存空間位置,並在另一個儲存位置維護一個同步複本。

不論您選擇的主要儲存位置為何,同步資料都會有類似的挑戰。您需要一種能夠識別資料變更時機的方法,以及將變更套用到對應複本的機制。如果變更有可能發生衝突,您也需要擬定策略來解決這些衝突。

重要事項:

  • 如果可以的話,請一律將資料複本設為唯讀。由於新編輯內容可能來自各個來源,因此會讓同步處理策略變得更複雜。
  • 在混合式解決方案中,請避免維護超過兩個資料複本。請僅在內部部署保留一個複本,在 GCP 中也只留一個複本。

您可以使用類似 Apache Airflow 等技術來協助管理資料同步處理。

移轉資料

以下各節內容概述將資料移至 GCP 的注意事項。

設定您的資料存取權

檔案權限在 Cloud Storage 上的運作方式與在 HDFS 上不同。在您將資料移至 Cloud Storage 之前,您需要先熟悉 Cloud Identity and Access Management (Cloud IAM)。

處理存取控制最簡單的方式,是根據存取要求將資料排序存入 Cloud Storage 值區中,並在值區層級設定授權政策。您可以指派角色,將存取權授予個別使用者或群組。按群組授予存取權,然後再視需要將使用者指派給群組。當您將資料匯入 Cloud Storage 並建立結構之後,您需要進行資料存取決策。

每個 GCP 產品都有各自的權限與角色。請確定您清楚瞭解 Cloud Storage 存取權控管與 Cloud Dataproc 存取權控管之間的關係。請個別評估每個產品的政策。請不要假設產品之間的角色與權限是直接相互對應的。

請熟悉以下說明文件以預備為雲端 Hadoop 系統進行政策決策:

如果您需要指派更精細的權限給個別檔案,Cloud Storage 支援存取控制清單 (ACL)。不過,我們強烈建議您改用 Cloud IAM。只有在您的權限特別複雜時才使用 ACL。

使用 DistCp 將資料複製到 Cloud Storage

由於 Cloud Storage 是一套相容於 Hadoop 的檔案系統,因此您可以使用 Hadoop DistCp,將資料從內部部署 HDFS 移至 Cloud Storage。DistCp 能讓您透過多種方式移動資料,我們建議下列這種方式:

  1. 使用 Cloud VPN 建立 GCP 專案和內部部署網路之間的虛擬私人網路通道。

  2. 建立 Cloud Dataproc 叢集以用於資料移轉。

  3. 使用 gcloud 指令列工具來連線至叢集的主要執行個體。例如:

    gcloud compute ssh [CLUSTER_NAME]-m
    

    CLUSTER_NAME 是您為工作建立的 Cloud Dataproc 叢集名稱。後置字串 -m 是用來識別主要執行個體。

  4. 在叢集的主要執行個體上,執行 DistCp 指令來移動資料。

移動資料所需的實際 DistCp 指令類似下方指令:

hadoop distcp hdfs://nn1:8020/20170202/ gs://bucket/20170202/

在這個範例中,nn18020 都是來源資料儲存位置的 namenode 與通訊埠,而 bucket 則是檔案要複製到的 Cloud Storage 值區名稱。

驗證資料移轉

當您在不同的儲存系統 (例如多個 HDFS 叢集) 或 HDFS 與 Cloud Storage 之間複製或移動資料時,建議您執行某種類型的驗證以保證資料的完整性。此驗證極為重要,可確保資料在傳輸過程中不會遭到變更。詳情請參閱驗證資料移轉指南。

增加要求比率

Cloud Storage 會針對每個值區維護物件索引鍵編列,以提供一致的物件清單。這份索引清單按字典編列順序儲存,要是值區內有物件寫入或刪除,清單也會一併更新。新增或刪除索引鍵落在小範圍索引的物件,很容易提高爭用情況發生的機率。

Cloud Storage 會偵測這類爭用情況,並自動將受影響索引範圍的負載重新分配到多個伺服器。如果您使用新的前置字串寫入物件,並預期每秒寫入要求的速率將超過 1000 次,則應該按照 Cloud Storage 說明文件中所述,逐步提高要求比率,否則可能會出現延遲時間增加及錯誤率提高的暫時性問題。

改善資料遷移速度

如要將資料從內部部署叢集移至 GCP,最簡單的方式是使用 VPN 通道透過公開網際網路遷移。如果單一 VPN 通道無法提供必要的總處理量,系統可能會建立多個 VPN 通道,而 GCP 會自動將流量分配給這些通道以提供額外頻寬。

有時甚至多個 VPN 通道都無法提供滿足遷移需求的頻寬或連線穩定度。請考慮使用下列方法來改善總處理量:

  • 在您的網路與 Google 的網路邊緣連結點 (POP)之間,使用直接對等互連功能。這個方法可減少您的網路與 GCP 之間的躍點數量。

  • 使用 Cloud Interconnect 服務供應商建立連到 Google 網路的直接連線。服務詳細內容會依不同的合作夥伴而有所不同。大部分的供應商都會提供有關網路可用性和效能的服務水準協議。如要進一步瞭解,請直接聯絡服務供應商。

與 GCP 合作夥伴合作

GCP 與各種合作夥伴合作,協助您遷移資料。如要進一步瞭解可協助您遷移資料的服務,請查看 Cloud Storage 合作夥伴。合作夥伴提供的服務與條款會依供應商而有所不同,因此請直接與他們合作以取得詳細資料。

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
將 Hadoop 遷移至 GCP