用一罐磚的工作

Java存檔或JAR文件格式是基於流行的ZIP文件格式和用於聚合許多Java或Scala文件成一個。使用JAR任務,您可以確保快速、可靠的安裝Java或Scala代碼在你磚的工作。本文提供了一個示例創建一個JAR和工作運行應用程序打包在JAR。在本例中,您將:

  • 創建JAR項目定義一個示例應用程序。

  • 包塞在一個瓶子的示例文件。

  • 創建一個工作運行JAR。

  • 運行工作,查看結果。

在你開始之前

你需要完成這個示例如下:

  • 對於Java jar, Java開發工具包(JDK)。

  • Scala的壇子,JDK和sbt。

步驟1:創建一個本地目錄的例子

創建一個本地目錄來保存示例代碼和生成的工件,例如,databricks_jar_test

步驟2:創建JAR

完成以下指令使用Java或Scala創建JAR。

創建一個Java JAR

  1. databricks_jar_test文件夾中,創建一個文件命名PrintArgs.java用下麵的內容:

    進口java.util.Arrays;公共PrintArgs{公共靜態無效主要(字符串[]arg遊戲){係統println(數組toString(arg遊戲));}}
  2. 編譯PrintArgs.java文件,該文件創建該文件PrintArgs.class:

    javac PrintArgs.java
  3. (可選)運行編譯後的程序:

    java PrintArgs Hello World !#【你好,世界!】
  4. 在相同的文件夾中PrintArgs.javaPrintArgs.class文件,創建一個文件夾命名meta - inf

  5. meta - inf文件夾中,創建一個文件命名manifest . mf用下麵的內容。一定要添加一個換行符結束時,這個文件:

    主類:PrintArgs
  6. 的根源databricks_jar_test文件夾中,創建一個JAR命名PrintArgs.jar:

    jar cvfm PrintArgs。jar meta - inf / MANIFEST。曼氏金融* . class
  7. (可選)的根源databricks_jar_test文件夾,運行JAR:

    java jar PrintArgs。jar Hello World !#【你好,世界!】

    請注意

    如果你得到這個錯誤沒有主要清單屬性,PrintArgs.jar,一定要添加一個換行符結束manifest . mf文件,然後再次嚐試創建和運行JAR。

創建一個Scala JAR

  1. databricks_jar_test文件夾中,創建一個空文件命名build.sbt用下麵的內容:

    ThisBuild / scalaVersion: = " 2.12.14 " ThisBuild /組織:= " com。例子" lazy val PrintArgs = (project in file(".")) .settings( name := "PrintArgs" )
  2. databricks_jar_test文件夾,創建文件夾結構src / main / scala的例子

  3. 例子文件夾中,創建一個文件命名PrintArgs.scala用下麵的內容:

    例子對象PrintArgs{def主要(arg遊戲:數組(字符串):單位={println(arg遊戲mkString(”、“))}}
  4. 編譯的程序:

    sbt編譯
  5. (可選)運行編譯後的程序:

    sbt“運行Hello World \ !”#你好,世界!
  6. databricks_jar_test /項目文件夾中,創建一個文件命名assembly.sbt用下麵的內容:

    addSbtPlugin (“com。eed3si9n“%”sbt-assembly“%”2.0.0”)
  7. 的根源databricks_jar_test /項目文件夾中,創建一個JAR命名PrintArgs-assembly-0.1.0-SNAPSHOT.jar目標/ scala - 2.12文件夾:

    sbt組裝
  8. (可選)的根源databricks_jar_test文件夾,運行JAR:

    目標/ scala - 2.12 / PrintArgs-assembly-0.1.0-SNAPSHOT java jar。jar Hello World !#你好,世界!

步驟3。創建一個磚工作運行JAR

  1. 去你的磚的著陸頁,做以下之一:

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

    • 在側邊欄中,單擊新圖標並選擇工作從菜單中。

  2. 在任務出現在對話框任務選項卡中,取代添加一個名稱為你的工作…對你的工作名稱,例如JAR例子

  3. 任務名稱任務,輸入一個名稱,例如java_jar_task對於Java或scala_jar_taskScala。

  4. 類型中,選擇JAR

  5. 主類對於這個示例,輸入PrintArgs對於Java或example.PrintArgsScala。

  6. 依賴庫,點擊+添加

  7. 添加依賴庫對話框,上傳JAR選中時,拖動JAR(在這個例子中,PrintArgs.jar對於Java或PrintArgs-assembly-0.1.0-SNAPSHOT.jarScala)對話框的刪除JAR這裏區域。

  8. 點擊添加

  9. 參數對於這個示例,輸入["你好",“世界!”

  10. 點擊添加

步驟4:運行作業,查看工作運行的細節

點擊現在運行按鈕運行工作流。查看細節的運行,點擊查看運行觸發運行彈出或點擊鏈接開始時間列的運行工作運行視圖。

運行完成後,輸出顯示的輸出麵板,包括參數傳遞給任務。

輸出大小限製Jar的工作

工作產出,比如日誌輸出發送到stdout, 20 mb的大小限製。如果總輸出有一個更大的規模,是取消,標記為失敗。

為了避免遇到這個限製,可以防止stdout從司機磚通過設置回來spark.databricks.driver.disableScalaOutput火花配置真正的。默認情況下,標誌值。國旗控製單元輸出Scala JAR和Scala筆記本工作。如果啟用了國旗,引發不工作執行結果返回給客戶機。國旗並不影響數據集群中所寫的日誌文件。磚建議設置這個標誌隻對工作集群JAR的工作因為它禁用筆記本的結果。

建議:使用共享SparkContext

因為磚是一個托管服務,有些代碼更改可能是必要的,以確保您的Apache火花工作正確運行。JAR程序必須使用共享工作SparkContextAPI來獲得SparkContext。因為磚初始化SparkContext,程序調用SparkContext ()將會失敗。得到SparkContext,隻使用共享SparkContext由磚:

瓦爾goodSparkContext=SparkContextgetOrCreate()瓦爾goodSparkSession=SparkSession構建器()。getOrCreate()

還有幾種方法你應該避免在使用共享SparkContext

  • 不叫SparkContext.stop ()

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

建議:使用終於嚐試塊清理工作

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

  • jobBody ()它包含的主要工作的一部分。

  • jobCleanup ()後要執行jobBody (),是否該函數成功返回一個例外。

例如,jobBody ()創建表和jobCleanup ()那些表。

安全確保清理方法被調用的方法是放一個終於嚐試在代碼塊:

試一試{jobBody()}最後{jobCleanup()}

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

瓦爾cleanupThread=線程{覆蓋def運行=jobCleanup()}運行時getRuntimeaddShutdownHook(cleanupThread)

因為火花容器管理的生命周期數據磚,關閉鉤子不可靠地運行。

配置罐工作參數

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

管理庫依賴關係

火花驅動程序有一定的庫依賴關係,不能覆蓋。如果你的工作增加了衝突的庫,火花驅動程序庫依賴關係優先考慮。

讓司機庫依賴關係的完整列表,在筆記本上運行以下命令一個集群配置相同的火花版本(或集群與司機你想檢查):

% sh ls /磚/ jar

當你定義為jar庫依賴關係,磚建議清單火花和Hadoop提供依賴關係。在Maven中,添加火花和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,添加火花和Hadoop提供依賴項:

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

提示

指定正確的Scala版本對你依賴基於運行的版本。

下一個步驟

想要了解更多關於創建和運行數據磚工作,明白了創建和運行數據磚的工作