如何在Livy Job中设置代理用户通过其Java API提交

时间:2017-07-21 06:22:44

标签: apache-spark cloudera livy

我正在使用Livy的Java API在我的集群上的YARN上提交spark作业。目前,这些工作是以“livy”用户身份提交的,但我想以Livy的代理用户身份提交工作。

可以通过在POST数据中传递一个字段,向Livy服务器发送POST请求来完成此操作。我想是否可以通过Livy的Java API来完成。

我使用标准方式提交工作:

LivyClient client = new LivyClientBuilder()
  .setURI(new URI(livyUrl))
  .build();

try {
  System.err.printf("Uploading %s to the Spark context...\n", piJar);
  client.uploadJar(new File(piJar)).get();

  System.err.printf("Running PiJob with %d samples...\n", samples);
  double pi = client.submit(new PiJob(samples)).get();

  System.out.println("Pi is roughly: " + pi);
} finally {
  client.stop(true);
}

1 个答案:

答案 0 :(得分:1)

回答我自己的问题。 目前无法通过LivyClientBuilder设置代理用户。

解决方法是:

  1. 通过REST API创建会话(对< livy-server >/session/的POST请求)并从请求的响应中读取会话ID。可以通过在REST数据中传递代理用户来设置代理用户:{"kind": "spark", "proxyUser": "lok"}
  2. 创建会话后,通过LivyClientBuilder使用ID连接到它(livyURL将为< livy-server >/sessions/< id >/)。