GoogleCloud DataFlow无法将文件写入临时位置

时间:2017-06-29 21:47:11

标签: python google-cloud-storage google-cloud-dataflow gcloud apache-beam

我正在Google云数据流上构建一个光束管道。

我收到一条错误,即云数据流没有写入临时目录的权限。

enter image description here

这很令人困惑,因为很明显数据流能够写入存储桶,它创建了一个暂存文件夹。

enter image description here

为什么我能写一个暂存文件夹,而不是临时文件夹?

我正在计算引擎上的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

  1. 存储桶是属于项目还是属于其他项目? 是的,当我进入项目的主屏幕时,这是列出的四个桶中的一个。我通常上传数据并与其他谷歌云服务(云视觉API)进行交互。

  2. 请您提供完整的错误消息。

    "(8d8bc4d7fc4a50bd):无法将文件写入临时位置' gs://api-project-773889352370-testing/temp/api-project-773889352370-deepmeerkat.1498771638.913123' 。请确保该目录的存储桶存在,并且运行工作流的项目具有写入它的必要权限。"

    " 8d8bc4d7fc4a5f8f):工作流程失败。原因:(8d8bc4d7fc4a526c):对临时位置或暂存文件的一次或多次访问检查失败。有关详细信息,请参阅其他错误消息。有关安全性和权限的详细信息,请参阅https://cloud.google.com/dataflow/security-and-permissions。"

  3. 您能否确认现有的GCS对象是否与您尝试使用的GCS文件夹路径的名称相匹配?

  4. 是的,存储桶中没有名为temp的文件夹。

    1. 您能否请验证您与
    2. 运行的成员相匹配的权限

      Bucket权限具有全局管理

      enter image description here

      匹配我的gcloud auth

      enter image description here

2 个答案:

答案 0 :(得分:1)

@chamikara是对的。尽管从我的服务帐户继承了凭据,但云数据流需要自己的凭据。

"您是否也可以访问cloud.google.com/dataflow/security-and-permissions中提到的cloudservices帐户(@ cloudservices.gserviceaccount.com)。"

答案 1 :(得分:0)

DirectRunner 转到 DataflowRunner 时,我遇到了类似的错误:

  

无法访问位于“ gs://YYY/staging/XXX.jar”位置的分段软件包XXX.jar。

在使用权限后,这就是我所做的: 在Storage Browser,单击Edit Bucket Permissions(针对特定存储桶),为成员ZZZ-compute@developer.gserviceaccount.com添加了正确的存储许可

我希望这也会为其他用户节省未来的时间。