將內部部署 Apache Hadoop 叢集遷移到 Azure HDInsight - 架構最佳作法
本文將提供有關 Azure HDInsight 系統架構的建議。 本文是系列文章中的一篇,提供有助於將內部部署 Apache Hadoop 系統移轉至 Azure HDInsight 的最佳做法。
使用多個已最佳化工作負載的叢集
許多內部部署的 Apache Hadoop 部署會包含支援許多工作負載的單一大型叢集。 此單一叢集可能很複雜,而且可能需要與個別服務互相妥協,才能讓每個項目正常運作。 將內部部署 Hadoop 叢集遷移到 Azure HDInsight 需要變更方法。
Azure HDInsight 叢集專為特定的計算使用類型而設計。 由於儲存體可以跨多個叢集進行共用,因此您可以建立多個已最佳化工作負載的計算叢集,來符合不同的作業需求。 每個叢集類型都有特定工作負載適用的最佳組態。 下表列出 HDInsight 和對應工作負載中支援的叢集類型。
工作負載 | HDInsight 叢集類型 |
---|---|
批次處理 (ETL / ELT) | Hadoop、Spark |
資料倉儲 | Hadoop、Spark、互動式查詢 |
IoT / 串流 | Kafka、Spark |
NoSQL 交易處理 | hbase |
使用記憶體內快取執行互動式及更快速的查詢 | 互動式查詢 |
資料科學 | Spark |
下表顯示可用來建立 HDInsight 叢集的不同方法。
工具 | 以瀏覽器為基礎 | 命令列 | REST API | SDK |
---|---|---|---|---|
Azure 入口網站 | X | |||
Azure Data Factory | X | X | X | X |
Azure CLI (1.0 版) | X | |||
Azure PowerShell | X | |||
cURL | X | X | ||
.NET SDK | X | |||
Python SDK | X | |||
Java SDK | X | |||
Azure 資源管理員範本 | X |
如需詳細資訊,請參閱 HDInsight 中的叢集類型一文。
使用暫時性隨選叢集
HDInsight 叢集可能會有很長一段時間未使用。 為了節省資源成本,HDInsight 可支援暫時性隨選叢集,當工作負載成功完成後,即可刪除這些叢集。
刪除叢集時,不會移除相關聯的儲存體帳戶和外部中繼資料。 您之後可以使用相同的儲存體帳戶和中繼存放區重新建立叢集。
Azure Data Factory 可用來排定隨選 HDInsight 叢集的建立。 如需詳細資訊,請參閱使用 Azure Data Factory 在 HDInsight 中建立隨選 Apache Hadoop 叢集一文。
分離計算和儲存體
一般內部部署的 Hadoop 部署會使用同一組機器進行資料儲存和資料處理。 由於這些機器位在同個地方,因此計算和儲存體必須一起調整。
在 HDInsight 叢集上,儲存體不需要與計算放在同個位置,可以放在 Azure 儲存體、Azure Data Lake Storage 或這兩者之中。 分離儲存體和計算有下列優點:
- 在叢集之間共用資料。
- 可使用暫時性叢集,因為資料不相依於叢集。
- 降低儲存成本。
- 可各別調整儲存體與計算。
- 跨區域複寫資料。
所建立的計算叢集會靠近 Azure 區域中的儲存體帳戶資源,以減少分開計算和儲存體而產生的效能成本。 高速網路會讓計算節點有效率地存取 Azure 儲存體內的資料。
使用外部中繼資料存放區
可與 HDInsight 叢集搭配使用的主要中繼存放區有兩個:Apache Hive 和 Apache Oozie。 Hive 中繼存放區是主要的結構描述存放庫,可供資料處理引擎 (包括 Hadoop、Spark、LLAP、Presto 和 Apache Pig) 使用。 Oozie 中繼存放區會為進行中和已完成的 Hadoop 作業儲存排程和狀態的詳細資料。
HDInsight 會使用 Azure SQL Database 作為 Hive 和 Oozie 中繼存放區。 在 HDInsight 叢集中設定中繼存放區有兩種方式:
預設中繼存放區
- 沒有其他成本。
- 刪除叢集時,中繼存放區也會一併刪除。
- 無法在不同叢集之間共用中繼存放區。
- 使用基本的 Azure SQL DB,其中有 5 個 DTU 的限制。
自訂外部中繼存放區
- 將外部 Azure SQL Database 指定為中繼存放區。
- 建立和刪除叢集時,不會遺失中繼資料和其中的 Hive 結構 Oozie 作業詳細資料。
- 可以與不同類型的叢集共用單一中繼存放區資料庫。
- 中繼存放區可以視需要相應增加。
- 如需詳細資訊,請參閱在 Azure HDInsight 中使用外部中繼資料存放區。
Hive 中繼存放區的最佳做法
以下是一些 HDInsight Hive 中繼存放區的最佳做法:
- 使用自訂的外部中繼存放區來分開計算資源和中繼資料。
- 從 S2 層的 Azure SQL 執行個體開始,其提供 50 個 DTU 和 250 GB 的儲存體。 如果您看到瓶頸,您可以相應增加資料庫。
- 不讓專為某個 HDInsight 叢集版本建立的中繼存放區與不同版本的叢集共用。 不同的 Hive 版本會使用不同的結構描述。 例如,Hive 1.2 和 Hive 2.1 叢集無法共用中繼存放區。
- 定期備份自訂中繼存放區。
- 將中繼存放區與 HDInsight 叢集保存在相同區域。
- 使用 Azure SQL Database 監視工具 (例如,Azure 入口網站或 Azure 監視器記錄),監視中繼存放區的效能和可用性。
- 需執行
ANALYZE TABLE
命令,才能產生資料表和資料行的統計資料。 例如:ANALYZE TABLE [table_name] COMPUTE STATISTICS
。
不同工作負載的最佳做法
- 請考慮對互動式 Hive 查詢使用可加快回應時間的 LLAP 叢集,LLAP 是 Hive 2.0 中的新功能,可對查詢使用記憶體內快取。
- 請考慮使用 Spark 作業取代 Hive 作業。
- 請考慮將以 impala 為基礎的查詢取代為 LLAP 查詢。
- 請考慮將 MapReduce 作業取代為 Spark 作業。
- 請考慮使用 Spark 結構化串流作業取代低延遲的 Spark 批次作業。
- 請考慮在資料協調流程中使用 Azure Data Factory (ADF) 2.0。
- 請考慮使用 Ambari 來管理叢集。
- 將資料儲存體從內部部署 HDFS 變更為 WASB 或 ADLS 或 ADFS,以處理指令碼。
- 請考慮在 Hive 資料表和稽核上使用 Ranger RBAC。
- 請考慮使用 CosmosDB 取代 MongoDB 或 Cassandra。
下一步
閱讀此系列中的下一篇文章: