1

我正在使用 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);
}
4

1 回答 1

2

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

解决方法是:

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