【问题标题】:Run livy job via http without uploading jar every time通过 http 运行 livy 作业,无需每次都上传 jar
【发布时间】:2018-05-11 21:14:22
【问题描述】:

我正在玩 Livy/Spark,对如何使用其中的一些有点困惑。在构建作业的 livy 示例文件夹中有一个示例,该示例将上传到 spark。我喜欢正在使用的接口,但我想通过 http 连接到 livy/spark,因为我没有 java 客户端。这样看来,如果我使用 livyclient 上传 jar,它似乎只存在于该 spark 会话中。有没有办法将 livyjobs 上传到 spark 中,然后在所有 spark 中持续存在?将这些工作/应用程序改为 spark 会更好吗?

老实说,我正在尝试找出最好的方法。我希望能够通过 shell 进行交互操作,但我也想为我经常使用的 spark 中不可用的算法制作自定义作业。我不确定我应该用什么方法来解决这个问题。有什么想法吗?我应该如何使用 Livy?就像其他服务在 spark 中处理构建自定义应用程序/方法一样?

例如:

假设我有一些 javascript 应用程序,我有一些可以加载的数据,我想在其上运行算法 x。算法 x 是否在 spark 中实现,但是通过按下该按钮,我想将该数据放入 spark 中,无论是放入 hdfs 还是从 elasticsearch 中提取或其他。如果我有 livy,我想在 livy 中调用一些 rest 命令来执行此操作,然后它会运行该特定算法。这样做的标准方法是什么?

谢谢

【问题讨论】:

    标签: java apache-spark livy


    【解决方案1】:

    Livy 尚不支持文件上传。您必须为会话或批处理作业提供有效的文件路径。这些文件必须在 HDFS 中。 因此,主要是您可以将脚本或文件保存在 HDFS 中,然后使用 Livy 启动引用这些文件的批处理/交互作业。

    李维 - Cloudera

    李维-Apache

    编辑: Livy 正在由 Apache 孵化,他们计划添加一个新的 API 来支持资源上传。检查this

    【讨论】:

    • livy>0.3.0 确实支持文件上传
    【解决方案2】:

    下面的 api 可用于在您的应用程序启动时上传 jar 一次。

    LivyClient client = new LivyClientBuilder(false).setURI(uri).setAll(config).build();
    client.addJar(new URI(UPLOAD_JAR_PATH)).get();
    

    LivyClient 实例可以在应用程序范围内。 UPLOAD_JAR_PATH : jar 所在的 HDFS 路径,Livy Server 可以访问该路径

    然后使用同一个 LivyClient 实例提交多个作业。

    client.submit(job).get();
    

    【讨论】:

      【解决方案3】:

      您可以使用

      开始会话
      spark.jars = "hdfs:///some/hdfs/location/file.jar"
      

      因此您可以在任何会话中添加任意数量的样板代码。

      【讨论】:

        猜你喜欢
        • 2017-02-15
        • 1970-01-01
        • 2017-11-24
        • 1970-01-01
        • 1970-01-01
        • 2021-02-24
        • 2021-09-02
        • 2011-01-20
        • 1970-01-01
        相关资源
        最近更新 更多