Jupyter Notebook加载GCS中CSV文件崩溃,不同GCE实例表现异常
GCE实例加载GCS CSV文件崩溃的排查方案
我最近遇到个挺头疼的问题:同样的代码在一台GCE实例的Jupyter Notebook里能正常读取GCS存储桶里的自定义CSV文件,换了另一台配置更高(内存、CPU都比旧实例强)的GCE实例却直接崩溃,而且Python 2和Python 3环境里都出现这个情况。已经反复确认过存储桶名称和文件名完全没问题——毕竟在旧实例上跑的好好的。
用到的代码如下:
from google.datalab import Context import google.datalab.bigquery as bq import google.datalab.storage as storage import pandas as pd try: from StringIO import StringIO except ImportError: from io import BytesIO as StringIO
第一次用魔法命令读取时崩溃:
%%gcs read --object gs://ls_w/tmax_out_save.csv --variable bla # 执行到此处崩溃
后来换了storage模块的API尝试,结果还是崩溃:
bla = storage.Object('ls_w', 'tmax_out_save.csv').read_stream() # 这里同样崩溃
几个可以尝试的排查和解决方向
- 核对实例权限配置:新实例配置更高,但说不定没拿到GCS存储桶的访问权限。去IAM控制台看看新实例绑定的服务账号,有没有
storage.objectViewer或者针对目标存储桶的读取权限,对比旧实例的权限配置来调整。 - 检查google-datalab版本差异:新实例安装的datalab版本可能和旧实例不一样,某些版本可能存在GCS读取的兼容性bug。在两个实例里分别执行
pip show google-datalab查看版本,把新实例的版本降级到和旧实例一致再试试。 - 测试小文件读取排除文件问题:如果目标CSV文件很大,试试上传一个小的测试CSV到同一个存储桶,用同样的代码读取。如果小文件能正常加载,那可能是大文件读取时的内存处理逻辑出了问题。
- 查看崩溃时的日志信息:Jupyter崩溃后,去GCE实例的系统日志或者Jupyter的后台日志里找找具体错误提示——比如权限报错、内存溢出信息,这些能直接帮你定位问题根源。
- 换一种读取方式绕开datalab工具:可以先用
gsutil命令把文件下载到实例本地,再用pandas读取,看看能不能正常运行:
!gsutil cp gs://ls_w/tmax_out_save.csv ./local_copy.csv df = pd.read_csv('./local_copy.csv')
如果这种方式能成功,那大概率是datalab的GCS读取模块在新实例上存在兼容性问题。
内容的提问来源于stack exchange,提问作者Lukasz
相关产品推荐
相关产品推荐

