Hadoop无法连接到Google云端存储

Den*_*Lee 5 google-app-engine hadoop google-cloud-storage google-hadoop

我正在尝试将在Google Cloud 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
Run Code Online (Sandbox Code Playgroud)

想知道我缺少哪些步骤让Hadoop能够看到Google存储?

谢谢!

Den*_*Huo 8

默认情况下,在Google Compute Engine上运行时,gcs-connector针对使用内置服务帐户机制进行了优化,因此为了强制它使用oauth2流,需要设置一些额外的配置键; 您可以从gcloud auth借用相同的"client_id"和"client_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>
Run Code Online (Sandbox Code Playgroud)

您也可以选择设置fs.gs.auth.client.file默认值以外的其他值~/.credentials/storage.json.

如果你这样做,那么当你运行时,hadoop fs -ls gs://mybucket你会看到一个新的提示,类似于"gcloud auth login"提示,你将访问浏览器并再次输入验证码.不幸的是,连接器不能直接使用"gcloud"生成的凭证,即使它可能共享凭证存储文件,因为它明确要求它需要的GCS范围(您会注意到新的auth流程会询问仅适用于GCS范围,而不是像"gcloud auth login"这样的大型服务列表.

确保您还在fs.gs.project.idcore-site.xml中设置:

<property>
  <name>fs.gs.project.id</name>
  <value>your-project-id</value>
</property>
Run Code Online (Sandbox Code Playgroud)

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


归档时间:

查看次数:

2522 次

最近记录:

11 年,5 月 前