Apache spark 如何通过Java API在Livy Job submit中设置代理用户

Apache spark 如何通过Java API在Livy Job submit中设置代理用户,apache-spark,cloudera,livy,Apache Spark,Cloudera,Livy,我正在使用Livy的JavaAPI提交一份关于集群中纱线的spark作业。目前作业正在以“livy”用户的身份提交,但我想以livy的代理用户的身份提交作业 可以通过向Livy服务器发送POST请求,通过在POST数据中传递一个字段来实现这一点。我在想这是否可以通过Livy的JavaAPI实现 我正在使用标准方式提交作业: LivyClient client = new LivyClientBuilder() .setURI(new URI(livyUrl)) .build(); tr

我正在使用Livy的JavaAPI提交一份关于集群中纱线的spark作业。目前作业正在以“livy”用户的身份提交,但我想以livy的代理用户的身份提交作业

可以通过向Livy服务器发送POST请求,通过在POST数据中传递一个字段来实现这一点。我在想这是否可以通过Livy的JavaAPI实现

我正在使用标准方式提交作业:

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);
}

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

这方面的解决办法是:

  • 通过RESTAPI创建会话(将请求发布到
    /session/
    ),并从请求的响应中读取会话ID。代理用户可以通过RESTAPI设置,方法是在POST数据中传递它:
    {“kind”:“spark”,“proxyUser”:“lok”}
  • 创建会话后,通过LivyClientBuilder使用ID连接到会话(livyURL将是
    /sessions//