运行程序时如何正确设置Google Cloud Bucket存储路径?
GCS存储桶路径无法被下游程序识别的解决方法
gsutil作为谷歌云官方原生工具,默认支持gs://协议前缀的GCS路径解析,但普通程序通常不会内置GCS协议适配能力,因此无法直接识别gs://开头的路径,可根据程序适配情况选择对应方案配置:
情况1:下游程序本身支持GCS协议适配
如果是Hadoop生态组件、机器学习框架、谷歌云配套工具这类默认支持GCS的程序,按以下步骤排查配置:
- 确认程序运行身份的权限:程序运行时使用的身份凭证和你本地执行gsutil的凭证可能不一致(例如程序运行在GCE/GKE/Cloud Function上时,默认使用实例的服务账号),需要给对应身份授予存储桶的
roles/storage.objectCreator及以上权限 - 提前安装程序依赖的GCS适配组件:例如Java程序需要引入
gcs-connector依赖包,Python程序需要提前安装google-cloud-storage、gcsfs依赖库 - 路径格式保持标准写法:正确的GCS路径格式为
gs://<存储桶名称>/<对象路径>,不需要拼接项目ID,不要额外添加多余斜杠即可直接使用
情况2:下游程序不支持GCS协议适配
如果程序本身没有内置GCS解析能力,可选择以下两种通用方案:
- 先输出到本地临时路径,运行结束后同步到GCS,示例操作:
# 程序先输出到本地临时文件 your_program -output /tmp/file.out # 执行完成后用gsutil上传到存储桶 gsutil -u absolute-bison-xxxxx cp /tmp/file.out gs://bucket_1/file.out - 使用gcsfuse把GCS存储桶挂载为本地目录,程序直接读写挂载路径即可操作GCS文件,示例操作:
# 安装gcsfuse后创建本地挂载目录并挂载 mkdir -p /mnt/gcs_bucket1 gcsfuse bucket_1 /mnt/gcs_bucket1 # 程序直接指定输出到挂载路径 your_program -output /mnt/gcs_bucket1/file.out
内容的提问来源于stack exchange,提问作者user2300940
相关产品推荐
相关产品推荐

