將生產工作負載遷移到Databricks

本指南解釋如何將生產作業從其他平台上的Apache Spark轉移到Databricks上的Apache Spark。Beplay体育安卓版本

概念

磚的工作

可以捆綁並提交到Databricks的單個代碼單元。Databricks作業相當於火花的應用程序用一個SparkContext.入口點可以是一個庫(例如,JAR、egg、wheel)或一個筆記本。可以在具有複雜重試和警報機製的調度上運行Databricks作業。運行作業的主要接口是jobsAPI而且用戶界麵

在您的帳戶中由Databricks管理的一組實例,但當它們空閑時不產生Databricks費用。在池中提交多個作業可以確保作業快速啟動。您可以為實例池設置護欄(實例類型、實例限製等)和自動伸縮策略。池相當於其他Spark平台上的自動伸縮集群。Beplay体育安卓版本

遷移步驟

本節提供將生產作業移動到Databricks的步驟。

步驟1:創建存儲池

創建自動伸縮池.這相當於在其他Spark平台上創建一個自動伸縮的集群。Beplay体育安卓版本在其他平台上,如果Beplay体育安卓版本自動伸縮集群中的實例空閑了幾分鍾或幾小時,則需要為此付費。Databricks為您免費管理實例池。也就是說,如果這些機器沒有被使用,你就不需要向Databricks付款;你隻向雲提供商付費。磚的指控隻有當作業在實例上運行時。

創建池

主要配置:

  • 最小空閑:該池維護的未被作業使用的備用實例的數量。你可以把它設為0。

  • 最大容量:可選字段。如果已經設置了雲提供程序實例限製,則可以將此字段保留為空。如果要設置額外的最大限製,請設置一個較高的值,以便大量作業可以共享池。

  • 空閑實例自動終止:超過最小空閑時間的實例在指定時間段內空閑時,將被釋放回雲提供商。該值越高,準備好的實例就越多,因此作業啟動的速度就會更快。

步驟2:在池上運行作業

可以使用Jobs API或UI在池上運行作業。您必須通過提供集群規範來運行每個作業。當作業即將啟動時,Databricks會自動從池中創建一個新的集群。當作業完成時,集群將自動終止。您將根據作業的運行時間被收取確切的費用。這是在Databricks上運行作業的最經濟有效的方法。每個新的集群有:

  • 一個相關的SparkContext,相當於其他Spark平台上的Spark應用。Beplay体育安卓版本

  • 一個驅動節點和指定數量的工作者。對於單個作業,可以指定工作者範圍。Databricks根據單個Spark作業所需的資源自動擴展該作業。磚基準證明這可以為您節省高達30%的雲成本,具體取決於您的工作性質。

在池中運行作業有三種方式:API/CLI,風流,UI。

/ CLI API

  1. 下載並配置磚CLI

  2. 運行以下命令提交一次代碼。API返回一個URL,您可以使用該URL跟蹤作業運行的進度。

    Databricks運行submit——json“run_name”“我的火花工作”“new_cluster”“spark_version”“7.3.x-scala2.12”“instance_pool_id”“0313 - 121005 - test123池——這樣的“num_workers”10“庫”“罐子”“dbfs: / my-jar.jar”“timeout_seconds”3600“spark_jar_task”“main_class_name”“com.databricks.ComputeModels”
  3. 要調度作業,請使用以下示例。通過該機製創建的作業顯示在工作列表頁麵.返回值是ajob_id可以用來查看所有運行的狀態。

    工作創建——json“名稱”“夜間模式”培訓“new_cluster”“spark_version”“7.3.x-scala2.12”, ...“instance_pool_id”“0313 - 121005 - test123池——這樣的“num_workers”10“庫”“罐子”“dbfs: / my-jar.jar”“email_notifications”“on_start”“john@foo.com”“on_success”“sally@foo.com”“on_failure”“bob@foo.com”“timeout_seconds”3600“max_retries”2“安排”“quartz_cron_expression”“0 15 22 ?”\ \ * *”“timezone_id”“美國/ Los_Angeles”“spark_jar_task”“main_class_name”“com.databricks.ComputeModels”

如果你使用spark-submit來提交Spark作業時,下表顯示了Spark -submit參數如何映射到創建新工作操作(帖子/ /創建工作)。

spark-submit參數

它如何應用於Databricks

海爾集團

使用spark_jar_task結構提供主類名和參數。

罐子

使用參數提供依賴項列表。

-py-files

對於Python作業,請使用spark_python_task結構.您可以使用參數提供蛋或輪依賴項。

在雲中,您不需要管理長時間運行的主節點。所有實例和作業都由Databricks服務管理。忽略此參數。

-deploy-mode

在“數據庫”中忽略此參數。

相依

new_cluster結構,可以使用spark_conf論點。

-num-executors

new_cluster結構,可以使用num_workers論點。你也可以使用自動定量選項提供範圍(推薦)。

-driver-memory, -driver-cores

根據所需的驅動程序內存和內核,選擇適當的實例類型。

您將在池創建期間為驅動程序提供實例類型。提交作業時忽略此參數。

-executor-memory, -executor-cores

根據需要的執行程序內存,選擇適當的實例類型。

您將在池創建期間為工作者提供實例類型。提交作業時忽略此參數。

-driver-class-path

spark.driver.extraClassPathspark_conf參數中的適當值。

-driver-java-options

spark.driver.extraJavaOptions到spark_conf參數中的適當值。

文件

spark.files中的適當值spark_conf論點。

- name

提交作業運行請求帖子/ /運行/提交工作),用run_name論點。在創建工作請求帖子/ /創建工作),用的名字論點。

氣流

磚提供了一個氣流操作符如果你想使用氣流在數據庫中提交作業。Databricks風流操作符調用觸發一個新的作業運行操作(帖子/工作/運行)向Databricks提交作業。看到使用Apache風流編排Databricks作業

用戶界麵

Databricks提供了一個簡單、直觀、易於使用的UI來提交和調度作業。要從UI創建和提交作業,請遵循循序漸進的指導

步驟3:排除故障

Databricks提供了許多工具來幫助您排除故障。

訪問日誌和Spark UI

Databricks維護一個完全管理的Spark曆史服務器,允許您訪問所有的Spark日誌和每個作業運行的Spark UI。可以從工作運行頁麵以及作業運行詳細信息頁麵:

工作運行

轉發日誌

您還可以將集群日誌轉發到您的雲存儲位置。要將日誌發送到所選的位置,請使用cluster_log_conf參數new_cluster結構

查看指標

作業正在運行時,您可以轉到集群頁麵,並在指標選項卡。Databricks還每15分鍾快照這些指標並存儲它們,因此即使在您的工作完成後也可以查看這些指標。要將指標發送到您的指標服務器,您可以在集群中安裝自定義代理。看到監視性能

Ganglia指標

設置警報

中使用email_notifications創建新工作操作(帖子/ /創建工作)來獲取作業失敗的警報。

您還可以將這些電子郵件提醒轉發到PagerDuty、Slack和其他監控係統。

常見問題(faq)

我能在沒有泳池的情況下工作嗎?

是的。池是可選的。可以直接在新集群上運行作業。在這種情況下,Databricks通過向雲提供商請求所需的實例來創建集群。對於池,如果池中有可用的實例,則集群啟動時間將在30秒左右。

什麼是筆記本工作?

Databricks有不同的工作類型——jar、Python和筆記本。筆記本作業類型在指定的筆記本中運行代碼。看到自動可用性區域

與JAR作業相比,什麼時候我應該使用筆記本作業?

JAR作業等價於火花提交作業。它執行JAR,然後您可以查看日誌和Spark UI以進行故障排除。筆記本作業執行指定的筆記本。你可以在筆記本中導入庫,也可以從筆記本中調用你的庫。使用筆記本工作的好處是主要入口點是,您可以在筆記本輸出區輕鬆調試生產作業的中間結果。看到JAR的工作

我能連接到我自己的蜂巢轉移體嗎?

是的,Databricks支持外部Hive metastores和Glue目錄。看到