外部依赖与输出
有时你需要直接从本地项目之外的源位置流式传输数据依赖,或将数据输出直接流式传输到某个外部位置,例如云存储或 HDFS。
若要在没有流水线的情况下对 外部数据进行版本管理,请参阅导入外部数据。
外部依赖的工作原理
外部依赖将由 DVC 进行跟踪,并在它们发生变化时被检测到(例如,在执行 dvc repro
时触发阶段执行)。
要将外部位置的文件或目录定义为阶段依赖,请在 dvc.yaml
的 deps
字段中指定其远程 URL 或外部路径。使用的格式应与以下支持的 dvc remote
类型/协议的 url
相同:
- Amazon S3
- Microsoft Azure Blob 存储
- Google Cloud Storage
- SSH
- HDFS
- HTTP
- 工作区外的本地文件和目录
示例
让我们来看一个例子,定义并运行一个名为 download_file
的阶段,该阶段仅从外部位置下载一个文件,涵盖所有支持的位置类型。
有关使用需要手动身份验证设置的远程位置的信息,请参见远程别名示例。
$ dvc stage add -n download_file \
-d s3://mybucket/data.txt \
-o data.txt \
aws s3 cp s3://mybucket/data.txt data.txt
$ dvc stage add -n download_file \
-d azure://mycontainer/data.txt \
-o data.txt \
az storage copy \
-d data.json \
--source-account-name my-account \
--source-container mycontainer \
--source-blob data.txt
$ dvc stage add -n download_file \
-d gs://mybucket/data.txt \
-o data.txt \
gsutil cp gs://mybucket/data.txt data.txt
$ dvc stage add -n download_file \
-d ssh://user@example.com/path/to/data.txt \
-o data.txt \
scp user@example.com:/path/to/data.txt data.txt
DVC 需要同时支持 SSH 和 SFTP 访问才能使用 SSH 远程存储。请检查是否可以使用诸如 ssh
和 sftp
(GNU/Linux)等工具进行双向连接。
请注意,服务器的 SFTP 根目录可能与其物理根目录(/
)不同。
$ dvc stage add -n download_file \
-d hdfs://user@example.com/data.txt \
-o data.txt \
hdfs fs -copyToLocal \
hdfs://user@example.com/data.txt data.txt
包括 HTTPs
$ dvc stage add -n download_file \
-d https://example.com/data.txt \
-o data.txt \
wget https://example.com/data.txt -O data.txt
$ dvc stage add -n download_file \
-d /home/shared/data.txt \
-o data.txt \
cp /home/shared/data.txt data.txt
你可能希望将外部位置封装为可独立管理的配置实体。如果连接需要身份验证、多个依赖项(或阶段)重复使用同一位置,或者 URL 将来可能会更改,则此方法非常有用。
DVC remotes 正好可以实现这一点。你可以使用 dvc remote add
来定义它们,然后使用格式为 remote://{remote_name}/{path}
的特殊 URL(远程别名)来定义外部依赖。
让我们看一个使用 SSH 的示例。首先,注册并配置远程:
$ dvc remote add myssh ssh://user@example.com
$ dvc remote modify --local myssh password 'mypassword'
更多细节(例如为不同类型的远程设置访问凭据),请参考
dvc remote modify
。
现在,在定义阶段时使用该远程的别名:
$ dvc stage add -n download_file \
-d remote://myssh/path/to/data.txt \
-o data.txt \
wget https://example.com/data.txt -O data.txt
外部输出的工作原理
外部输出将由 DVC 跟踪其变化,但不会保存在缓存中用于版本控制。
在 DVC 3.0 中,已弃用将外部输出保存到外部缓存的功能。
要将外部位置的文件或目录定义为dvc stage add -O
指定其远程 URL 或外部路径,或将其添加到 dvc.yaml
的 outs
字段中。关于支持的外部输出类型及预期的 URL 格式,请参见上方外部依赖的示例。
示例
让我们来看一个例子,定义并运行一个名为 upload_file
的阶段,该阶段仅将文件上传到外部位置。
$ dvc stage add -n upload_file \
-d data.txt \
-O s3://mybucket/data.txt \
aws s3 cp data.txt s3://mybucket/data.txt