hadoop无法连接到google云存储

bfhwhh0e  于 2021-06-02  发布在  Hadoop
关注(0)|答案(3)|浏览(358)

我正在尝试将运行在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存储?
谢谢!

rqdpfwrv

rqdpfwrv1#

看起来示例本身没有配置为使用正确的服务帐户(但gsutil命令行实用程序是)。hadoop文件系统适配器看起来没有提取这些凭据。
首先,尝试检查该示例是否配置了正确的服务帐户。如果没有,你可以设置它。
希望这有帮助!

bzzcjhmw

bzzcjhmw2#

非常感谢你的回答!你的回答让我找到了从本地hadoop集群迁移50tb数据到google云存储的配置。
我能够利用fs.gs.auth.service.account.keyfile生成一个新的服务帐户,然后应用服务帐户电子邮件地址和p12密钥。

sczxawaw

sczxawaw3#

默认情况下,在google计算引擎上运行的gcs连接器优化为使用内置服务帐户机制,因此为了强制它使用oauth2流,需要设置一些额外的配置键;您可以从gcloud auth借用相同的“client\u id”和“client\u secret”,如下所示,并将它们添加到core-site.xml中,同时禁用 fs.gs.auth.service.account.enable :

<property>
  <name>fs.gs.auth.service.account.enable</name>
  <value>false</value>
</property>
<property>
  <name>fs.gs.auth.client.id</name>
  <value>32555940559.apps.googleusercontent.com</value>
</property>
<property>
  <name>fs.gs.auth.client.secret</name>
  <value>ZmssLNjJy2998hD4CTg2ejr2</value>
</property>

也可以选择设置 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中:

<property>
  <name>fs.gs.project.id</name>
  <value>your-project-id</value>
</property>

因为gcs连接器同样不会从相关的gcloud auth自动推断默认项目。

相关问题