3

我在 1 个集群上使用 Dataproc 和 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 & disown -h

可能吗?当我在 Dataproc 上运行此程序时,未提交作业...

谢谢!

4

3 回答 3

2

考虑使用Dataproc Workflow,它是为多步骤的工作流设计的,创建集群,提交作业,删除集群。它比 init actions 好,因为它是 Dataproc 的一流功能,会有一个 Dataproc 作业资源,并且可以查看历史记录。

于 2021-09-06T15:53:19.823 回答
1

请考虑使用 Cloud Composer - 然后您可以编写一个脚本来创建集群、运行作业并终止集群。

于 2021-09-03T15:40:38.210 回答
1

我找到了一个方法。await_cluster_and_run_command.sh在 GCS 上放置一个名为的 shell 脚本。然后,将以下代码添加到初始化脚本中。

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 &>>/var/log/master-post-init.log &

参考:https ://github.com/GoogleCloudDataproc/initialization-actions/blob/master/post-init/master-post-init.sh

于 2021-09-05T09:40:08.597 回答