問題
您在集群上配置了一個外部metastore,並且啟用了自動伸縮,但是集群沒有有效地自動伸縮。
導致
你把亞轉移罐複製到每個執行器中,當它們隻在驅動中需要的時候。
每次新的執行器啟動時,初始化和運行jar都需要時間。因此,添加更多的執行程序所花費的時間比預期的要長。
解決方案
您應該配置您的集群,以便隻將metastore jar複製到驅動程序。
選項1:使用init腳本複製metastore jar。
- 創建具有以下功能的集群spark.sql.hive.metastore.jars設置為maven而且spark.sql.hive.metastore.version來匹配你的轉移瘤。
- 啟動集群並在驅動程序日誌中搜索包含下載metastore jar到.
17/11/18 22:41:19 INFO IsolatedClientLoader: downloads metastore jars to
<路徑>是已下載jar在集群的驅動程序節點中的位置。 - 將jar文件複製到DBFS位置。
%sh cp -r
/dbfs/ExternalMetaStore_jar_location . sh cp -r /dbfs/ExternalMetaStore_jar_location . sh - 創建初始化腳本。
%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) - 安裝剛剛創建的初始化腳本,該腳本是集群範圍的初始化腳本(AWS|Azure|GCP).
- 您需要腳本位置的完整路徑(dbfs: /磚/ < init-script-folder > / external-metastore-jars-to-driver.sh).
- 重新啟動集群。
選項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容器與預加載的罐子AWS或Azure.
查閱有關使用Databricks容器服務定製容器的文檔。