我正在尝试将运行在google云vm上的hadoop连接到google云存储。我有:
修改core-site.xml以包含fs.gs.impl和fs.abstractfilesystem.gs.impl的属性
在生成的hadoop-env.sh中下载并引用了gcs-connector-latest-hadoop2.jar
使用我的个人帐户(而不是服务帐户)通过gcloud auth登录进行身份验证。
我能够运行gsutil-ls gs://mybucket/而没有任何问题,但是在执行时
hadoop fs-ls gs://mybucket/
我得到输出:
14/09/30 23:29:31 INFO gcs.GoogleHadoopFileSystemBase: GHFS version: 1.2.9-hadoop2
ls: Error getting access token from metadata server at: http://metadata/computeMetadata/v1/instance/service-accounts/default/token
想知道我错过了什么步骤让hadoop能够看到google存储?
谢谢!
3条答案
按热度按时间rqdpfwrv1#
看起来示例本身没有配置为使用正确的服务帐户(但gsutil命令行实用程序是)。hadoop文件系统适配器看起来没有提取这些凭据。
首先,尝试检查该示例是否配置了正确的服务帐户。如果没有,你可以设置它。
希望这有帮助!
bzzcjhmw2#
非常感谢你的回答!你的回答让我找到了从本地hadoop集群迁移50tb数据到google云存储的配置。
我能够利用fs.gs.auth.service.account.keyfile生成一个新的服务帐户,然后应用服务帐户电子邮件地址和p12密钥。
sczxawaw3#
默认情况下,在google计算引擎上运行的gcs连接器优化为使用内置服务帐户机制,因此为了强制它使用oauth2流,需要设置一些额外的配置键;您可以从gcloud auth借用相同的“client\u id”和“client\u secret”,如下所示,并将它们添加到core-site.xml中,同时禁用
fs.gs.auth.service.account.enable
:也可以选择设置
fs.gs.auth.client.file
除了它的默认~/.credentials/storage.json
.如果你这么做,那么当你跑的时候
hadoop fs -ls gs://mybucket
您将看到一个新的提示,类似于“gcloud auth login”提示,您将访问浏览器并再次输入验证码。不幸的是,连接器不能直接使用“gcloud”生成的凭证,即使它可能共享一个credentialstore文件,因为它显式地请求它需要的gcs作用域(您会注意到,新的auth流将只请求gcs作用域,而不是像“gcloud auth login”这样的一大串服务)。确保你也设置了
fs.gs.project.id
在core-site.xml中:因为gcs连接器同样不会从相关的gcloud auth自动推断默认项目。