我正在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
存储桶是属于项目还是属于其他项目? 是的,当我进入项目的主屏幕时,这是列出的四个桶中的一个。我通常上传数据并与其他谷歌云服务(云视觉API)进行交互。
请您提供完整的错误消息。
"(8d8bc4d7fc4a50bd):无法将文件写入临时位置' gs://api-project-773889352370-testing/temp/api-project-773889352370-deepmeerkat.1498771638.913123' 。请确保该目录的存储桶存在,并且运行工作流的项目具有写入它的必要权限。"
" 8d8bc4d7fc4a5f8f):工作流程失败。原因:(8d8bc4d7fc4a526c):对临时位置或暂存文件的一次或多次访问检查失败。有关详细信息,请参阅其他错误消息。有关安全性和权限的详细信息,请参阅https://cloud.google.com/dataflow/security-and-permissions。"
您能否确认现有的GCS对象是否与您尝试使用的GCS文件夹路径的名称相匹配?
是的,存储桶中没有名为temp的文件夹。
答案 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
添加了正确的存储许可
我希望这也会为其他用户节省未来的时间。