我正在纺短寿命的簇,并在达到目的后立即销毁它们。但是,我想保留在/ 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
答案 0 :(得分:1)
如果您还使用init动作而不是GCE启动脚本来运行copy-from-GCS命令,那么您可以控制init动作的运行顺序,因此只需将您的copy-from-gcs init动作< em>之后数据实验室初始化操作:
--initialization-actions gs://dataproc-initialization-actions/datalab/datalab.sh,gs://your-bucket/copy-notebooks-from-gcs.sh
或者,如果该目录的创建是异步的,则可以添加一个init操作或一个启动脚本,该脚本将一直休眠直到该目录可用为止;假设您正在使用init操作,并且您可能只希望它在主节点上运行:
#!/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
答案 1 :(得分:1)
我假设您尝试将复制作为初始化操作的一部分进行。如果不是这种情况,请告诉我们您如何运行这些命令,因为这将影响它们的运行方式。
在Datalab的Docker容器内部,“ / datalab”目录为临时目录。对于您要保留的内容,应该使用“ / content / datalab”目录。但是,您需要特别注意以下几点:
对于初始化操作,Datalab容器内部的“ / content / datalab”目录映射到VM中的“ / root / datalab”目录(已定义here)。
因此,要将笔记本从GCS复制到“ / content / datalab / notebooks”目录,请尝试建立“ / root / datalab / notebooks”目录(例如,假设“ mkdir -p $ {HOME} / datalab / notebooks”您可以通过init操作运行安装程序),然后将笔记本从GCS复制到该位置。