Skip to content

Commit 83aecdb

Browse files
author
jiayuhan-it
committed
Merge branch 'fix/exexute-as-user' into 'master'
support switch submitting user in azkaban See merge request xt_hadoop/hbox!34
2 parents 9e202c2 + 1d0b5ac commit 83aecdb

File tree

2 files changed

+36
-23
lines changed

2 files changed

+36
-23
lines changed

core/libexec/hbox-common-env.sh

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,9 @@ HBOX_CLASSPATH="$HBOX_CONF_DIR:$HBOX_HOME/lib/*:$(yarn classpath)"
5555
HBOX_CLIENT_OPTS=("-Xmx1024m")
5656

5757
__find_hbox_jar() {
58-
local jars=() pattern="${1:?usage __find_hbox_jar <find-name-pattern>}"
59-
readarray -t jars < <(find "$HBOX_HOME/" -maxdepth 1 -name "hbox-core-*.jar")
58+
local jars=() pattern="${1:?usage __find_hbox_jar <find-name-pattern>}" full_hbox_home
59+
full_hbox_home=$(cd -- "$HBOX_HOME" && pwd) || return 66
60+
readarray -t jars < <(cd / && find "$full_hbox_home/" -maxdepth 1 -name "hbox-core-*.jar")
6061
if ((${#jars[@]} == 0)); then
6162
echo "[ERROR] Failed to find $pattern in $HBOX_HOME/lib." >&2
6263
return 66
@@ -74,26 +75,35 @@ __find_hbox_jar() {
7475
fi
7576
}
7677

77-
# hadoop ugi info
78-
if [[ ${HADOOP_USER_NAME:-${USER:-$(id -un)}} == "$(id -un)" ]]; then
79-
# use login user as ugi
80-
if [[ ${USER-} != "${HADOOP_USER_NAME-${USER-}}" ]]; then
81-
echo "[WARN] env USER is overrided by env HADOOP_USER_NAME"
78+
# priority to select a submit user
79+
# * $HADOOP_USER_NAME
80+
# * $USER if $USER != $LOGNAME
81+
# * $(id -un)
82+
__select_submit_user() {
83+
local eu
84+
eu="$(id -un)"
85+
local logu="${LOGNAME:-${eu-}}"
86+
local u="${USER:-${logu-}}"
87+
if [[ ${u-} == "${logu-}" ]]; then
88+
local submit_as="${HADOOP_USER_NAME:-${eu-}}"
89+
else
90+
local submit_as="${HADOOP_USER_NAME:-${u:-${eu-}}}"
8291
fi
83-
unset HADOOP_USER_NAME
84-
USER=$(id -un)
85-
elif [[ ${HADOOP_USER_NAME:-} ]]; then
86-
# prefer HADOOP_USER_NAME
87-
if [[ ${USER-} != "$HADOOP_USER_NAME" ]] && [[ ${USER-} != "$(id -un)" ]]; then
88-
echo "[WARN] env USER is overrided by env HADOOP_USER_NAME"
92+
93+
if [[ ${submit_as-} == "${eu-}" ]]; then
94+
# submit as effective user
95+
unset HADOOP_USER_NAME
96+
USER="${eu-}"
97+
LOGNAME="${eu-}"
98+
else
99+
export HADOOP_USER_NAME="${submit_as-}"
100+
USER="${submit_as-}"
101+
HBOX_CLIENT_OPTS+=("-Duser.name=${submit_as-}" "-Dprocess.owner=${eu-}")
89102
fi
90-
USER="$HADOOP_USER_NAME"
91-
HBOX_CLIENT_OPTS+=("-Duser.name=$HADOOP_USER_NAME" "-Dprocess.owner=$(id -un)")
92-
else
93-
# prefer USER
94-
export HADOOP_USER_NAME="$USER"
95-
HBOX_CLIENT_OPTS+=("-Duser.name=$USER" "-Dprocess.owner=$(id -un)")
96-
fi
103+
}
104+
105+
# hadoop ugi info
106+
__select_submit_user
97107

98108
case "${1-}" in
99109
run-submit)
@@ -145,4 +155,4 @@ run-submit)
145155
run-history-server) __find_hbox_jar 'hbox-history-server-*.jar' || return $? ;;
146156
esac
147157

148-
unset __find_hbox_jar
158+
unset __find_hbox_jar __select_submit_user

core/src/main/java/net/qihoo/hbox/client/Client.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1220,6 +1220,11 @@ private boolean submitAndMonitor() throws IOException, YarnException {
12201220
}
12211221

12221222
final Span span = Span.current();
1223+
final String localUser = System.getProperty("process.owner", System.getProperty("user.name"));
1224+
final String hadoopUser = UserGroupInformation.getCurrentUser().getUserName();
1225+
if (!localUser.equals(hadoopUser)) {
1226+
LOG.info("Submit as user " + hadoopUser);
1227+
}
12231228

12241229
yarnClient.start();
12251230
LOG.info("Requesting a new application from cluster with "
@@ -1306,8 +1311,6 @@ private boolean submitAndMonitor() throws IOException, YarnException {
13061311

13071312
final String hboxHome = System.getenv("HBOX_HOME");
13081313
final String hboxConf = System.getenv("HBOX_CONF_DIR");
1309-
final String localUser = System.getProperty("process.owner", System.getProperty("user.name"));
1310-
final String hadoopUser = UserGroupInformation.getCurrentUser().getUserName();
13111314
final String withConfEnv =
13121315
null == hboxConf ? "" : String.format("HBOX_CONF_DIR=%s ", ShellEscapeUtils.escapePlain(hboxConf));
13131316
final String withUserEnv = localUser.equals(hadoopUser)

0 commit comments

Comments
 (0)