在Dataproc主服务器上创建的/ datalab / notebooks目录在哪里?

问题描述 投票:2回答:2

一旦达到目的,我就会在短命的星团中旋转并摧毁它们。但是,我想保留在/ datalab / notebooks目录中创建的笔记本,然后在创建新集群时将它们复制到同一目录,以便在先前集群上创建的所有笔记本都可用。

我可以在关闭之前将笔记本复制到GCS存储桶,但是在创建新集群后无法将它们从GCS复制回/ datalab / network,因为在我的启动脚本运行时或之后创建了目录/ datalab / notebooks初始化脚本datalab.sh已完成。

这个目录在哪里创建或如何以某种方式将笔记本从我的GCS存储桶复制到/ datalab / notebooks?

关键是,当发生此副本时,/ datalab / notebooks需要可用。

Update

我的群集创建失败,出现以下错误。

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.

Code

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
google-cloud-dataproc google-cloud-datalab
2个回答
1
投票

我假设您正在尝试将复制作为初始化操作的一部分。如果不是这种情况,请告诉我们您如何运行命令,因为这将影响它们的运行方式。

在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复制到该位置。


1
投票

如果您使用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
© www.soinside.com 2019 - 2024. All rights reserved.