This is an automated email from the ASF dual-hosted git repository.
jongyoul pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/zeppelin.git
The following commit(s) were added to refs/heads/master by this push:
new 5de2d035fa [ZEPPELIN-5962] LivyInterpreter support more parameter when
create session (#4657)
5de2d035fa is described below
commit 5de2d035fadff6aa43e463f33ac030f831ee1d58
Author: mrzhao <[email protected]>
AuthorDate: Tue Sep 19 05:55:11 2023 +0800
[ZEPPELIN-5962] LivyInterpreter support more parameter when create session
(#4657)
* LivyInterpreter support more parameter when create session
* Add test for ZEPPELIN-5962
---------
Co-authored-by: mrzhao <[email protected]>
---
.../apache/zeppelin/livy/BaseLivyInterpreter.java | 19 ++++++++++--
.../apache/zeppelin/livy/LivyInterpreterIT.java | 36 ++++++++++++++++++++++
2 files changed, 52 insertions(+), 3 deletions(-)
diff --git
a/livy/src/main/java/org/apache/zeppelin/livy/BaseLivyInterpreter.java
b/livy/src/main/java/org/apache/zeppelin/livy/BaseLivyInterpreter.java
index f7b576d818..b897537ec2 100644
--- a/livy/src/main/java/org/apache/zeppelin/livy/BaseLivyInterpreter.java
+++ b/livy/src/main/java/org/apache/zeppelin/livy/BaseLivyInterpreter.java
@@ -19,6 +19,7 @@ package org.apache.zeppelin.livy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
+import com.google.gson.JsonObject;
import com.google.gson.annotations.SerializedName;
import org.apache.commons.lang3.StringUtils;
@@ -302,15 +303,19 @@ public abstract class BaseLivyInterpreter extends
Interpreter {
throws LivyException {
try {
Map<String, String> conf = new HashMap<>();
+ Map<String, String> params = new HashMap<>();
for (Map.Entry<Object, Object> entry : getProperties().entrySet()) {
if (entry.getKey().toString().startsWith("livy.spark.") &&
!entry.getValue().toString().isEmpty()) {
conf.put(entry.getKey().toString().substring(5),
entry.getValue().toString());
+ } else if (entry.getKey().toString().startsWith("livy.") &&
+ !entry.getValue().toString().isEmpty()) {
+ params.put(entry.getKey().toString().substring(5),
entry.getValue().toString());
}
}
CreateSessionRequest request = new CreateSessionRequest(kind,
- user == null || user.equals("anonymous") ? null : user, conf);
+ user == null || user.equals("anonymous") ? null : user, conf,
params);
SessionInfo sessionInfo = SessionInfo.fromJson(
callRestAPI("/sessions", "POST", request.toJson()));
long start = System.currentTimeMillis();
@@ -776,15 +781,23 @@ public abstract class BaseLivyInterpreter extends
Interpreter {
@SerializedName("proxyUser")
public final String user;
public final Map<String, String> conf;
+ public final Map<String, String> params;
- CreateSessionRequest(String kind, String user, Map<String, String> conf) {
+ CreateSessionRequest(String kind, String user, Map<String, String> conf,
+ Map<String, String> params) {
this.kind = kind;
this.user = user;
this.conf = conf;
+ this.params = params;
}
public String toJson() {
- return gson.toJson(this);
+ JsonObject jsonObject = new JsonObject();
+ jsonObject.add("conf", gson.toJsonTree(conf));
+ params.forEach(jsonObject::addProperty);
+ jsonObject.addProperty("kind", kind);
+ jsonObject.addProperty("proxyUser", user);
+ return gson.toJson(jsonObject);
}
}
diff --git a/livy/src/test/java/org/apache/zeppelin/livy/LivyInterpreterIT.java
b/livy/src/test/java/org/apache/zeppelin/livy/LivyInterpreterIT.java
index a649085897..3a3a17c5af 100644
--- a/livy/src/test/java/org/apache/zeppelin/livy/LivyInterpreterIT.java
+++ b/livy/src/test/java/org/apache/zeppelin/livy/LivyInterpreterIT.java
@@ -644,6 +644,42 @@ public class LivyInterpreterIT {
}
}
+ @Test
+ void testLivyParams() throws InterpreterException {
+ if (!checkPreCondition()) {
+ return;
+ }
+ InterpreterGroup interpreterGroup = new InterpreterGroup("group_1");
+ interpreterGroup.put("session_1", new ArrayList<Interpreter>());
+ Properties props = new Properties(properties);
+ props.setProperty("livy.spark.executor.cores", "4");
+ props.setProperty("livy.name", "zeppelin-livy");
+ LivySparkInterpreter sparkInterpreter = new LivySparkInterpreter(props);
+ sparkInterpreter.setInterpreterGroup(interpreterGroup);
+ interpreterGroup.get("session_1").add(sparkInterpreter);
+ AuthenticationInfo authInfo = new AuthenticationInfo("user1");
+ MyInterpreterOutputListener outputListener = new
MyInterpreterOutputListener();
+ InterpreterOutput output = new InterpreterOutput(outputListener);
+ InterpreterContext context = InterpreterContext.builder()
+ .setNoteId("noteId")
+ .setParagraphId("paragraphId")
+ .setAuthenticationInfo(authInfo)
+ .setInterpreterOut(output)
+ .build();
+ sparkInterpreter.open();
+
+ try {
+ InterpreterResult result = sparkInterpreter.interpret("sc.version\n" +
+ "assert(sc.getConf.get(\"spark.executor.cores\") == \"4\" && " +
+ "sc.getConf.get(\"spark.app.name\") ==
\"zeppelin-livy\")"
+ , context);
+ assertEquals(InterpreterResult.Code.SUCCESS, result.code(),
result.toString());
+ assertEquals(1, result.message().size());
+ } finally {
+ sparkInterpreter.close();
+ }
+ }
+
@Test
void testLivyTutorialNote() throws IOException, InterpreterException {
if (!checkPreCondition()) {