Skip to content

Commit 9e9e86e

Browse files
make hadoop related options configurable in yarn_jobrunner.py eu-cdse/openeo-cdse-infra#635
Initially the values were Terrascope specific, now they can be configured via the GpsBackendConfig.
1 parent 4225d84 commit 9e9e86e

File tree

3 files changed

+50
-5
lines changed

3 files changed

+50
-5
lines changed

openeogeotrellis/config/config.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,10 @@ class GpsBackendConfig(OpenEoBackendConfig):
275275
"/tmp_epod:/tmp_epod:rw,"
276276
)
277277
batch_user_docker_mounts: dict[str, List[str]] = {}
278+
batch_spark_eventlog_dir: str = ""
279+
batch_spark_history_fs_logdirectory: str = ""
280+
batch_spark_yarn_historyserver_address: str = ""
281+
batch_yarn_container_runtime_docker_client_config: str = ""
278282
gdalinfo_from_file: bool = True
279283
gdalinfo_python_call: bool = False
280284
gdalinfo_use_subprocess: bool = False

openeogeotrellis/deploy/submit_batch_job_spark3.sh

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ docker_mounts=${34-"/var/lib/sss/pubconf/krb5.include.d:/var/lib/sss/pubconf/krb
5959
udf_python_dependencies_archive_path=${35}
6060
propagatable_web_app_driver_envars=${36}
6161
python_max_memory=${37-"-1"}
62+
spark_eventlog_dir=${38}
63+
spark_history_fs_logdirectory=${39}
64+
spark_yarn_historyserver_address=${40}
65+
yarn_container_runtime_docker_client_config=${41}
6266

6367

6468
pysparkPython="/opt/venv/bin/python"
@@ -131,6 +135,13 @@ batch_job_driver_envar_arguments()
131135
echo "${arguments}"
132136
}
133137

138+
docker_client_config_args()
139+
{
140+
if [ -n "${yarn_container_runtime_docker_client_config}" ]; then
141+
echo "--conf spark.yarn.appMasterEnv.YARN_CONTAINER_RUNTIME_DOCKER_CLIENT_CONFIG=${yarn_container_runtime_docker_client_config} --conf spark.executorEnv.YARN_CONTAINER_RUNTIME_DOCKER_CLIENT_CONFIG=${yarn_container_runtime_docker_client_config}"
142+
fi
143+
}
144+
134145
spark-submit \
135146
--master yarn --deploy-mode cluster \
136147
${run_as} \
@@ -175,6 +186,7 @@ spark-submit \
175186
--conf spark.yarn.appMasterEnv.OPENEO_EJR_BACKEND_ID=${ejr_backend_id} \
176187
--conf spark.yarn.appMasterEnv.OPENEO_EJR_OIDC_CLIENT_CREDENTIALS=${ejr_oidc_client_credentials} \
177188
$(batch_job_driver_envar_arguments) \
189+
$(docker_client_config_args) \
178190
--conf spark.executorEnv.AWS_REGION=${AWS_REGION} --conf spark.yarn.appMasterEnv.AWS_REGION=${AWS_REGION} \
179191
--conf spark.executorEnv.AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} --conf spark.yarn.appMasterEnv.AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} \
180192
--conf spark.executorEnv.AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} --conf spark.yarn.appMasterEnv.AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} \
@@ -201,14 +213,14 @@ spark-submit \
201213
--conf spark.hadoop.yarn.client.failover-proxy-provider=org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider \
202214
--conf spark.shuffle.service.name=spark_shuffle_320 --conf spark.shuffle.service.port=7557 \
203215
--conf spark.eventLog.enabled=true \
204-
--conf spark.eventLog.dir=hdfs:///spark2-history/ \
205-
--conf spark.history.fs.logDirectory=hdfs:///spark2-history/ \
216+
--conf spark.eventLog.dir=${spark_eventlog_dir} \
217+
--conf spark.history.fs.logDirectory=${spark_history_fs_logdirectory} \
206218
--conf spark.history.kerberos.enabled=true \
207219
--conf spark.history.kerberos.keytab=/etc/security/keytabs/spark.service.keytab \
208220
--conf spark.history.kerberos.principal=spark/_HOST@VGT.VITO.BE \
209221
--conf spark.history.provider=org.apache.spark.deploy.history.FsHistoryProvider \
210222
--conf spark.history.store.path=/var/lib/spark2/shs_db \
211-
--conf spark.yarn.historyServer.address=epod-ha.vgt.vito.be:18481 \
223+
--conf spark.yarn.historyServer.address=${spark_yarn_historyserver_address} \
212224
--conf spark.archives=${archives} \
213225
--conf spark.extraListeners=org.openeo.sparklisteners.LogErrorSparkListener,org.openeo.sparklisteners.BatchJobProgressListener \
214226
--conf spark.sql.adaptive.coalescePartitions.parallelismFirst=false \

openeogeotrellis/integrations/yarn_jobrunner.py

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,18 @@ class BatchJobSubmitArgs:
207207
Passed to `--conf spark.executor.pyspark.memory={python_max_memory}b`.
208208
See https://spark.apache.org/docs/latest/configuration.html
209209
"""
210+
211+
spark_eventlog_dir: str
212+
"""Directory for Spark event logs"""
213+
214+
spark_history_fs_logdirectory: str
215+
"""Directory for Spark history server logs"""
216+
217+
spark_yarn_historyserver_address: str
218+
"""Address of Spark history server"""
219+
220+
yarn_container_runtime_docker_client_config: str
221+
"""Path to Docker client configuration for YARN containers (optional)"""
210222

211223
def to_args_list(self) -> list[str]:
212224
"""Convert the dataclass to a list of string arguments for subprocess."""
@@ -249,6 +261,10 @@ def to_args_list(self) -> list[str]:
249261
self.udf_python_dependencies_archive_path,
250262
self.propagatable_web_app_driver_envars,
251263
self.python_max_memory,
264+
self.spark_eventlog_dir,
265+
self.spark_history_fs_logdirectory,
266+
self.spark_yarn_historyserver_address,
267+
self.yarn_container_runtime_docker_client_config,
252268
]
253269

254270

@@ -438,6 +454,15 @@ def as_boolean_arg(job_option_key: str, default_value: str) -> str:
438454
principal_value = "no_principal"
439455
keytab_value = "no_keytab"
440456

457+
backend_config = get_backend_config()
458+
459+
if not backend_config.batch_spark_eventlog_dir:
460+
raise InternalException("batch_spark_eventlog_dir must be configured in backend config")
461+
if not backend_config.batch_spark_history_fs_logdirectory:
462+
raise InternalException("batch_spark_history_fs_logdirectory must be configured in backend config")
463+
if not backend_config.batch_spark_yarn_historyserver_address:
464+
raise InternalException("batch_spark_yarn_historyserver_address must be configured in backend config")
465+
441466
# Create structured arguments using dataclass
442467
submit_args = BatchJobSubmitArgs(
443468
script_location=script_location,
@@ -471,13 +496,17 @@ def as_boolean_arg(job_option_key: str, default_value: str) -> str:
471496
log_level=options.log_level,
472497
openeo_backend_config=os.environ.get(ConfigGetter.OPENEO_BACKEND_CONFIG, ""),
473498
udf_python_dependencies_folder_path=str(job_work_dir / UDF_PYTHON_DEPENDENCIES_FOLDER_NAME),
474-
ejr_api=get_backend_config().ejr_api or "",
475-
ejr_backend_id=get_backend_config().ejr_backend_id,
499+
ejr_api=backend_config.ejr_api or "",
500+
ejr_backend_id=backend_config.ejr_backend_id,
476501
ejr_oidc_client_credentials=os.environ.get("OPENEO_EJR_OIDC_CLIENT_CREDENTIALS", ""),
477502
docker_mounts=docker_mounts,
478503
udf_python_dependencies_archive_path=str(job_work_dir / UDF_PYTHON_DEPENDENCIES_ARCHIVE_NAME),
479504
propagatable_web_app_driver_envars=os.environ.get("OPENEO_PROPAGATABLE_WEB_APP_DRIVER_ENVARS", ""),
480505
python_max_memory=str(byte_string_as(options.python_memory)) if options.python_memory else "-1",
506+
spark_eventlog_dir=backend_config.batch_spark_eventlog_dir,
507+
spark_history_fs_logdirectory=backend_config.batch_spark_history_fs_logdirectory,
508+
spark_yarn_historyserver_address=backend_config.batch_spark_yarn_historyserver_address,
509+
yarn_container_runtime_docker_client_config=backend_config.batch_yarn_container_runtime_docker_client_config,
481510
)
482511
args = submit_args.to_args_list()
483512

0 commit comments

Comments
 (0)