Skip to content

Commit 3798724

Browse files
committed
Add cluster support to v1
1 parent d257cae commit 3798724

File tree

16 files changed

+552
-46
lines changed

16 files changed

+552
-46
lines changed

benchmark/tpch/run_tpch.sh

Lines changed: 69 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ if [ "$#" -lt 1 ]; then
77
exit 1
88
fi
99

10+
LOCAL=NO
1011
DEBUG=NO
12+
DEBUG_EXECUTOR=NO
1113
WORKERS=1
1214
POSITIONAL=()
1315
while [[ $# -gt 0 ]]
@@ -24,6 +26,14 @@ case $key in
2426
DEBUG=YES
2527
shift # past argument
2628
;;
29+
-de|--debug-exec)
30+
DEBUG_EXECUTOR=YES
31+
shift # past argument
32+
;;
33+
-l|--local)
34+
LOCAL=YES
35+
shift # past argument
36+
;;
2737
*) # unknown option
2838
POSITIONAL+=("$1") # save it in an array for later
2939
shift # past argument
@@ -34,37 +44,85 @@ set -- "${POSITIONAL[@]}" # restore positional parameters
3444

3545
echo "DEBUG" = "${DEBUG}"
3646
echo "WORKERS" = "${WORKERS}"
47+
echo "LOCAL" = "${LOCAL}"
48+
TEST=NO
49+
#set_speed $WORKERS
50+
DOCKER=sparkmaster
51+
DOCKER=sparklauncher
52+
# --conf "spark.submit.pyFiles=/build/dike.zip" \
3753
if [ ${DEBUG} == "YES" ]; then
3854
echo "Debugging"
39-
docker exec -it sparkmaster spark-submit --master local \
55+
docker exec -it ${DOCKER} spark-submit --master local \
4056
--class main.scala.TpchQuery \
4157
--conf "spark.jars.ivy=/build/ivy" \
4258
--conf "spark.driver.maxResultSize=20g" \
4359
--conf "spark.driver.memory=2g" \
4460
--conf "spark.executor.memory=2g" \
45-
--conf "spark.driver.extraJavaOptions=-classpath /conf/:/build/spark-${SPARK_VERSION}/jars/*:/examples/scala/target/scala-2.12/ -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=172.18.0.3:5005" \
46-
--packages com.github.scopt:scopt_2.12:4.0.0-RC2,ch.cern.sparkmeasure:spark-measure_2.12:0.17 \
61+
--conf "spark.driver.extraJavaOptions=-classpath /conf/:/build/spark-${SPARK_VERSION}/jars/*: -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=10.124.48.63:5006" \
62+
--packages com.github.luben:zstd-jni:1.5.0-4,org.json:json:20210307,javax.json:javax.json-api:1.1.4,org.glassfish:javax.json:1.1.4,com.github.scopt:scopt_2.12:4.0.0-RC2,ch.cern.sparkmeasure:spark-measure_2.12:0.17 \
4763
--jars /build/downloads/spark-sql-macros_2.12.10_0.1.0-SNAPSHOT.jar,/dikeHDFS/client/ndp-hdfs/target/ndp-hdfs-1.0.jar,/build/extra_jars/*,/pushdown-datasource/target/scala-2.12/pushdown-datasource_2.12-0.1.0.jar,/build/downloads/h2-1.4.200.jar \
4864
/tpch/tpch-spark/target/scala-2.12/spark-tpc-h-queries_2.12-1.0.jar $@ --workers ${WORKERS}
4965
#--packages com.github.scopt:scopt_2.12:4.0.0-RC2,com.amazonaws:aws-java-sdk:1.11.853,org.apache.hadoop:hadoop-aws:3.2.0,org.apache.commons:commons-csv:1.8 \
5066
# --conf "spark.sql.parquet.enableVectorizedReader=false" \
51-
else
52-
docker exec -it sparkmaster spark-submit --master local[$WORKERS] \
67+
elif [ ${DEBUG_EXECUTOR} == "YES" ]; then
68+
echo "Debugging"
69+
docker exec -it ${DOCKER} spark-submit --master local \
70+
--class main.scala.TpchQuery \
71+
--conf "spark.jars.ivy=/build/ivy" \
72+
--conf "spark.driver.maxResultSize=20g" \
73+
--conf "spark.driver.memory=2g" \
74+
--conf "spark.executor.memory=2g" \
75+
--conf "spark.driver.extraJavaOptions=-classpath /conf/:/build/spark-${SPARK_VERSION}/jars/*:/examples/scala/target/scala-2.12/ -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=172.169.1.10:5005" \
76+
--packages com.github.luben:zstd-jni:1.5.0-4,org.json:json:20210307,javax.json:javax.json-api:1.1.4,org.glassfish:javax.json:1.1.4,com.github.scopt:scopt_2.12:4.0.0-RC2,ch.cern.sparkmeasure:spark-measure_2.12:0.17 \
77+
--jars /build/downloads/spark-sql-macros_2.12.10_0.1.0-SNAPSHOT.jar,/dikeHDFS/client/ndp-hdfs/target/ndp-hdfs-1.0.jar,/build/extra_jars/*,/pushdown-datasource/target/scala-2.12/pushdown-datasource_2.12-0.1.0.jar,/build/downloads/h2-1.4.200.jar \
78+
/tpch/tpch-spark/target/scala-2.12/spark-tpc-h-queries_2.12-1.0.jar $@ --workers ${WORKERS}
79+
elif [ ${LOCAL} == "YES" ]; then
80+
echo "Local with $WORKERS workers."
81+
docker exec -it ${DOCKER} spark-submit --master local[$WORKERS] \
5382
--conf "ivy.shared.default.root=/build/ivy_jars" \
54-
--conf "spark.driver.extraClassPath=/build/extra_jars/*" \
55-
--conf "spark.executor.extraClassPath=/build/extra_jars/*" \
5683
--conf "spark.jars.ivy=/build/ivy" \
5784
--conf "spark.driver.maxResultSize=20g" \
85+
--conf "spark.task.maxDirectResultSize=20g" \
5886
--conf "spark.sql.broadcastTimeout=10000000" \
59-
--conf "spark.driver.memory=32g" \
60-
--conf "spark.executor.memory=32g" \
87+
--conf "spark.driver.memory=2g" \
88+
--conf "spark.executor.memory=2g" \
89+
--conf "spark.dynamicAllocation.enabled=false" \
6190
--conf "spark.eventLog.enabled=true" \
6291
--conf "spark.eventLog.dir=/build/spark-events" \
6392
--conf "spark.driver.extraJavaOptions=-classpath /conf/:/build/spark-${SPARK_VERSION}/jars/*:/examples/scala/target/scala-2.12/" \
64-
--packages com.github.scopt:scopt_2.12:4.0.0-RC2,ch.cern.sparkmeasure:spark-measure_2.12:0.17 \
65-
--jars /build/downloads/spark-sql-macros_2.12.10_0.1.0-SNAPSHOT.jar,/dikeHDFS/client/ndp-hdfs/target/ndp-hdfs-1.0.jar,/build/extra_jars/*,/pushdown-datasource/target/scala-2.12/pushdown-datasource_2.12-0.1.0.jar,/build/downloads/h2-1.4.200.jar \
93+
--packages com.github.luben:zstd-jni:1.5.0-4,org.json:json:20210307,javax.json:javax.json-api:1.1.4,org.glassfish:javax.json:1.1.4,com.github.scopt:scopt_2.12:4.0.0-RC2,ch.cern.sparkmeasure:spark-measure_2.12:0.17 \
94+
--jars /dikeHDFS/client/ndp-hdfs/target/ndp-hdfs-1.0.jar,/pushdown-datasource/target/scala-2.12/pushdown-datasource_2.12-0.1.0.jar \
95+
/tpch/tpch-spark/target/scala-2.12/spark-tpc-h-queries_2.12-1.0.jar $@ --workers ${WORKERS}
96+
elif [ ${TEST} != "YES" ]; then
97+
#local[$WORKERS]
98+
#spark://172.18.0.2:7077
99+
# --conf "spark.executor.instances=1" \
100+
# --conf "spark.executor.cores=1" \
101+
HOST=sparkmaster
102+
HOST=172.169.1.40
103+
DRIVER_IP=172.169.1.40
104+
docker exec -it ${DOCKER} spark-submit --total-executor-cores $WORKERS \
105+
--master spark://$HOST:7077 \
106+
--conf "ivy.shared.default.root=/build/ivy_jars" \
107+
--conf "spark.jars.ivy=/build/ivy" \
108+
--conf "spark.driver.maxResultSize=20g" \
109+
--conf "spark.task.maxDirectResultSize=20g" \
110+
--conf "spark.sql.broadcastTimeout=10000000" \
111+
--conf "spark.driver.memory=2g" \
112+
--conf "spark.executor.memory=2g" \
113+
--conf "spark.dynamicAllocation.enabled=false" \
114+
--conf "spark.eventLog.enabled=true" \
115+
--conf "spark.eventLog.dir=/build/spark-events" \
116+
--conf "spark.hadoop.dfs.client.use.datanode.hostname=true" \
117+
--conf "spark.hadoop.dfs.namenode.rpc-address=172.169.1.60:9000" \
118+
--conf "spark.driver.host=${DRIVER_IP}" \
119+
--conf "spark.driver.bindAddress=${DRIVER_IP}" \
120+
--conf "spark.driver.extraJavaOptions=-classpath /conf/:/build/spark-${SPARK_VERSION}/jars/*:/examples/scala/target/scala-2.12/" \
121+
--packages com.github.luben:zstd-jni:1.5.0-4,org.json:json:20210307,javax.json:javax.json-api:1.1.4,org.glassfish:javax.json:1.1.4,com.github.scopt:scopt_2.12:4.0.0-RC2,ch.cern.sparkmeasure:spark-measure_2.12:0.17 \
122+
--jars /dikeHDFS/client/ndp-hdfs/target/ndp-hdfs-1.0.jar,/pushdown-datasource/target/scala-2.12/pushdown-datasource_2.12-0.1.0.jar \
66123
/tpch/tpch-spark/target/scala-2.12/spark-tpc-h-queries_2.12-1.0.jar $@ --workers ${WORKERS}
67124
fi
125+
# --jars /dikeHDFS/client/ndp-hdfs/target/ndp-hdfs-1.0.jar,/pushdown-datasource/target/scala-2.12/pushdown-datasource_2.12-0.1.0.jar \
68126

69127
#,org.dike.hdfs:ndp-hdfs:1.0 /dikeHDFS/client/ndp-hdfs/target/ndp-hdfs-1.0-jar-with-dependencies.jar,
70128
#--repositories file:/build/dike \

spark/bin/start-master.sh

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
11
#!/bin/bash
2-
bin/spark-class org.apache.spark.deploy.master.Master > /opt/volume/logs/master.log 2>&1 &
32

3+
4+
if [[ ! -z "${SPARK_MASTER_HOST}" ]]; then
5+
echo "master ip is: $SPARK_MASTER_HOST"
6+
./sbin/start-master.sh --ip $SPARK_MASTER_HOST --port 7077 > /opt/volume/logs/master.log 2>&1 &
7+
else
8+
bin/spark-class org.apache.spark.deploy.master.Master > /opt/volume/logs/master.log 2>&1 &
9+
fi
10+
# --properties-file /conf/spark-defaults.conf
411
echo "SPARK_MASTER_READY"
512
echo "SPARK_MASTER_READY" > /opt/volume/status/SPARK_MASTER_STATE
613

714
echo "RUNNING_MODE $RUNNING_MODE"
815

916
if [ "$RUNNING_MODE" = "daemon" ]; then
1017
sleep infinity
11-
fi
18+
fi

spark/bin/start-worker.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/bin/bash
2-
bin/spark-class org.apache.spark.deploy.worker.Worker spark://sparkmaster:7077 > /opt/volume/logs/worker.log 2>&1 &
3-
2+
./sbin/start-worker.sh spark://sparkmaster:7077 > /opt/volume/logs/worker.log 2>&1 &
3+
# --properties-file /conf/spark-defaults.conf
44
echo "SPARK_WORKER_READY"
55
echo "SPARK_WORKER_READY" > /opt/volume/status/SPARK_WORKER_STATE
66

spark/docker/Dockerfile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
# See the License for the specific language governing permissions and
1515
# limitations under the License.
1616

17-
FROM ubuntu:20.04 as builder_base
17+
FROM ubuntu:20.04 as v1_builder_base
1818
LABEL version="1.0"
1919
LABEL maintainer="Robert Foley <robfoley972@gmail.com>"
2020

@@ -82,13 +82,13 @@ WORKDIR $SPARK_HOME
8282
####
8383
#### Spark build docker stage.
8484
####
85-
FROM builder_base as builder
85+
FROM v1_builder_base as v1_builder
8686
LABEL version="1.0"
8787

8888
####
8989
#### Spark run docker stage.
9090
####
91-
FROM builder_base as run
91+
FROM v1_builder_base as v1_run
9292
LABEL version="1.0"
9393

9494
COPY entry.sh /usr/local/bin/entry.sh

spark/docker/build.sh

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
# limitations under the License.
1717

1818
ROOT_DIR=$(pwd)
19-
19+
source setup.sh
2020
DOCKER_DIR=${ROOT_DIR}
2121
DOCKER_FILE="${DOCKER_DIR}/Dockerfile"
2222

@@ -61,17 +61,17 @@ fi
6161
echo "User id is: $USER_ID"
6262
echo "Group id is: $GROUP_ID"
6363

64-
docker build -f Dockerfile --target builder -t spark_build .
65-
echo "Done building spark_build docker"
64+
docker build -f Dockerfile --target v${DIKE_VERSION}_builder -t v${DIKE_VERSION}_spark_build .
65+
echo "Done building v${DIKE_VERSION}_spark_build docker"
6666

67-
docker build -f Dockerfile -t spark_run .
68-
echo "Done building spark_run docker"
67+
docker build -f Dockerfile -t v${DIKE_VERSION}_spark_run .
68+
echo "Done building v${DIKE_VERSION}_spark_run docker"
6969

7070
# Set the home directory in the Docker container.
7171
DOCKER_HOME_DIR=${DOCKER_HOME_DIR:-/home/${USER_NAME}}
7272

73-
docker build -t "spark-build-${USER_NAME}" - <<UserSpecificDocker
74-
FROM spark_build
73+
docker build -t "v${DIKE_VERSION}-spark-build-${USER_NAME}" - <<UserSpecificDocker
74+
FROM v${DIKE_VERSION}_spark_build
7575
RUN rm -f /var/log/faillog /var/log/lastlog
7676
RUN groupadd --non-unique -g ${GROUP_ID} ${USER_NAME}
7777
RUN useradd -g ${GROUP_ID} -u ${USER_ID} -k /root -m ${USER_NAME} -d "${DOCKER_HOME_DIR}"
@@ -86,10 +86,10 @@ RUN chmod 0600 ~/.ssh/authorized_keys
8686
EXPOSE 22
8787
8888
UserSpecificDocker
89-
echo "Done building spark-build-${USER_NAME}"
89+
echo "Done building v${DIKE_VERSION}-spark-build-${USER_NAME}"
9090

91-
docker build -t "spark-run-${USER_NAME}" - <<UserSpecificDocker
92-
FROM spark_run
91+
docker build -t "v${DIKE_VERSION}-spark-run-${USER_NAME}" - <<UserSpecificDocker
92+
FROM v${DIKE_VERSION}_spark_run
9393
RUN rm -f /var/log/faillog /var/log/lastlog
9494
RUN groupadd --non-unique -g ${GROUP_ID} ${USER_NAME}
9595
RUN useradd -g ${GROUP_ID} -u ${USER_ID} -k /root -m ${USER_NAME} -d "${DOCKER_HOME_DIR}"
@@ -104,6 +104,6 @@ RUN chmod 0600 ~/.ssh/authorized_keys
104104
EXPOSE 22
105105
106106
UserSpecificDocker
107-
echo "Done building spark-run-${USER_NAME}"
107+
echo "Done building v${DIKE_VERSION}-spark-run-${USER_NAME}"
108108

109109
echo "Done building dockers"

spark/docker/setup.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1515
# See the License for the specific language governing permissions and
1616
# limitations under the License.
17-
17+
DIKE_VERSION=1
18+
echo "VERSION: ${DIKE_VERSION}"
1819
ROOT_DIR=$(pwd)
1920
DOCKER_DIR=docker
2021
DOCKER_FILE="${DOCKER_DIR}/Dockerfile"
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
#!/bin/bash
2+
3+
# Include the setup for our cached local directories. (.m2, .ivy2, etc)
4+
source docker/setup.sh
5+
6+
mkdir -p "${ROOT_DIR}/volume/logs"
7+
rm -f "${ROOT_DIR}/volume/logs/master*.log"
8+
9+
mkdir -p "${ROOT_DIR}/volume/status"
10+
rm -f "${ROOT_DIR}/volume/status/MASTER*"
11+
12+
CMD="sleep 365d"
13+
RUNNING_MODE="daemon"
14+
15+
DOCKER_HOSTS="$(cat spark.config | grep DOCKER_HOSTS)"
16+
IFS='=' read -a IP_ARRAY <<< "$DOCKER_HOSTS"
17+
DOCKER_HOSTS=${IP_ARRAY[1]}
18+
HOSTS=""
19+
IFS=',' read -a IP_ARRAY <<< "$DOCKER_HOSTS"
20+
for i in "${IP_ARRAY[@]}"
21+
do
22+
HOSTS="$HOSTS --add-host=$i"
23+
done
24+
DOCKER_HOSTS=$HOSTS
25+
echo "Docker Hosts: $DOCKER_HOSTS"
26+
27+
LAUNCHER_IP="$(cat spark.config | grep LAUNCHER_IP)"
28+
IFS='=' read -a IP_ARRAY <<< "$LAUNCHER_IP"
29+
LAUNCHER_IP=${IP_ARRAY[1]}
30+
echo "LAUNCHER_IP: $LAUNCHER_IP"
31+
32+
if [ $RUNNING_MODE = "interactive" ]; then
33+
DOCKER_IT="-i -t"
34+
fi
35+
# --cpuset-cpus="9-12" \
36+
DOCKER_RUN="docker run ${DOCKER_IT} --rm \
37+
-p 5006:5006 \
38+
--name sparklauncher \
39+
--network host ${DOCKER_HOSTS} \
40+
-e MASTER=spark://sparkmaster:7077 \
41+
-e SPARK_CONF_DIR=/conf \
42+
-e SPARK_PUBLIC_DNS=localhost \
43+
-e SPARK_MASTER="spark://sparkmaster:7077" \
44+
-e SPARK_DRIVER_HOST=${LAUNCHER_IP} \
45+
--mount type=bind,source=$(pwd)/spark,target=/spark \
46+
--mount type=bind,source=$(pwd)/build,target=/build \
47+
--mount type=bind,source=$(pwd)/examples,target=/examples \
48+
--mount type=bind,source=$(pwd)/../dikeHDFS,target=/dikeHDFS \
49+
--mount type=bind,source=$(pwd)/../benchmark/tpch,target=/tpch \
50+
--mount type=bind,source=$(pwd)/../data,target=/tpch-data \
51+
--mount type=bind,source=$(pwd)/../pushdown-datasource/pushdown-datasource,target=/pushdown-datasource \
52+
-v $(pwd)/conf/master:/conf \
53+
-v ${ROOT_DIR}/build/.m2:${DOCKER_HOME_DIR}/.m2 \
54+
-v ${ROOT_DIR}/build/.gnupg:${DOCKER_HOME_DIR}/.gnupg \
55+
-v ${ROOT_DIR}/build/.sbt:${DOCKER_HOME_DIR}/.sbt \
56+
-v ${ROOT_DIR}/build/.cache:${DOCKER_HOME_DIR}/.cache \
57+
-v ${ROOT_DIR}/build/.ivy2:${DOCKER_HOME_DIR}/.ivy2 \
58+
-v ${ROOT_DIR}/volume/status:/opt/volume/status \
59+
-v ${ROOT_DIR}/volume/logs:/opt/volume/logs \
60+
-v ${ROOT_DIR}/bin/:${DOCKER_HOME_DIR}/bin \
61+
-e RUNNING_MODE=${RUNNING_MODE} \
62+
-u ${USER_ID} \
63+
v${DIKE_VERSION}-spark-run-${USER_NAME} ${CMD}"
64+
65+
if [ $RUNNING_MODE = "interactive" ]; then
66+
eval "${DOCKER_RUN}"
67+
else
68+
eval "${DOCKER_RUN}" &
69+
while [ ! -f "${ROOT_DIR}/volume/status/SPARK_MASTER_STATE" ]; do
70+
sleep 1
71+
done
72+
73+
cat "${ROOT_DIR}/volume/status/SPARK_MASTER_STATE"
74+
fi

0 commit comments

Comments
 (0)