Google Cloud DataFlow 无法将文件写入临时位置
GoogleCloud DataFlow Failed to write a file to temp location
我正在 Google 云数据流上构建光束管道。
我收到一条错误消息,指出云数据流没有写入临时目录的权限。
这很令人困惑,因为显然数据流具有写入存储桶的能力,它创建了一个暂存文件夹。
为什么我可以写暂存文件夹,但不能写临时文件夹?
我 运行 在计算引擎上的 docker 容器中。我已通过我的服务帐户进行完全身份验证。
PROJECT=$(gcloud config list project --format "value(core.project)")
BUCKET=gs://$PROJECT-testing
python tests/prediction/run.py \
--runner DataflowRunner \
--project $PROJECT \
--staging_location $BUCKET/staging \
--temp_location $BUCKET/temp \
--job_name $PROJECT-deepmeerkat \
--setup_file tests/prediction/setup.py
编辑
回应@alex amato
bucket是属于项目还是属于其他项目?
是的,当我进入项目的主屏幕时,这是列出的四个桶之一。我通常从这个存储桶上传数据并与其他 google 云服务(云视觉 API)交互。
能否提供完整的错误信息。
"(8d8bc4d7fc4a50bd):无法将文件写入临时位置 'gs://api-project-773889352370-testing/temp/api-project-773889352370-deepmeerkat.1498771638.913123'。请确保此目录的存储桶存在,并且工作流所在的项目 运行ning具有写入它的必要权限。"
"8d8bc4d7fc4a5f8f): Workflow failed. Causes: (8d8bc4d7fc4a526c): 临时位置或暂存文件的一个或多个访问检查失败。请参阅其他错误消息了解详细信息。有关安全和权限的更多信息,请参阅https://cloud.google.com/dataflow/security-and-permissions."
您能否确认不存在与您尝试使用的 GCS 文件夹路径名称匹配的现有 GCS 对象?
是的,存储桶中没有名为 temp 的文件夹。
- 能否请您验证您拥有的权限是否与您运行作为
的成员相匹配
存储桶权限有全局管理员
与我的 gcloud 身份验证匹配
@chamikara 是正确的。尽管从我的服务帐户继承凭据,但云数据流需要自己的凭据。
Can you also give access to cloudservices account (<project-number>@developer.gserviceaccount.com
) as mentioned in cloud.google.com/dataflow/security-and-permissions.
我在从 DirectRunner 移动到 DataflowRunner 时遇到了类似的错误:
Staged package XXX.jar at location 'gs://YYY/staging/XXX.jar' is inaccessible.
在使用权限后,我做了以下操作:
在 Storage Browser
,单击 Edit Bucket Permissions
(针对特定存储桶),为成员 ZZZ-compute@developer.gserviceaccount.com
添加了正确的存储权限
我希望这也能为其他用户节省未来的时间。
运行 由于不同的原因进入同一问题:我设置了对象保留策略,以防止手动删除。由于重命名会触发删除,因此发生了此错误。
因此,如果有人遇到类似问题,请调查您的临时存储桶的属性并可能取消任何保留政策。
我正在 Google 云数据流上构建光束管道。
我收到一条错误消息,指出云数据流没有写入临时目录的权限。
这很令人困惑,因为显然数据流具有写入存储桶的能力,它创建了一个暂存文件夹。
为什么我可以写暂存文件夹,但不能写临时文件夹?
我 运行 在计算引擎上的 docker 容器中。我已通过我的服务帐户进行完全身份验证。
PROJECT=$(gcloud config list project --format "value(core.project)")
BUCKET=gs://$PROJECT-testing
python tests/prediction/run.py \
--runner DataflowRunner \
--project $PROJECT \
--staging_location $BUCKET/staging \
--temp_location $BUCKET/temp \
--job_name $PROJECT-deepmeerkat \
--setup_file tests/prediction/setup.py
编辑
回应@alex amato
bucket是属于项目还是属于其他项目? 是的,当我进入项目的主屏幕时,这是列出的四个桶之一。我通常从这个存储桶上传数据并与其他 google 云服务(云视觉 API)交互。
能否提供完整的错误信息。
"(8d8bc4d7fc4a50bd):无法将文件写入临时位置 'gs://api-project-773889352370-testing/temp/api-project-773889352370-deepmeerkat.1498771638.913123'。请确保此目录的存储桶存在,并且工作流所在的项目 运行ning具有写入它的必要权限。"
"8d8bc4d7fc4a5f8f): Workflow failed. Causes: (8d8bc4d7fc4a526c): 临时位置或暂存文件的一个或多个访问检查失败。请参阅其他错误消息了解详细信息。有关安全和权限的更多信息,请参阅https://cloud.google.com/dataflow/security-and-permissions."
您能否确认不存在与您尝试使用的 GCS 文件夹路径名称匹配的现有 GCS 对象?
是的,存储桶中没有名为 temp 的文件夹。
- 能否请您验证您拥有的权限是否与您运行作为 的成员相匹配
存储桶权限有全局管理员
与我的 gcloud 身份验证匹配
@chamikara 是正确的。尽管从我的服务帐户继承凭据,但云数据流需要自己的凭据。
Can you also give access to cloudservices account (
<project-number>@developer.gserviceaccount.com
) as mentioned in cloud.google.com/dataflow/security-and-permissions.
我在从 DirectRunner 移动到 DataflowRunner 时遇到了类似的错误:
Staged package XXX.jar at location 'gs://YYY/staging/XXX.jar' is inaccessible.
在使用权限后,我做了以下操作:
在 Storage Browser
,单击 Edit Bucket Permissions
(针对特定存储桶),为成员 ZZZ-compute@developer.gserviceaccount.com
我希望这也能为其他用户节省未来的时间。
运行 由于不同的原因进入同一问题:我设置了对象保留策略,以防止手动删除。由于重命名会触发删除,因此发生了此错误。
因此,如果有人遇到类似问题,请调查您的临时存储桶的属性并可能取消任何保留政策。