外部轉移灶的自動結垢很慢

通過隻在驅動程序中安裝亞轉移罐來提高自動縮放性能。

寫的Gobinath。Viswanathan

最後發布時間:2022年5月16日

問題

您在集群上配置了一個外部metastore,並且啟用了自動伸縮,但是集群沒有有效地自動伸縮。

導致

你把亞轉移罐複製到每個執行器中,當它們隻在驅動中需要的時候。

每次新的執行器啟動時,初始化和運行jar都需要時間。因此,添加更多的執行程序所花費的時間比預期的要長。

解決方案

您應該配置您的集群,以便隻將metastore jar複製到驅動程序。

選項1:使用init腳本複製metastore jar。

  1. 創建具有以下功能的集群spark.sql.hive.metastore.jars設置為maven而且spark.sql.hive.metastore.version來匹配你的轉移瘤。
  2. 啟動集群並在驅動程序日誌中搜索包含下載metastore jar到
    17/11/18 22:41:19 INFO IsolatedClientLoader: downloads metastore jars to 
    <路徑>是已下載jar在集群的驅動程序節點中的位置。
  3. 將jar文件複製到DBFS位置。
    %sh cp -r  /dbfs/ExternalMetaStore_jar_location . sh cp -r  /dbfs/ExternalMetaStore_jar_location . sh
  4. 創建初始化腳本。
    %python dbutils.fs.put("dbfs:/databricks//external-metastore-jars-to-driver.sh", "" #!如果[[$DB_IS_DRIVER = "TRUE"]];then mkdir -p /databricks/metastorejars/ cp -r /dbfs/ExternalMetaStore_jar_location/* /databricks/metastorejars/ fi""", True)
  5. 安裝剛剛創建的初始化腳本,該腳本是集群範圍的初始化腳本(AWS|Azure|GCP).
  6. 您需要腳本位置的完整路徑(dbfs: /磚/ < init-script-folder > / external-metastore-jars-to-driver.sh).
  7. 重新啟動集群。

選項2:使用Apache Spark配置設置將metastore jar複製到驅動程序。

  • 輸入以下設置到您的火花配置AWS|Azure|GCP):
    spark.hadoop.javax.jdo.option.ConnectionURL jdbc:mysql://:/ spark.hadoop.javax.jdo.option.ConnectionDriverName  spark.hadoop.javax.jdo.option.ConnectionUserName  spark.hadoop.javax.jdo.option.ConnectionPassword  spark.sql.hive.metastore.jar /dbfs/metastore/jars/*
  • 源路徑可以是外部掛載的存儲或DBFS。
  • 通過使用集群策略,可以在工作空間內全局應用metastore配置(AWS|Azure|GCP).

選項3:構建一個自定義的Databricks容器與預加載的罐子AWSAzure

查閱有關使用Databricks容器服務定製容器的文檔。