使用 GSUtil 在本地加载文件
Posted
技术标签:
【中文标题】使用 GSUtil 在本地加载文件【英文标题】:Loading Files Locally Using GSUtil 【发布时间】:2015-04-26 23:17:48 【问题描述】:有谁知道将一组文件本地加载到 Java dev_appserver 的模拟云存储的好方法。
这不起作用:
$ gsutil rsync gs://mybucket http://localhost:8888/mybucket
InvalidUrlError: Unrecognized scheme "http".
我愿意接受以下任一方面的建议:
-
如何在本地加载一堆文件(最好通过 gsutil)
如何将我的本地 dev_appserver 指向 Google 的非模拟存储桶
在没有适当数据的情况下在本地进行测试是很痛苦的。我正在尝试编写一些转换以将数据加载到 BigQuery(来自 Datastore 备份),如果没有一些真实数据,这将是不可能的。
【问题讨论】:
用rsync
,gsutil rsync -d /localdirgs://mybucket/data
将数据复制到本地目录。
本地副本不是问题,我需要的是一种将其加载到我的 dev_appserver 的方法。
dev_appserver
**.py** 可以通过命令行标志被告知用于本地文件的目录——但是,我对 Java 的了解还不够,无法提供帮助。
【参考方案1】:
“如何将我的本地 dev_appserver 指向 Google 的非模拟存储桶”:它没有清楚地记录,但它已在 dev_appserver
和 cloudstorage
中实现。
要验证我的意思,首先svn checkout http://appengine-gcs-client.googlecode.com/svn/trunk/python gcs-client
将cloudstorage 的源代码安装到您的计算机上(如果您还没有安装subversion
,则需要安装它,但是,这也是免费的:-) .
然后,cd gcs-client/src/cloudstorage/
并查看 storage_api.py
。在第一个函数_get_storage_api
中,文档字符串说:
On dev appserver, this instance by default will talk to a local stub unless common.ACCESS_TOKEN is set. That token will be used to talk to the real GCS.
所以,看看common.py
,再看看第一个函数set_access_token
,你会看到:
参数: access_token:您可以通过运行“gsutil -d ls”并复制 str 在“承载”之后。
因此,您在应用程序的每个条目中(最好在根目录中的 appengine_config.py
中)导入 cloudstorage
的 common
模块,然后**当且仅当您在 dev_appserver 上时[*] 调用
common.set_access_token('whatever_the_token')
使用你通过运行'gsutil -d ls'得到的字符串作为参数字符串,在Bearer
之后,即你会发现类似的东西(伪造和缩短实际值的方式......:-):
Bearer xy15.WKXJQEzXPQQy2dt7qK9\r\n
在这种情况下你会打电话
common.set_access_token('xy15.WKXJQEzXPQQy2dt7qK9')
[*] 有多种方法可以确定您是否在 dev_appserver
,例如查看 GAE: python code to check if i'm on dev_appserver or deployed to appspot。
【讨论】:
感谢 Alex 的快速回复,非常感谢。我确实找到了 Python 的先前答案,但没有找到 Java。抱歉,如果这在我的问题中令人困惑,我试图将其加粗以使其清楚。你知道 Java SDK 也一样吗? @BK-,抱歉,我的 Java 很弱——拥有强大 Java 的人肯定能够在 Java SDK 的源代码中找到类似的方法,就像我在 Python SDK 的源代码中所做的那样!如果您只想要 Java 答案,请将 Java 添加到您的标签中——这样,我们这些对 Java 知之甚少而无法提供帮助的人会知道不会尝试帮助您... 感谢亚历克斯的建议。添加了标签! :-) @BK- 当你说你找到了 python 的答案时,这是你的第二个问题,还是你的第一个问题?我还想在我的开发应用服务器上预加载一些 GCS 数据,但找不到方法。 都没有回答。对不起! :(以上是关于使用 GSUtil 在本地加载文件的主要内容,如果未能解决你的问题,请参考以下文章
使用 gsutil 复制文件后,它们不会立即从本地存储中删除
gsutil rsync 在 gzip/非 gzip 本地/云位置之间同步