利用 Azure HDInsight IO Cache 提升 Apache Spark 工作負載的性能

Note

  • IO 快取支援到 Spark 2.3 為止,但在 Spark 2.4(HDInsight 4.0)和 Spark 3.1.2(HDInsight 5.0)中將不再受支援。

IO Cache 是 Azure HDInsight 的資料快取服務,能提升 Apache Spark 工作效能。 IO 快取也支援 Apache TEZ 與 Apache Hive 工作負載,這些工作負載可在 Apache Spark 叢集上執行。 IO 快取使用一個名為 RubiX 的開源快取元件。 RubiX 是一種本地磁碟快取,用於用於存取雲端儲存系統資料的大數據分析引擎。 RubiX 在快取系統中獨樹一幟,因為它使用 Solid-State 硬碟(SSD),而非為快取目的保留操作記憶體。 IO 快取服務會在叢集的每個工作節點上啟動並管理 RubiX 元資料伺服器。 它也會設定叢集中的所有服務,以透明地使用 RubiX 快取。

大多數 SSD 提供超過 1 GB 每秒的頻寬。 此頻寬,加上作業系統記憶體內檔案快取,提供足夠頻寬載入大數據運算引擎,如 Apache Spark。 其餘可用記憶體會保留供 Apache Spark 處理高度依賴記憶體的任務,例如資料重分配。 獨佔操作記憶體讓 Apache Spark 能達成最佳資源使用。

Note

IO 快取目前使用 RubiX 作為快取元件,但未來版本可能會有所改變。 請使用 IO 快取介面,且不要直接依賴 RubiX 實作。 目前 IO 快取僅支援 Azure Blob 儲存體。

Azure HDInsight IO Cache 的好處

使用 IO Cache 可以提升讀取 Azure Blob 儲存體 資料的工作效能。

使用 IO 快取時,你不需要對 Spark 工作做任何修改,就能看到效能提升。 當 IO 快取被停用時,這段 Spark 程式碼會遠端讀取 Azure Blob 儲存體 的資料: spark.read.load('wasbs:///myfolder/data.parquet').count()。 當啟用 IO 快取時,同一行程式碼會透過 IO 快取進行快取讀取。 在接下來的讀取中,資料會從 SSD 本地讀取。 HDInsight 叢集上的工作節點配備本地連接的專用 SSD 硬碟。 HDInsight IO 快取利用這些本地 SSD 進行快取,提供最低延遲並最大化頻寬。

入門指南

Azure HDInsight IO Cache 在預覽中預設已停用。 IO Cache 可在執行 Apache Spark 2.3 的 Azure HDInsight 3.6+ Spark 叢集上使用。 要在 HDInsight 4.0 啟用 IO 快取,請執行以下步驟:

  1. 從 Web 瀏覽器中,導覽至 https://CLUSTERNAME.azurehdinsight.net,其中 CLUSTERNAME 是叢集的名稱。

  2. 選擇左側的 IO 快取 服務。

  3. 選擇 動作 (HDI 3.6 中的服務動作 )並 啟用。

    啟用 Ambari 的 IO 快取服務。

  4. 確認叢集上所有受影響服務的重新啟動。

Note

雖然進度條顯示已啟用,但 IO 快取實際上只有在你重新啟動其他受影響的服務後才會啟用。

故障排除

啟用 IO 快取後,執行 Spark 作業可能會出現磁碟空間錯誤。 這些錯誤之所以會發生,是因為 Spark 在進行 Shuffle 作業時,也會使用本機磁碟儲存空間來存放資料。 一旦啟用 IO 快取,Spark 的儲存空間減少,SSD 空間可能會不足。 IO Cache 使用的空間預設為 SSD 總空間的一半。 IO 快取的磁碟空間使用量可在 Ambari 中設定。 如果發生磁碟空間錯誤,請減少分配給 IO 快取的 SSD 空間,然後重新啟動服務。 要更改 IO 快取的空間設定,請執行以下步驟:

  1. 在 Apache Ambari 中,選擇左側的 HDFS 服務。

  2. 選取設定和進階分頁。

    編輯 HDFS 進階設定。

  3. 往下滑並展開 自訂核心網站 區域。

  4. 找到 hadoop.cache.data.fullness.percentage 這個屬性。

  5. 更改方塊中的數值。

    編輯:IO 快取滿度百分比。

  6. 在右上角選擇 「儲存 」。

  7. 選擇 重新啟動>重新啟動所有受影響的項目。

    Apache Ambari 重新啟動所有受影響的項目。

  8. 選取 確認全部重新啟動。

如果這樣仍然無效,請停用 IO 快取。