創建、運行和管理Databricks作業

作業是在Databricks集群中運行非交互式代碼的一種方式。例如,您可以以交互方式或計劃方式運行提取、轉換和加載(ETL)工作負載。中以交互方式運行作業筆記本用戶界麵

您可以使用UI、CLI或調用Jobs API來創建和運行作業。您可以使用UI或API修複並重新運行失敗或取消的作業。可以通過UI、CLI、API和郵件通知等方式監控作業運行結果。本文主要討論使用UI執行作業任務。有關其他方法,請參見喬布斯CLI而且職位API 2.1

您的工作可以由單個任務組成,也可以是具有複雜依賴關係的大型多任務工作流。Databricks管理所有作業的任務編排、集群管理、監控和錯誤報告。您可以通過易於使用的調度係統立即或定期運行作業。

您可以在JAR、Databricks筆記本、Delta Live Tables管道或用Scala、Java或Python編寫的應用程序中實現任務。還支持遺留Spark Submit應用程序。您可以通過指定任務之間的依賴關係來控製任務的執行順序。您可以將任務配置為按順序或並行運行。下圖說明了一個工作流:

  1. 攝取原始點擊流數據並執行處理以會話記錄。

  2. 攝取訂單數據並將其與會話化的點擊流數據連接起來,以創建用於分析的準備好的數據集。

  3. 從準備好的數據中提取特征。

  4. 並行執行任務以持久化特征並訓練機器學習模型。

    多任務工作流示例

要使用Databricks作業創建第一個工作流,請參見快速入門

重要的

  • 隻能在數據科學與工程工作空間或機器學習工作空間中創建作業。

  • 一個工作空間被限製為1000個並發作業運行。一個429許多請求當您請求不能立即開始的運行時,返回響應。

  • 一個工作空間在一小時內可以創建的作業數量限製為10000個(包括“運行提交”)。此限製還會影響REST API和筆記本工作流創建的作業。

創造一個工作

  1. 做以下其中一件事:

    • 點擊工作圖標工作流在側欄中,單擊創建作業按鈕

    • 在側欄中,單擊創建圖標創建並選擇工作菜單上的。

    任務選項卡將顯示創建任務對話框。

    創建任務界麵
  2. 取代為你的工作添加一個名字…你的工作名稱。

  3. 中輸入任務的名稱任務名稱字段。

  4. 指定要運行的任務類型。在類型下拉,選擇筆記本JAR火花提交Python,或管道

    • 筆記本:在下拉,為筆記本選擇一個位置;要麼工作空間用於位於Databricks工作區文件夾中的筆記本或Git提供者用於位於遠程Git存儲庫中的筆記本。

      工作空間:使用文件瀏覽器找到該筆記本,單擊該筆記本名稱,單擊確認

      Git提供者:點擊編輯並輸入Git存儲庫信息。看到使用遠程Git存儲庫中的筆記本運行作業

    • JAR:指定主類.使用包含主方法的類的完全限定名,例如,org.apache.spark.examples.SparkPi.然後單擊添加依賴庫添加運行任務所需的庫。其中一個庫必須包含主類。

      要了解更多關於JAR任務的信息,請參見JAR的工作

    • 火花提交:在參數文本框,指定主類、庫JAR的路徑和所有參數,格式化為JSON字符串數組。下麵的示例配置spark-submit任務來運行DFSReadWriteTest來自Apache Spark的例子:

      ”——階級”“org.apache.spark.examples.DFSReadWriteTest”“dbfs: / FileStore /圖書館/ spark_examples_2_12_3_1_1.jar”“/ dbfs / databricks-datasets / README.md”“/ FileStore / /輸出例子/”

      重要的

      有幾個限製spark-submit任務:

      • 隻能在新的集群上運行spark-submit任務。

      • Spark-submit不支持集群自動伸縮。要了解有關自動縮放的更多信息,請參見集群自動定量

      • Spark-submit不支持磚公用事業.要使用Databricks實用程序,請改用JAR任務。

    • Python:在路徑文本框,輸入DBFS或雲存儲上Python腳本的URI;例如,dbfs: / FileStore / myscript.py

    • 管道:在管道下拉,選擇已存在的Delta Live Tables簡介管道。

    • Python輪:在包名文本框中,輸入要導入的包。mywheel - 1.0 - py2.py3 any.whl——沒有.在入口點文本框中,輸入啟動車輪時要調用的函數。點擊添加依賴庫添加運行任務所需的庫。

  5. 配置任務運行的集群。在集群下拉,選擇新作業集群現有的通用集群

    • 新作業集群:點擊編輯集群下拉菜單,並完成集群配置

    • 現有通用集群:選擇已存在的集群集群下拉。若要在新頁麵中打開集群,請單擊外部鏈接集群名稱和描述右側的圖標。

    有關選擇和配置集群以運行任務的詳細信息,請參見集群配置技巧

  6. 您可以為任務傳遞參數。每種任務類型對格式化和傳遞參數都有不同的要求。

    • 筆記本:點擊添加並指定要傳遞給任務的每個參數的鍵和值。屬性手動運行任務時,可以覆蓋或添加其他參數運行帶有不同參數的作業選擇。參數設置筆記本電腦部件由參數的鍵指定。使用任務參數變量作為參數值的一部分傳遞一組有限的動態值。

    • JAR:使用json格式的字符串數組來指定參數。這些字符串作為參數傳遞給主類的主方法。看到配置JAR作業參數

    • 火花提交task:參數被指定為json格式的字符串數組。符合Apache Spark Spark -submit按照慣例,JAR路徑後的參數被傳遞給主類的主方法。

    • Python:使用json格式的字符串數組來指定參數。這些字符串作為參數傳遞,可以使用argparse模塊。

    • Python輪:在參數下拉,選擇位置參數以json格式的字符串數組形式輸入參數,或選擇關鍵字參數>添加輸入每個參數的鍵和值。位置參數和關鍵字參數都作為命令行參數傳遞給Python輪任務。

  7. 訪問其他選項,包括依賴庫、重試策略和超時,點擊高級選項.看到編輯任務

  8. 點擊創建

  9. 若要可選地設置作業計劃,請單擊編輯日程工作細節麵板。看到安排一份工作

  10. 若要允許同一作業的多個並發運行,請單擊編輯並發運行工作細節麵板。看到最大並發運行數

  11. 單擊,可選擇指定接收作業事件通知的電子郵件地址編輯通知工作細節麵板。看到通知

  12. 單擊,可選地控製作業的權限級別編輯權限工作細節麵板。看到控製對作業的訪問

如需添加其他任務,單擊添加任務按鈕在剛剛創建的任務下麵。屬性,則提供共享集群選項新作業集群對於前一個任務。還可以在創建或編輯任務時為每個任務配置集群。有關選擇和配置集群以運行任務的詳細信息,請參見集群配置技巧

運行作業

  1. 點擊工作圖標工作流在側欄中。

  2. 選擇作業並單擊運行選項卡。您可以立即運行作業,也可以將作業安排在稍後運行。

如果具有多個任務的作業中的一個或多個任務不成功,則可以重新運行不成功任務的子集。看到修複不成功的作業運行

立即運行作業

如需立即運行作業,請單擊立即運行按鈕

提示

通過單擊,可以使用筆記本任務執行作業的測試運行現在運行.如果需要對筆記本進行更改,請單擊現在運行再次編輯後的筆記本會自動運行新版本的筆記本。

運行帶有不同參數的作業

你可以使用現在使用不同的參數運行使用不同的參數或現有參數的不同值重新運行作業。

  1. 點擊藍色向下插入旁邊現在運行並選擇現在使用不同的參數運行或者,在活躍的運行表,點擊現在使用不同的參數運行.根據任務類型輸入新參數。

    • 筆記本:可以以鍵值對或JSON對象的形式輸入參數。提供的參數與觸發運行的默認參數合並。的值可以使用此對話框設置小部件

    • JAR而且spark-submit:可以輸入參數列表,也可以輸入JSON文檔。如果刪除鍵,則使用默認參數。您還可以添加任務參數變量為了跑步。

  2. 點擊運行

修複不成功的作業運行

可以通過隻運行不成功任務的子集和任何依賴任務來修複失敗或取消的多任務作業。由於成功的任務和依賴於它們的任何任務都不會重新運行,因此該特性減少了從不成功的作業運行中恢複所需的時間和資源。

在修複作業運行之前,可以更改作業或任務設置。不成功的任務將使用當前作業和任務設置重新運行。例如,如果將路徑更改為筆記本電腦或集群設置,則該任務將使用更新的筆記本電腦或集群設置重新運行。

您可以查看所有任務運行的曆史記錄任務運行細節頁麵。

請注意

  • 如果一個或多個任務共享一個作業集群,修複運行將創建一個新的作業集群;例如,如果最初的運行使用作業集群my_job_cluster,第一次修複運行使用新的作業集群my_job_cluster_v1,允許您輕鬆查看初始運行和任何修複運行所使用的集群和集群設置。的設置my_job_cluster_v1是否與當前設置相同my_job_cluster

  • 隻有編排兩個或多個任務的作業才支持修複。

  • 持續時間顯示的值。運行TAB包含第一次運行開始的時間到最近一次修複運行結束的時間。例如,如果運行兩次失敗,第三次運行成功,則持續時間包括所有三次運行的時間。

修複一個不成功的作業運行:

  1. 點擊工作圖標工作在側欄中。

  2. 的名字列中,單擊作業名稱。的運行TAB顯示活動運行和已完成運行,包括任何不成功的運行。

  3. 中未成功運行的鏈接開始時間的列已完成運行(過去60天)表格的作業運行詳細信息頁麵出現。

  4. 點擊修複運行.的修複作業運行對話框將出現,列出所有不成功的任務和將重新運行的任何依賴任務。

  5. 要為要修複的任務添加或編輯參數,請在修複作業運行對話框。參數修複作業運行對話框覆蓋現有值。類中的鍵和值,可以將參數返回到其原始值修複作業運行對話框。

  6. 點擊修複運行修複作業運行對話框。

查看任務運行曆史記錄

查詢任務的運行曆史記錄,包括成功運行和失敗運行。

  1. 上單擊任務作業運行詳細信息頁麵。的任務運行細節頁麵出現。

  2. 在運行曆史下拉菜單中選擇任務運行。

安排一份工作

為作業定義時間表:

  1. 點擊編輯日程工作細節麵板,並設置計劃類型計劃

  2. 指定時間段、開始時間和時區。可選擇顯示Cron語法複選框中顯示和編輯日程安排Quartz Cron語法

    請注意

    • Databricks強製作業調度觸發的後續運行之間的最小間隔為10秒,而不管cron表達式中的秒配置如何。

    • 您可以選擇遵守夏令時或UTC的時區。如果您選擇了一個遵守夏令時的地區,計時工作將被跳過,或者可能會在一兩個小時內出現不開火的情況夏令時開始或結束的時間.要按每小時(絕對時間)運行,請選擇UTC。

    • 作業調度器不適用於低延遲作業。由於網絡或雲問題,作業運行有時可能會延遲幾分鍾。在這些情況下,計劃作業將在服務可用時立即運行。

  3. 點擊保存

暫停並恢複作業計劃

要暫停作業,您可以:

  • 點擊暫停工作細節麵板。

  • 點擊編輯日程工作細節麵板,並設置計劃類型手冊(停頓了一下)

若要恢複已暫停的作業計劃,請設置計劃類型計劃

視圖的工作

點擊工作圖標工作流在側欄中。出現Jobs列表。Jobs頁麵列出了所有已定義的作業、集群定義、計劃(如果有的話)以及最後一次運行的結果。

請注意

如果你有增加工作崗位限製啟用此工作空間後,在jobs列表中隻顯示25個作業,以提高頁麵加載時間。使用左右箭頭瀏覽完整的工作列表。

您可以在“工作列表”中過濾工作:

  • 使用關鍵字。如果您為這個工作空間啟用了增加的作業限製特性,則隻支持對名稱、作業ID和作業標記字段進行關鍵字搜索。

  • 隻選擇你擁有的工作。

  • 選擇您有權限訪問的所有作業。訪問此過濾器需要這樣做作業訪問控製啟用。

  • 使用標簽.若要搜索僅使用密鑰創建的標記,請在搜索框中鍵入密鑰。要搜索用鍵和值創建的標記,可以根據鍵、值或鍵和值同時搜索。例如,對於帶有鍵的標記部門還有價值金融,你可以搜索部門金融尋找匹配的工作。要通過鍵和值進行搜索,輸入鍵和值,用冒號分隔;例如,部門:財務

還可以單擊任何列標題,按該列對作業列表進行排序(降序或升序)。啟用了增加的作業限製特性後,隻能按順序排序的名字工作ID,或創建通過.默認的排序方式是按的名字按升序排列。

視圖為作業運行

  1. 點擊工作圖標工作流在側欄中。

  2. 的名字列中,單擊作業名稱。的運行選項卡顯示活動運行和已完成運行的表。

作業運行表

單擊,切換到矩陣視圖矩陣.矩陣視圖顯示作業的運行曆史記錄,包括每個作業任務。

工作運行矩陣的行顯示運行的總持續時間和運行的狀態。控件中的工具條上方懸停,可以查看運行的詳細信息,包括開始時間、持續時間和狀態工作運行行。

中的每個單元格任務行表示任務和任務對應的狀態。若要查看每個任務的詳細信息,包括開始時間、持續時間、集群和狀態,請將鼠標懸停在該任務的單元格上。

作業運行和任務運行欄用顏色編碼,以指示運行狀態。成功運行為綠色,不成功運行為紅色,跳過運行為粉紅色。各個作業運行和任務運行欄的高度提供了運行持續時間的可視化指示。

作業運行矩陣

Databricks最多可維護60天的作業運行曆史記錄。如果需要保存作業運行,Databricks建議在結果過期之前導出結果。有關更多信息,請參見導出作業運行結果

查看作業運行詳情

作業運行詳細信息頁麵包含作業輸出和到日誌的鏈接,其中包括關於作業運行中每個任務的成功或失敗的信息。方法訪問作業運行詳細信息運行為工作付費。控件中查看作業運行的詳細信息運行選項卡中,單擊運行的鏈接運行的列已完成運行(過去60天)表格回到運行選項卡為作業,單擊工作ID價值。

單擊任務可查看任務運行詳情,包括:

  • 運行任務的集群

    • 任務的Spark UI

    • 任務日誌

    • 任務的度量

單擊工作ID值返回運行為工作付費。單擊作業運行ID值返回作業運行詳細信息。

查看最近的作業運行情況

您可以查看您有權訪問的工作空間中所有作業的當前運行和最近完成的運行列表,包括由外部編排工具(如Apache workflow或Azure Data Factory)啟動的運行。查看最近作業運行的列表。

  1. 點擊工作圖標工作流在側欄中。出現Jobs列表。

  2. 單擊工作運行選項卡。出現“作業運行”列表。

工作運行列表顯示:

  • 運行的開始時間。

  • 與運行關聯的作業的名稱。

  • 作業作為用戶名運行。

  • 運行是由作業計劃或API請求觸發,還是手動啟動。

  • 當前正在運行的作業所消耗的時間,或已完成運行的總運行時間。

  • 運行的狀態等待運行跳過成功失敗的終止終止內部錯誤定時取消了取消,或等待重試

查看作業運行詳細信息,單擊開始時間列為運行。控件中的作業名稱,查看作業詳細信息工作列。

導出作業運行結果

您可以導出所有作業類型的筆記本運行結果和作業運行日誌。

導出筆記本運行結果

可以通過導出作業運行結果來持久化作業運行。對於筆記本作業運行,可以這樣做出口一個渲染的筆記本,以後可以進口到你的Databricks工作區。

導出帶有單個任務的作業的notebook運行結果。

  1. 在作業詳細信息頁麵上,單擊查看詳細信息中運行的鏈接運行的列已完成運行(過去60天)表格

  2. 點擊導出到HTML

導出包含多個任務的作業的notebook運行結果。

  1. 在作業詳細信息頁麵上,單擊查看詳細信息中運行的鏈接運行的列已完成運行(過去60天)表格

  2. 單擊要導出的筆記本任務。

  3. 點擊導出到HTML

導出作業運行日誌

您還可以導出作業運行的日誌。您可以設置作業,通過作業API自動將日誌傳遞到DBFS或S3。看到new_cluster.cluster_log_conf對象的請求體中的創建一份新工作操作(帖子/ /創建工作)。

編輯作業

一些配置選項可用於作業,其他選項可用於個人任務.例如,隻能在作業上設置最大並發運行,而必須為每個任務定義參數。

更改作業的配置。

  1. 點擊工作圖標工作流在側欄中。

  2. 的名字列中,單擊作業名稱。

側麵麵板顯示工作細節.你可以更改時間表、集群配置、通知、最大並發運行數以及添加或更改標記。如果作業訪問控製啟用後,還可以編輯作業權限。

標簽

要向作業添加標簽或鍵:值屬性,可以添加標簽當你編輯工作的時候。中的作業可以使用標記篩選工作列表;例如,你可以使用a部門標簽,過濾屬於特定部門的所有作業。

請注意

因為作業標記不是為存儲個人身份信息或密碼等敏感信息而設計的,Databricks建議僅對非敏感值使用標記。

標記還會傳播到作業運行時創建的作業集群,允許您將標記與現有的作業集群一起使用集群監控

單擊,添加或編輯標簽+標簽工作細節側板。您可以將標記作為鍵和值或標簽添加。如果需要添加標簽,請在關鍵字段,並將價值字段是空的。

集群

要查看與集群關聯的任務,請將鼠標懸停在側麵板中的集群上。單擊,可更改所有關聯任務的集群配置配置在集群下麵。若要為所有關聯任務配置新的集群,請單擊交換在集群下麵。

最大並發運行數

此作業的最大並行運行次數。如果作業在嚐試開始新的運行時已經達到活動運行的最大次數,Databricks將跳過運行。將此值設置為高於默認值1,以同時執行同一作業的多次運行。例如,如果您頻繁地觸發作業,並且希望允許連續的運行彼此重疊,或者希望觸發因輸入參數不同而不同的多次運行,那麼這就很有用。

通知

您可以添加一個或多個電子郵件地址,以便在此作業的運行開始、完成或失敗時通知:

  1. 點擊編輯通知

  2. 點擊添加

  3. 輸入電子郵件地址,然後單擊要發送到該地址的每種通知類型的複選框。

  4. 如需輸入其他通知郵箱地址,請單擊添加

  5. 如果不希望收到跳過作業運行的通知,請單擊複選框。

  6. 點擊確認

將這些電子郵件通知與您最喜歡的通知工具集成,包括:

控製對作業的訪問

作業訪問控製使作業所有者和管理員能夠對其作業授予細粒度權限。作業所有者可以選擇哪些其他用戶或組可以查看作業的結果。所有者還可以選擇誰可以管理作業運行(立即運行和取消運行權限)。

看到作業訪問控製獲取詳細信息。

編輯任務

設置任務配置項。

  1. 點擊工作圖標工作流在側欄中。

  2. 的名字列中,單擊作業名稱。

  3. 單擊任務選項卡。

任務依賴關係

方法定義作業中任務的執行順序取決於下拉。您可以將此字段設置為作業中的一個或多個任務。

編輯任務依賴項

請注意

取決於如果作業僅由單個任務組成,則不可見。

配置任務依賴關係將創建任務執行的有向無環圖(DAG),這是在作業調度器中表示執行順序的常用方法。例如,考慮以下由四個任務組成的作業:

任務依賴關係示例圖
  • 任務1是根任務,不依賴於任何其他任務。

  • 任務2和任務3依賴於任務1先完成。

  • 最後,Task 4取決於Task 2和Task 3是否成功完成。

Databricks在運行下遊任務之前運行上遊任務,盡可能多地並行運行它們。下圖說明了這些任務的處理順序:

任務依賴項示例流

單個任務配置選項

單個任務有以下配置選項:

集群

若要配置任務運行的集群,請單擊集群下拉。共享作業集群可以編輯,但如果該共享作業集群仍被其他任務使用,則不能刪除。

有關選擇和配置集群以運行任務的詳細信息,請參見集群配置技巧

依賴庫

在任務運行之前,將在集群上安裝依賴庫。必須設置所有任務依賴項,以確保在運行開始之前安裝它們。

如需添加依賴庫,單擊高級選項並選擇添加依賴庫打開添加依賴庫選擇器。遵循以下建議庫的依賴關係用於指定依賴項。

重要的

如果已將庫配置為自動在所有集群上安裝,或選擇已安裝庫的現有終止集群時,作業執行不會等待庫安裝完成。如果作業需要特定的庫,則應在“依賴庫”字段中將該庫附加到作業。

任務參數變量

可以將模板化變量作為任務參數的一部分傳遞到作業任務中。當作業任務運行時,這些變量將被適當的值替換。您可以使用任務參數值來傳遞作業運行的上下文,例如運行ID或作業的開始時間。

當作業運行時,被雙花括號括起來的任務參數變量將被替換並追加到作為值的一部分包含的可選字符串值。例如,傳遞一個名為MyJobId值為my-job-6對於任何作業ID為6的運行,添加以下任務參數:

“MyJobID”“我的工作- {{job_id}}”

雙花括號的內容不會作為表達式計算,因此不能在雙花括號內執行操作或函數。花括號內的空格沒有被去掉,所以{{job_id}}不會被評估。

支持如下任務參數變量:

變量

描述

示例值

{{job_id}}

分配給作業的唯一標識符

1276862

{{run_id}}

分配給作業運行的唯一標識符

3447843

{{start_date}}

任務運行開始的日期。格式為UTC時區下的yyyy-MM-dd。

2021-02-15

{{start_time}}

創建並準備好集群後運行開始執行的時間戳。格式為從UTC時區的UNIX紀元開始的毫秒數,由返回System.currentTimeMillis ()

1551622063030

{{task_retry_count}}

第一次嚐試失敗後試圖運行任務的重試次數。第一次嚐試時該值為0,每次重試時該值遞增。

{{parent_run_id}}

分配給具有多個任務的作業運行的唯一標識符。

3447835

{{task_key}}

分配給具有多個任務的作業的一部分的任務的唯一名稱。

“clean_raw_data”

您可以在任何任務中設置這些變量創造一個工作編輯作業,或運行帶有不同參數的作業

超時

一項工作的最長完成時間。如果作業在此時間內未完成,則Databricks將其狀態設置為“超時”。

重試

一種策略,用於確定重試失敗運行的時間和次數。單擊,設置該任務的重試次數高級選項並選擇編輯重試策略.重試間隔是以失敗運行開始和後續重試運行之間的毫秒為單位計算的。

請注意

如果兩者都配置超時而且重試,該超時時間適用於每次重試。

克隆一份工作

通過克隆現有作業,可以快速創建新作業。克隆作業將創建與作業相同的副本(除了作業ID不同)。在作業頁麵上,單擊更多…旁邊的作業名稱並選擇克隆從下拉菜單中。

克隆任務

可以通過克隆現有任務快速創建新任務:

  1. 在作業頁麵上,單擊任務選項卡。

  2. 選擇要克隆的任務。

  3. 點擊職位垂直省略並選擇克隆的任務

刪除作業

若要刪除作業,請在作業頁麵上單擊更多…旁邊的作業名稱並選擇刪除從下拉菜單中。

刪除任務

刪除任務。

  1. 單擊任務選項卡。

  2. 選擇需要刪除的任務。

  3. 點擊職位垂直省略並選擇刪除任務

複製任務路徑

將路徑複製到一個任務,例如,一個筆記本路徑:

  1. 單擊任務選項卡。

  2. 選擇包含複製路徑的任務。

  3. 點擊工作複製圖標旁邊的任務路徑,將該路徑複製到剪貼板。

使用遠程Git存儲庫中的筆記本運行作業

預覽

此功能已在公共預覽

您可以使用位於遠程Git存儲庫中的筆記本運行作業。該特性簡化了生產作業的創建和管理,並自動化持續部署:

  • 您不需要在Databricks中創建一個單獨的生產回購,管理它的權限,並保持更新。

  • 您可以防止對生產作業的無意更改,例如生產回購中的本地編輯或切換分支的更改。

  • 作業定義流程在遠程存儲庫中隻有一個真實源。

要在遠程Git存儲庫中使用筆記本,必須設置Git與Databricks Repos的集成

使用位於遠程Git存儲庫中的筆記本創建任務:

  1. 類型下拉,選擇筆記本

  2. 下拉,選擇Git提供者.的Git信息對話框出現了。

  3. Git信息對話框,輸入存儲庫的詳細信息。

    路徑,輸入到筆記本位置的相對路徑,例如etl /筆記本電腦/

    當您進入相對路徑時,不要以/./並且不要包含筆記本文件擴展名,例如. py

多任務作業中的其他筆記本任務以以下方式之一引用遠程存儲庫中的同一提交:

  • $分支/頭git_branch設置

  • 美元的標記git_tag設置

  • 的價值git_commit

在多任務作業中,不能同時存在使用本地筆記本的任務和使用遠程存儲庫的任務。這一限製不適用於非筆記本任務。

最佳實踐

集群配置技巧

在操作作業時,集群配置非常重要。下麵提供了關於選擇和配置作業集群的一般指導,然後是針對特定作業類型的建議。

使用共享作業集群

若要優化編排多個任務的作業的資源使用,請使用共享作業集群。共享作業集群允許同一作業運行中的多個任務重用該集群。您可以使用單個作業集群運行作為作業一部分的所有任務,也可以使用針對特定工作負載優化的多個作業集群。使用實例使用共享作業集群。

  1. 選擇新工作組別創建任務並完成集群配置

  2. 向作業添加任務時選擇新集群,或創建新作業集群。選擇時配置的任何集群新工作組別可用於作業中的任何任務。

共享作業集群的範圍僅限於單個作業運行,不能被其他作業或同一作業的運行使用。

不能在共享作業集群配置中聲明庫。必須在任務設置中添加依賴庫。

為您的作業選擇正確的集群類型

  • 新工作組別是作業或任務運行的專用集群。共享作業集群在第一個使用該集群的任務啟動時創建並啟動,在最後一個使用該集群的任務完成後終止。集群空閑時不會終止,隻有在所有使用它的任務完成後才會終止。如果共享作業集群失敗或在所有任務完成之前終止,則創建一個新集群。在任務啟動時創建並啟動作用域為單個任務的集群,在任務完成時終止集群。在生產環境中,Databricks建議使用新的共享或任務範圍的集群,以便每個作業或任務在完全隔離的環境中運行。

  • 在新集群上運行任務時,該任務被視為數據工程(任務)工作負載,取決於任務工作負載定價。在現有的通用集群上運行任務時,該任務被視為數據分析(通用)工作負載,受通用工作負載定價的約束。

  • 如果選擇已終止的現有集群,而作業所有者已終止可以重新啟動許可, Databricks在作業計劃運行時啟動集群。

  • 現有的通用集群最適合執行更新等任務指示板每隔一定的時間。

使用池可以減少集群啟動時間

為了縮短新作業集群的開始時間,可以創建並配置作業的集群以使用該池。

自動可用分區

要利用自動可用分區(Auto-AZ),必須使用集群API,設置awsattributes.zone_id“汽車”.看到可用性區域

筆記本工作小貼士

筆記本單元格的總輸出(所有筆記本單元格的總輸出)受20MB大小限製。此外,單個單元格輸出的大小限製為8MB。如果計算單元的總輸出超過20MB,或者單個計算單元的輸出大於8MB,則取消運行並標記為失敗。

如果需要幫助查找接近或超過限製的單元格,請在通用集群上運行筆記本並使用它筆記本自動保存技術

流媒體的任務

Spark Streaming作業的最大並發運行不應該設置為大於1。流作業應該設置為使用cron表達式運行“*?”(每分鍾)。

由於流任務是連續運行的,因此它應該始終是作業中的最後一個任務。

JAR的工作

運行JAR作業時,請記住以下幾點:

輸出大小限製

請注意

在Databricks Runtime 6.3及以上版本中可用。

作業輸出(例如發送到stdout的日誌輸出)的大小限製為20MB。如果總輸出的大小更大,則取消運行並標記為失敗。

為了避免遇到這個限製,您可以通過設置spark.databricks.driver.disableScalaOutputSpark配置到真正的.缺省情況下,標誌值為.該標誌控製Scala JAR作業和Scala筆記本的單元輸出。如果使能該標誌,Spark將不向客戶端返回作業執行結果。該標誌不會影響寫入集群日誌文件中的數據。建議僅對JAR作業的作業集群設置此標誌,因為它將禁用筆記本結果。

使用共享的SparkContext

因為Databricks是托管服務,所以可能需要修改一些代碼以確保Apache Spark作業正確運行。JAR作業程序必須使用共享的SparkContextAPI來獲取SparkContext.因為Databricks初始化SparkContext,調用SparkContext ()將會失敗。為了得到SparkContext,隻使用共享SparkContext由Databricks創建:

瓦爾goodSparkContextSparkContextgetOrCreate()瓦爾goodSparkSessionSparkSession構建器().getOrCreate()

在使用shared時,還有幾種方法應該避免SparkContext

  • 不要打電話SparkContext.stop ()

  • 不要打電話system . exit (0)sc.stop ()在你的結尾主要程序。這可能會導致未定義的行為。

使用終於嚐試用於清理作業的塊

考慮一個由兩部分組成的JAR:

  • jobBody ()其中包含了工作的主要部分。

  • jobCleanup ()哪些必須在之後執行jobBody ()該函數是否成功或返回異常。

舉個例子,jobBody ()可以創建表,你可以使用嗎jobCleanup ()放下這些桌子。

確保clean up方法被調用的安全方法是放一個終於嚐試代碼中的塊:

試一試jobBody()最後jobCleanup()

不應該試著清理使用sys.addShutdownHook (jobCleanup)或以下代碼:

瓦爾cleanupThread線程覆蓋def運行jobCleanup()運行時getRuntimeaddShutdownHookcleanupThread

由於Databricks中Spark容器生命周期的管理方式,shutdown鉤子不能可靠地運行。

配置JAR作業參數

使用JSON字符串數組將參數傳遞給JAR作業。看到spark_jar_task對象的請求體中的創建一份新工作操作(帖子/ /創建工作)。要訪問這些參數,請檢查字符串數組傳遞給主要函數。

庫的依賴關係

Spark驅動程序有一些不能被覆蓋的庫依賴項。這些庫的優先級高於與它們衝突的任何庫。

要獲得驅動程序庫依賴項的完整列表,請在連接到相同Spark版本的集群(或具有您想要檢查的驅動程序的集群)的筆記本中運行以下命令。

%sh ls /databricks/jars .

管理庫依賴項

在為作業創建jar時處理庫依賴關係時,一個很好的經驗法則是將Spark和Hadoop列為提供依賴關係。在Maven上,添加Spark和Hadoop作為提供的依賴項,示例如下:

< >的依賴< groupId >org.apache.spark< / groupId >< artifactId >spark-core_2.11< / artifactId ><版本>tripwire> < /版本< >範圍提供< / >範圍< / >的依賴< >的依賴< groupId >org.apache.hadoop< / groupId >< artifactId >hadoop核心< / artifactId ><版本>1.2.1 "> < /版本< >範圍提供< / >範圍< / >的依賴

sbt,將Spark和Hadoop作為提供的依賴項添加,示例如下:

libraryDependencies+ =“org.apache.spark”% %“spark-core”“tripwire”“提供”libraryDependencies+ =“org.apache.hadoop”% %“hadoop核心”“1.2.1”“提供”

提示

根據所運行的版本為依賴項指定正確的Scala版本。