用一罐砖的工作

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版本对你依赖基于运行的版本。

下一个步骤

想要了BOB低频彩解更多关于创建和运行数据砖工作,明白了创建和运行数据砖的工作