From 3635ed8a717108ba82753413bd0500519ffd4add Mon Sep 17 00:00:00 2001 From: Christian Fries Date: Sat, 8 Apr 2017 22:00:33 +0200 Subject: [PATCH 1/2] [ZEPPELIN-2375]: Avoid modification of CLASSPATH variable. The script previously modified the CLASSPATH variable. This may lead to an undesired side effect, where the zeppelin server classpath is exported to the zeppelin interpreter classpath, see JIRA issue ZEPPELIN-2375 for details. Instead of modifying classpath we now work the other way around and set ZEPPELIN_CLASSPATH or ZEPPELIN_INT_CLASSPATH to include CLASSPATH and then use ZEPPELIN_CLASSPATH or ZEPPELIN_INT_CLASSPATH in the corresponding exec (runner), respectively. See also https://issues.apache.org/jira/browse/ZEPPELIN-2375 --- bin/interpreter.sh | 10 ++++------ bin/zeppelin.sh | 4 ++-- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/bin/interpreter.sh b/bin/interpreter.sh index a9d8f32c4fa..29d02218d80 100755 --- a/bin/interpreter.sh +++ b/bin/interpreter.sh @@ -64,7 +64,7 @@ fi . "${bin}/common.sh" -ZEPPELIN_INTP_CLASSPATH="" +ZEPPELIN_INTP_CLASSPATH="${CLASSPATH}" # construct classpath if [[ -d "${ZEPPELIN_HOME}/zeppelin-interpreter/target/classes" ]]; then @@ -190,8 +190,6 @@ fi addJarInDirForIntp "${LOCAL_INTERPRETER_REPO}" -CLASSPATH+=":${ZEPPELIN_INTP_CLASSPATH}" - if [[ ! -z "$ZEPPELIN_IMPERSONATE_USER" ]]; then suid="$(id -u ${ZEPPELIN_IMPERSONATE_USER})" if [[ -n "${suid}" || -z "${SPARK_SUBMIT}" ]]; then @@ -204,12 +202,12 @@ fi if [[ -n "${SPARK_SUBMIT}" ]]; then if [[ -n "$ZEPPELIN_IMPERSONATE_USER" ]] && [[ "$ZEPPELIN_IMPERSONATE_SPARK_PROXY_USER" != "false" ]]; then - INTERPRETER_RUN_COMMAND+=' '` echo ${SPARK_SUBMIT} --class ${ZEPPELIN_SERVER} --driver-class-path \"${ZEPPELIN_INTP_CLASSPATH_OVERRIDES}:${CLASSPATH}\" --driver-java-options \"${JAVA_INTP_OPTS}\" ${SPARK_SUBMIT_OPTIONS} --proxy-user ${ZEPPELIN_IMPERSONATE_USER} ${SPARK_APP_JAR} ${PORT}` + INTERPRETER_RUN_COMMAND+=' '` echo ${SPARK_SUBMIT} --class ${ZEPPELIN_SERVER} --driver-class-path \"${ZEPPELIN_INTP_CLASSPATH_OVERRIDES}:${ZEPPELIN_INTP_CLASSPATH}\" --driver-java-options \"${JAVA_INTP_OPTS}\" ${SPARK_SUBMIT_OPTIONS} --proxy-user ${ZEPPELIN_IMPERSONATE_USER} ${SPARK_APP_JAR} ${PORT}` else - INTERPRETER_RUN_COMMAND+=' '` echo ${SPARK_SUBMIT} --class ${ZEPPELIN_SERVER} --driver-class-path \"${ZEPPELIN_INTP_CLASSPATH_OVERRIDES}:${CLASSPATH}\" --driver-java-options \"${JAVA_INTP_OPTS}\" ${SPARK_SUBMIT_OPTIONS} ${SPARK_APP_JAR} ${PORT}` + INTERPRETER_RUN_COMMAND+=' '` echo ${SPARK_SUBMIT} --class ${ZEPPELIN_SERVER} --driver-class-path \"${ZEPPELIN_INTP_CLASSPATH_OVERRIDES}:${ZEPPELIN_INTP_CLASSPATH}\" --driver-java-options \"${JAVA_INTP_OPTS}\" ${SPARK_SUBMIT_OPTIONS} ${SPARK_APP_JAR} ${PORT}` fi else - INTERPRETER_RUN_COMMAND+=' '` echo ${ZEPPELIN_RUNNER} ${JAVA_INTP_OPTS} ${ZEPPELIN_INTP_MEM} -cp ${ZEPPELIN_INTP_CLASSPATH_OVERRIDES}:${CLASSPATH} ${ZEPPELIN_SERVER} ${PORT} ` + INTERPRETER_RUN_COMMAND+=' '` echo ${ZEPPELIN_RUNNER} ${JAVA_INTP_OPTS} ${ZEPPELIN_INTP_MEM} -cp ${ZEPPELIN_INTP_CLASSPATH_OVERRIDES}:${ZEPPELIN_INTP_CLASSPATH} ${ZEPPELIN_SERVER} ${PORT} ` fi if [[ ! -z "$ZEPPELIN_IMPERSONATE_USER" ]] && [[ -n "${suid}" || -z "${SPARK_SUBMIT}" ]]; then diff --git a/bin/zeppelin.sh b/bin/zeppelin.sh index 94711d9ce2e..44fc2cfe89a 100755 --- a/bin/zeppelin.sh +++ b/bin/zeppelin.sh @@ -71,7 +71,7 @@ addJarInDir "${ZEPPELIN_HOME}/zeppelin-zengine/target/lib" addJarInDir "${ZEPPELIN_HOME}/zeppelin-server/target/lib" addJarInDir "${ZEPPELIN_HOME}/zeppelin-web/target/lib" -CLASSPATH+=":${ZEPPELIN_CLASSPATH}" +ZEPPELIN_CLASSPATH="$CLASSPATH:$ZEPPELIN_CLASSPATH" if [[ ! -d "${ZEPPELIN_LOG_DIR}" ]]; then echo "Log dir doesn't exist, create ${ZEPPELIN_LOG_DIR}" @@ -83,4 +83,4 @@ if [[ ! -d "${ZEPPELIN_PID_DIR}" ]]; then $(mkdir -p "${ZEPPELIN_PID_DIR}") fi -exec $ZEPPELIN_RUNNER $JAVA_OPTS -cp $ZEPPELIN_CLASSPATH_OVERRIDES:$CLASSPATH $ZEPPELIN_SERVER "$@" +exec $ZEPPELIN_RUNNER $JAVA_OPTS -cp $ZEPPELIN_CLASSPATH_OVERRIDES:${ZEPPELIN_CLASSPATH} $ZEPPELIN_SERVER "$@" From e3b5738dd959a3fa7dc4d11073ef5e483377654d Mon Sep 17 00:00:00 2001 From: Christian Fries Date: Sun, 30 Apr 2017 21:44:12 +0200 Subject: [PATCH 2/2] Added graceful exception handling if posix permission is not available On Windows system the Files.setPosixFilePermissions will (currently) fail. For the case that the operation is not supported we just continue (keep finger crossed) (on windows the file apparently has the right permissions). --- .../zeppelin/interpreter/InterpreterSettingManager.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSettingManager.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSettingManager.java index bebbf353e2a..600a1c275c7 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSettingManager.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSettingManager.java @@ -236,8 +236,13 @@ public void saveToFile() throws IOException { if (!Files.exists(interpreterBindingPath)) { Files.createFile(interpreterBindingPath); - Set permissions = EnumSet.of(OWNER_READ, OWNER_WRITE); - Files.setPosixFilePermissions(interpreterBindingPath, permissions); + try { + Set permissions = EnumSet.of(OWNER_READ, OWNER_WRITE); + Files.setPosixFilePermissions(interpreterBindingPath, permissions); + } catch (UnsupportedOperationException e) { + // File system does not support Posix file permissions (likely windows) - continue anyway. + logger.warn("unable to setPosixFilePermissions on '{}'.", interpreterBindingPath); + }; } FileOutputStream fos = new FileOutputStream(interpreterBindingPath.toFile(), false);