通过http运行livy job而不必每次都上传jar

时间:2018-05-11 21:14:23

标签: java apache-spark livy

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

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

例如:

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

由于

3 个答案:

答案 0 :(得分:2)

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

Livy - Cloudera

Livy - Apache

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

答案 1 :(得分:1)

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

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

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

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

client.submit(job).get();

答案 2 :(得分:0)

您可以使用

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

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