一旦达到目的,我就会在短命的星团中旋转并摧毁它们。但是,我想保留在/ 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
我假设您正在尝试将复制作为初始化操作的一部分。如果不是这种情况,请告诉我们您如何运行命令,因为这将影响它们的运行方式。
在Datalab的docker容器内,“/ datalab”目录是短暂的。对于您想要持久化的内容,您应该使用“/ content / datalab”目录。但是,您需要特别注意:
对于init操作,Datalab容器内的“/ content / datalab”目录映射到VM中的“/ root / datalab”目录(这是定义的here)。
因此,要将笔记本从GCS复制到“/ content / datalab / notebooks”目录,请尝试制作“/ root / datalab / notebooks”目录(例如“mkdir -p $ {HOME} / datalab / notebooks”,假设您运行在init动作中设置),然后将笔记本从GCS复制到该位置。
如果您使用init操作而不是从GCE启动脚本运行copy-from-GCS命令,那么您可以控制运行的init操作的顺序,因此您可以在datalab init之后简单地放置copy-from-gcs init操作行动:
--initialization-actions gs://dataproc-initialization-actions/datalab/datalab.sh,gs://your-bucket/copy-notebooks-from-gcs.sh
或者,如果该目录的创建是异步的,则可以添加一个初始化操作或启动脚本,该脚本会在目录可用之前休眠;假设您正在使用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