# #google-cloud-dataproc #dataproc
Вопрос:
Я использую Dataproc с 1 заданием на 1 кластере.
Я хотел бы приступить к своей работе, как только кластер будет создан. Я обнаружил, что лучший способ добиться этого-отправить задание с помощью сценария инициализации, как показано ниже.
function submit_job() {
echo "Submitting job..."
gcloud dataproc jobs submit pyspark ...
}
export -f submit_job
function check_running() {
echo "checking..."
gcloud dataproc clusters list --region='asia-northeast1' --filter='clusterName = {{ cluster_name }}' |
tail -n 1 |
while read name platform worker_count preemptive_worker_count status others
do
if [ "$status" = "RUNNING" ]; then
return 0
fi
done
}
export -f check_running
function after_initialization() {
local role
role=$(/usr/share/google/get_metadata_value attributes/dataproc-role)
if [[ "${role}" == 'Master' ]]; then
echo "monitoring the cluster..."
while true; do
if check_running; then
submit_job
break
fi
sleep 5
done
fi
}
export -f after_initialization
echo "start monitoring..."
bash -c after_initialization amp; disown -h
возможно ли это? Когда я запустил это в Dataproc, задание не было отправлено…
Спасибо!
Ответ №1:
Рассмотрите возможность использования рабочего процесса Dataproc, он предназначен для рабочих процессов, состоящих из нескольких этапов, создания кластера, отправки задания, удаления кластера. Это лучше, чем действия инициализации, потому что это первоклассная функция Dataproc, там будет ресурс задания Dataproc, и вы сможете просматривать историю.
Комментарии:
1. Спасибо вам за ваш совет! Как вы предлагаете, я счел, что лучше использовать рабочий процесс dataproc вместо действий инициализации.
Ответ №2:
Пожалуйста, подумайте об использовании cloud composer — тогда вы сможете написать один сценарий, который создает кластер, запускает задание и завершает кластер.
Комментарии:
1. Большое вам спасибо за ваш ответ, Дэвид. На самом деле, я не хочу использовать composer, так как он не является экономически эффективным.
Ответ №3:
Я нашел способ. Поместите сценарий оболочки с именем await_cluster_and_run_command.sh
в GCS. Затем добавьте следующие коды в сценарий инициализации.
gsutil cp gs://...../await_cluster_and_run_command.sh /usr/local/bin/
chmod 750 /usr/local/bin/await_cluster_and_run_command.sh
nohup /usr/local/bin/await_cluster_and_run_command.sh amp;>>/var/log/master-post-init.log amp;
Комментарии:
1. Рассматривали ли вы рабочий процесс Dataproc? cloud.google.com/dataproc/docs/concepts/workflows/overview
2. Спасибо вам за ваши комментарии. Я пропустил рабочий процесс Dataproc. Это кажется лучшим вариантом. Я попробую это сделать!