@@ -41,21 +41,6 @@ if [ -z "${WAYANG_HOME}" ]; then
4141 export WAYANG_HOME=$( get_realpath ${BASH_SOURCE[0]} )
4242fi
4343
44- if [ -z " ${SPARK_HOME} " ]; then
45- echo " The variable SPARK_HOME it needs to be setup" >&2
46- exit 1
47- fi
48-
49- # if [ -z "${FLINK_HOME}" ]; then
50- # echo "The variable FLINK_HOME it needs to be setup" >&2
51- # exit 1
52- # fi
53-
54- if [ -z " ${HADOOP_HOME} " ]; then
55- echo " The variable HADOOP_HOME it needs to be setup" >&2
56- exit 1
57- fi
58-
5944# Find the java binary
6045if [ -n " ${JAVA_HOME} " ]; then
6146 RUNNER=" ${JAVA_HOME} /bin/java"
6853 fi
6954fi
7055
71- # Find Spark jars.
72- if [ -d " ${SPARK_HOME} " ]; then
73- SPARK_JARS_DIR=" ${SPARK_HOME} /jars"
74- fi
56+ WAYANG_CODE=" ${WAYANG_HOME} /jars"
7557
76- # Find Hadoop jars.
77- if [ -d " ${HADOOP_HOME} " ]; then
78- HADOOP_JARS_DIR=" ${HADOOP_HOME} /share/hadoop/common/*:${HADOOP_HOME} /share/hadoop/common/lib/*"
79- fi
58+ WAYANG_LIBS=" ${WAYANG_HOME} /libs"
8059
81- if [ " $( ls ${SPARK_JARS_DIR} | grep ^hadoop | wc -l ) " == " 0 " ] ; then
60+ WAYANG_CONF= " ${WAYANG_HOME} /conf "
8261
83- HADOOP_JARS_DIR=" ${HADOOP_JARS_DIR} :${HADOOP_HOME} /share/hadoop/mapreduce/$( ls ${HADOOP_HOME} /share/hadoop/mapreduce | grep ^hadoop-mapreduce-client-common | grep -v tests | head -n 1) "
84- HADOOP_JARS_DIR=" ${HADOOP_JARS_DIR} :${HADOOP_HOME} /share/hadoop/mapreduce/$( ls ${HADOOP_HOME} /share/hadoop/mapreduce | grep ^hadoop-mapreduce-client-core | grep -v tests | head -n 1) "
85- HADOOP_JARS_DIR=" ${HADOOP_JARS_DIR} :${HADOOP_HOME} /share/hadoop/mapreduce/$( ls ${HADOOP_HOME} /share/hadoop/mapreduce | grep ^hadoop-mapreduce-client-jobclient | grep -v tests | head -n 1) "
86- HADOOP_JARS_DIR=" ${HADOOP_JARS_DIR} :${HADOOP_HOME} /share/hadoop/hdfs/$( ls ${HADOOP_HOME} /share/hadoop/hdfs | grep ^hadoop-hdfs-client | grep -v tests | head -n 1) "
87- HADOOP_JARS_DIR=" ${HADOOP_JARS_DIR} :${HADOOP_HOME} /share/hadoop/hdfs/lib/$( ls ${HADOOP_HOME} /share/hadoop/hdfs/lib | grep ^hadoop-annotations | grep -v tests | head -n 1) "
88- HADOOP_JARS_DIR=" ${HADOOP_JARS_DIR} :${HADOOP_HOME} /share/hadoop/hdfs/lib/$( ls ${HADOOP_HOME} /share/hadoop/hdfs/lib | grep ^hadoop-auth | grep -v tests | head -n 1) "
62+ # Bootstrap the classpath.
63+ WAYANG_CLASSPATH=" ${WAYANG_CONF} /*:${WAYANG_CODE} /*:${WAYANG_LIBS} /*"
8964
90- fi
65+ append_classpath () {
66+ if [ -n " $1 " ]; then
67+ WAYANG_CLASSPATH=" ${WAYANG_CLASSPATH} :$1 "
68+ fi
69+ }
9170
71+ append_first_matching_jar () {
72+ local dir=" $1 "
73+ local pattern=" $2 "
74+ local jar
9275
93- WAYANG_CODE=" ${WAYANG_HOME} /jars"
76+ if [ -d " ${dir} " ]; then
77+ jar=$( find " ${dir} " -maxdepth 1 -name " ${pattern} " ! -name " *tests*" | head -n 1)
78+ append_classpath " ${jar} "
79+ fi
80+ }
9481
95- WAYANG_LIBS=" ${WAYANG_HOME} /libs"
82+ if [ -n " ${SPARK_HOME} " ]; then
83+ if [ ! -d " ${SPARK_HOME} /jars" ]; then
84+ echo " SPARK_HOME is set but ${SPARK_HOME} /jars does not exist" >&2
85+ exit 1
86+ fi
87+ append_classpath " ${SPARK_HOME} /jars/*"
88+ fi
9689
97- WAYANG_CONF=" ${WAYANG_HOME} /conf"
90+ if [ -n " ${HADOOP_HOME} " ]; then
91+ if [ ! -d " ${HADOOP_HOME} /share/hadoop/common" ]; then
92+ echo " HADOOP_HOME is set but ${HADOOP_HOME} /share/hadoop/common does not exist" >&2
93+ exit 1
94+ fi
95+ append_classpath " ${HADOOP_HOME} /share/hadoop/common/*"
96+ append_classpath " ${HADOOP_HOME} /share/hadoop/common/lib/*"
97+ append_first_matching_jar " ${HADOOP_HOME} /share/hadoop/mapreduce" " hadoop-mapreduce-client-common*.jar"
98+ append_first_matching_jar " ${HADOOP_HOME} /share/hadoop/mapreduce" " hadoop-mapreduce-client-core*.jar"
99+ append_first_matching_jar " ${HADOOP_HOME} /share/hadoop/mapreduce" " hadoop-mapreduce-client-jobclient*.jar"
100+ append_first_matching_jar " ${HADOOP_HOME} /share/hadoop/hdfs" " hadoop-hdfs-client*.jar"
101+ append_first_matching_jar " ${HADOOP_HOME} /share/hadoop/hdfs/lib" " hadoop-annotations*.jar"
102+ append_first_matching_jar " ${HADOOP_HOME} /share/hadoop/hdfs/lib" " hadoop-auth*.jar"
103+ fi
98104
99- # Bootstrap the classpath.
100- WAYANG_CLASSPATH=" ${WAYANG_CONF} /*:${WAYANG_CODE} /*:${WAYANG_LIBS} /*"
101- WAYANG_CLASSPATH=" ${WAYANG_CLASSPATH} :${SPARK_JARS_DIR} /*:${HADOOP_JARS_DIR} "
105+ if [ -n " ${FLINK_HOME} " ]; then
106+ if [ ! -d " ${FLINK_HOME} /lib" ]; then
107+ echo " FLINK_HOME is set but ${FLINK_HOME} /lib does not exist" >&2
108+ exit 1
109+ fi
110+ append_classpath " ${FLINK_HOME} /lib/*"
111+ fi
112+
113+ append_classpath " ${WAYANG_EXTRA_CLASSPATH} "
102114
103- FLAGS=" "
115+ FLAGS=()
104116if [ " ${FLAG_LOG} " = " true" ]; then
105- FLAGS= " ${FLAGS} -Dlog4j.configuration=file://${WAYANG_CONF} /log4j.properties"
117+ FLAGS+=( " -Dlog4j.configuration=file://${WAYANG_CONF} /log4j.properties" )
106118fi
107119
108120if [ " ${FLAG_WAYANG} " = " true" ]; then
109- FLAGS= " ${FLAGS} -Dwayang.configuration=file://${WAYANG_CONF} /wayang.properties"
121+ FLAGS+=( " -Dwayang.configuration=file://${WAYANG_CONF} /wayang.properties" )
110122fi
111123
112124if [ -n " ${OTHER_FLAGS} " ]; then
113- FLAGS=" ${FLAGS} ${OTHER_FLAGS} "
125+ read -r -a OTHER_FLAGS_ARRAY <<< " ${OTHER_FLAGS}"
126+ FLAGS+=(" ${OTHER_FLAGS_ARRAY[@]} " )
114127fi
115128
116- # Wrap args in quotes to be able to execute args with parenthesis, spaces, etc
117- ARGS=" "
118- for arg in $( echo ${@: 2} )
119- do
120- ARGS=" $ARGS \" ${arg} \" "
121- done
122-
123- eval " $RUNNER $FLAGS -cp " ${WAYANG_CLASSPATH} " $CLASS ${ARGS} "
124-
129+ exec " $RUNNER " " ${FLAGS[@]} " -cp " ${WAYANG_CLASSPATH} " " $CLASS " " ${@: 2} "
0 commit comments