2017-07-21 159 views
1

我正在使用Livy的Java API在我的集羣上的YARN上提交Spark作業。目前這些工作是以「livy」用戶的身份提交的,但我想以Livy的代理用戶身份提交工作。如何在Livy作業中通過其Java API設置代理用戶

通過在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

發帖回答我自己的問題。 目前無法通過LivyClientBuilder設置代理用戶。

一種用於此解決辦法是:

  1. 創建通過REST API(POST請求< livy-server >/session/)會話,並從讀請求的響應的會話ID。代理用戶可以通過REST API將它傳遞到POST數據中來設置:{"kind": "spark", "proxyUser": "lok"}
  2. 創建會話後,使用ID通過LivyClientBuilder連接到它(livyURL將爲< livy-server >/sessions/<id>/)。