Где находится каталог / datalab / notebooks, созданный на главном сервере Dataproc? - PullRequest
2 голосов
/ 30 апреля 2019

Я раскручиваю недолговечные скопления и уничтожаю их, как только цель достигнута. Однако я хотел бы сохранить свои записные книжки, созданные в каталоге / datalab / notebooks, а затем скопировать их в тот же каталог при создании нового кластера, чтобы были доступны все записные книжки, созданные в предыдущем кластере.

Я могу скопировать записные книжки в корзину GCS перед выключением, но не могу скопировать их обратно из GCS в / datalab / network после создания нового кластера, так как каталог / datalab / notebooks создается при запуске сценария запуска запускается или после завершения сценария инициализации datalab.sh.

Где создается этот каталог или как я могу как-то скопировать записные книжки из моей корзины GCS в / datalab / notebooks?

Ключ в том, что / datalab / notebooks должен быть доступен, когда эта копия имеет место.

Обновление

Не удалось создать кластер с приведенной ниже ошибкой.

gsutil cp 'gs://dataproc-datalab-srinid/notebooks/*' /datalab/notebooks/
CommandException: Destination URL must name a directory, bucket, or bucket
subdirectory for the multiple source form of the cp command.

Однако, когда я вхожу в мастер и просматриваю журнал dataproc-initialization-script-2.log, копирование прошло успешно (см. Ниже).

+ '[' -d /datalab/notebooks ']'
+ echo 'Sleeping since /datalab/notebooks doesnt exist yet...'
Sleeping since /datalab/notebooks doesnt exist yet...
+ sleep 50
+ '[' -d /datalab/notebooks ']'
+ gsutil cp 'gs://dataproc-datalab-srinid/notebooks/*' /datalab/notebooks/
Copying gs://dataproc-datalab-srinid/notebooks/BABA_notebook.ipynb...
/ [0 files][    0.0 B/ 40.8 KiB]                                                ^M/ [1 files][ 40.8 KiB/ 40.8 KiB]                                                ^MCopying gs://dataproc-datalab-srinid/notebooks/Untitled Notebook.ipynb...
/ [1 files][ 40.8 KiB/ 67.7 KiB]                                                ^M/ [2 files][ 67.7 KiB/ 67.7 KiB]                                                ^MCopying gs://dataproc-datalab-srinid/notebooks/hello.ipynb...
/ [2 files][ 67.7 KiB/ 68.7 KiB]                                                ^M/ [3 files][ 68.7 KiB/ 68.7 KiB]                                                ^MCopying gs://dataproc-datalab-srinid/notebooks/test-Copy1.ipynb...
/ [3 files][ 68.7 KiB/ 69.7 KiB]                                                ^M/ [4 files][ 69.7 KiB/ 69.7 KiB]                                                ^M
==> NOTE: You are performing a sequence of gsutil operations that may
run significantly faster if you instead use gsutil -m cp ... Please
see the -m section under "gsutil help options" for further information
about when gsutil -m can be advantageous.

Copying gs://dataproc-datalab-srinid/notebooks/test.ipynb...
/ [4 files][ 69.7 KiB/ 70.7 KiB]                                                ^M-^M- [5 files][ 70.7 KiB/ 70.7 KiB]                                                ^M
Operation completed over 5 objects/70.7 KiB.

код

if [ -d '/datalab/notebooks' ]; then
     gsutil cp gs://${BUCKET}/notebooks/* /datalab/notebooks/
else
     echo 'Sleeping since /datalab/notebooks doesnt exist yet...'
     sleep 50
     if [ -d '/datalab/notebooks' ]; then
        gsutil cp gs://${BUCKET}/notebooks/* /datalab/notebooks/
     else
        echo "Even after 50secs, the directory is not found, waiting for another 30secs.."
        sleep 30
        gsutil cp gs://${BUCKET}/notebooks/* /datalab/notebooks/
     fi
fi

Ответы [ 2 ]

1 голос
/ 30 апреля 2019

Я предполагаю, что вы пытаетесь выполнить копирование как часть действия инициализации.Если это не так, то дайте нам знать, как вы выполняете команды, так как это повлияет на то, как они должны выполняться.

Внутри док-контейнера для Datalab каталог / datalab является эфемерным,Для вещей, которые вы хотите сохранить, вы должны использовать каталог "/ content / datalab".Тем не менее, есть некоторые особые меры предосторожности, которые вам необходимо сделать:

Для действия инициализации каталог "/ content / datalab" внутри контейнера Datalab отображается в каталог "/ root / datalab" на виртуальной машине.(это определено здесь ).

Итак, чтобы скопировать блокноты из GCS в каталог "/ content / datalab / notebooks", попробуйте создать каталог "/ root / datalab / notebooks"(например, «mkdir -p $ {HOME} / datalab / notebooks» при условии, что вы запустили установку в действии init), а затем скопируйте записные книжки из GCS в это место.

1 голос
/ 30 апреля 2019

Если вы выполняете команду copy-from-GCS, используя также действие init вместо сценария запуска GCE, тогда вы контролируете порядок выполнения действий init, поэтому вы можете просто поместить действие init-copy-from-gcs после действие инициализации datalab:

--initialization-actions gs://dataproc-initialization-actions/datalab/datalab.sh,gs://your-bucket/copy-notebooks-from-gcs.sh

В качестве альтернативы, если создание этого каталога асинхронное, вы можете добавить действие инициализации или сценарий запуска, который спит, пока каталог не станет доступен;при условии, что вы используете действие инициализации, и вы, вероятно, хотите, чтобы оно выполнялось только на главном узле:

#!/bin/bash

readonly ROLE="$(/usr/share/google/get_metadata_value attributes/dataproc-role)"

if [[ "${ROLE}" == 'Master' ]]; then
  if [ -d '/datalab/notebooks' ]; then
    gsutil cp ${GCS_NOTEBOOK_DIRECTORY] /datalab/notebooks
  else
    echo 'Sleeping since /datalab/notebooks doesnt exist yet...'
    sleep 5
  fi
fi
...