Skip to main content

在 Colab 上通过 Google CloudSQL 和 GCS 使用 JuiceFS

Colaboratory, 或者简称 “Colab”, 是 Google Research 的产品,它允许任何人通过浏览器编写和执行 python 代码,特别适合机器学习、数据分析和教育。 Colab 支持从 Google Drive 将文件上传到 Colab 实例或从 Colab 实例下载文件。然而在某些情况下,Google Drive 可能不太方便与 Colab 一起使用,在这种情况下,JuiceFS 是一个很有用的工具,因为他允许在 Colab 实例之间,或在 Colab 实例与本地或本地机器之间轻松的同步文件。这里是一个使用了 juicefs 的 Colab 笔记本示例

说明下在 Colab 环境中使用 juicefs 的必要步骤。我们使用 Google CloudSQL 作为 JuiceFS 的元数据引擎,使用 Google Cloud Storage (GCS) 作为 JuiceFS 的对象存储。其他类型的元数据引擎与对象存储可以参考 如何设置元数据引擎如何设置对象存储

下面将要提到的很多步骤你可以也参考 快速上手指南

步骤:

  1. 在任何一个可以访问 Google Cloud 资源的机器或者实例上格式化一个 JuiceFS 文件系统
  2. 挂载 JuiceFS 文件系统到 Colab Notebook 上
  3. 愉快的跨平台跨机器分享存储的文件

先决条件

在这个示例中,我们使用了 Google Cloud 平台的 CloudSQL 和 Google Cloud Storage (GCS) 来创建一个高性能的 JuiceFS 文件系统。因此它需要你有一个 Google Cloud 平台的账户才能按照文档操作下去。 或者如果你有其他云平台的资源( 比如 AWS 的 RDBS 和 S3 ),您也可以根据本指南和其他参考文档,以实现类似的解决方案。

您可能还希望 Colab 实例位于同一区域或靠近部署 CloudSQL 和 GCS 的区域使JuiceFS达到最佳性能。该教程适用于随机托管的 Colab 实例,所以您或许注意到了由于 Colab 实例和 CloudSQL/GCS 区域之间的延迟而导致 JuiceFS 性能缓慢。如果想要实例在特定地区去启动 Colab,可以参考通过 GCP Marketplace 在 Colab 上启动 GCE 虚拟机

按照本指南操作前,您需要准备好以下资源:

  • 谷歌云平台账户需要准备就绪,还要创建了一个 project 。就这个示例而言,我们将创建 juicefs-learning GCP项目作为演示项目
  • 准备使用的 CloudSQL(Postgres)。在本演示中使用实例 juicefs-learning:europe-west1:juicefs-sql-example-1 作为元数据服务
  • 创建的 GCS 桶作为对象存储服务。在这个演示中,我们将使用gs://juicefs-bucket-example-1作为存储文件的桶。
  • 对 Postgres 服务器和 GCS 存储桶具有写入访问权限的服务账户或授权用户帐户

详细步骤

步骤 1 - 创建并挂载一个 JuiceFS 文件系统

这个步骤只需要操作一次,你可以在任何可以访问你的 Google Cloud 资源的机器或者实例上执行。 在这里例子中,我将在我的本地机器上操作,首先你可以使用 gcloud auth application-default login 获取本地的凭证,或者使用 GOOGLE_APPLICATION_CREDENTIALS 设置 JSON 凭证文件。 然后你可以使用 cloud sql 代理功能 将你的 Postgres 云服务暴露在你本地机器上的一个端口上(这里是 5432)。

gcloud auth application-default login

# 或者设置 JSON 凭证文件 GOOGLE_APPLICATION_CREDENTIALS=/path/to/key

cloud_sql_proxy -instances=juicefs-learning:europe-west1:juicefs-sql-example-1=tcp:0.0.0.0:5432

然后使用 juicefs format 命令创建一个名为 “myvolume” 的新文件系统。 之后将此文件系统挂载到您可以访问云资源的任何其他机器/实例中。 你可以在这里下载 JuiceFS。

juicefs format \
--storage gs \
--bucket gs://juicefs-bucket-example-1 \
"postgres://postgres:mushroom1@localhost:5432/juicefs?sslmode=disable" \
myvolume

再次提醒:这个步骤只需要被执行一次。

步骤 2 - 挂载 JuiceFS 到 Colab

完成上述步骤1后,这意味着您已经有一个JuiceFS文件系统(此案例中为“myvolume”)并准备就绪可以使用了。 因此,在这里,我们打开一个 Colab 页面并运行这些命令,将我们的文件系统挂载到一个名为 “mnt” 的文件夹中。 首先我们下载 JuiceFS 二进制然后按照步骤一操作获取 GCP 的凭证和打开 cloud sql 代理。 请注意,以下命令在 Colab 环境中运行,一个 ! 在开头意味着开始运行 shell 命令。

  1. 下载 JuiceFS到 Colab 实例上
! curl -L -o juicefs.tar.gz https://github.com/juicedata/juicefs/releases/download/v1.0.0-beta2/juicefs-1.0.0-beta2-linux-amd64.tar.gz 
! tar -xf juicefs.tar.gz
  1. 设置 Google Cloud 凭证
! gcloud auth application-default login
  1. 打开 cloud_sql 代理
! wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
! chmod +x cloud_sql_proxy
! GOOGLE_APPLICATION_CREDENTIALS=/content/.config/application_default_credentials.json nohup ./cloud_sql_proxy -instances=juicefs-learning:europe-west1:juicefs-sql-example-1=tcp:0.0.0.0:5432 >> cloud_sql_proxy.log &
  1. 挂载 JuiceFS filesystem myvolumnmnt 目录上。
! GOOGLE_APPLICATION_CREDENTIALS=/content/.config/application_default_credentials.json nohup ./juicefs mount  "postgres://postgres:mushroom1@localhost:5432/juicefs?sslmode=disable" mnt > juicefs.log &

现在你应该可以像使用本地文件系统一样使用 mnt 目录了。

步骤 3 - 在任意时间从其他实例加载数据

现在,由于您在 JuiceFS 文件系统中的第2步中存储了数据,因此您可以随时在任何其他机器中重复第2步中提到的所有操作,以便再次访问之前存储的数据或存储更多数据。

恭喜!现在您已经学会了如何使用 JuiceFS,特别是如何将其与 Google Colab 一起以分布式的方式共享和存储数据文件。 一个使用了 juicefs 的 Colab 笔记本示例

愉快的编码吧 :)