Доступ к GCS с помощью клиента Hadoop из-за пределов облака - PullRequest
0 голосов
/ 16 апреля 2019

Я хочу получить доступ к Google Cloud Storage через клиент Hadoop.Я хочу использовать его на компьютере вне Google Cloud.

Я следовал инструкциям здесь .Я создал учетную запись службы и сгенерировал ключевой файл.Я также создал файл core-site.xml и загрузил необходимую библиотеку.

Однако, когда я пытаюсь запустить простую команду hdfs dfs -ls gs://bucket-name, все, что я получаю, это:

Error getting access token from metadata server at: http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token

Когда я делаю это внутри Облака Google, оно работает, но пытается подключиться к GCS из за пределами , это показывает ошибку выше.

Как подключиться к GCS сКлиент Hadoop таким образом?Это вообще возможно?У меня нет маршрута к адресу 169.254.169.254.

Вот мой core-site.xml (в этом примере я изменил путь к ключу и адрес электронной почты):

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
  <property>
    <name>spark.hadoop.google.cloud.auth.service.account.enable</name>
    <value>true</value>
  </property>
  <property>
    <name>spark.hadoop.google.cloud.auth.service.account.json.keyfile</name>
    <value>path/to/key.json</value>
  </property>
  <property>
    <name>fs.gs.project.id</name>
    <value>ringgit-research</value>
    <description>
      Optional. Google Cloud Project ID with access to GCS buckets.
      Required only for list buckets and create bucket operations.
    </description>
  </property>
  <property>
    <name>fs.AbstractFileSystem.gs.impl</name>
    <value>com.google.cloud.hadoop.fs.gcs.GoogleHadoopFS</value>
    <description>The AbstractFileSystem for gs: uris.</description>
  </property>
  <property>
    <name>fs.gs.auth.service.account.email</name>
    <value>myserviceaccountaddress@google</value>
    <description>
      The email address is associated with the service account used for GCS
      access when fs.gs.auth.service.account.enable is true. Required
      when authentication key specified in the Configuration file (Method 1)
      or a PKCS12 certificate (Method 3) is being used.
    </description>
  </property>
</configuration>

Ответы [ 2 ]

0 голосов
/ 06 мая 2019

Проблема в том, что я попробовал неверный метод аутентификации. Используемый метод предполагает, что он работает в облаке Google и пытается подключиться к серверам метаданных Google. При работе вне Google это не работает по понятным причинам.

Ответ на этот вопрос здесь: Перенос данных объемом 50 ТБ из локального кластера Hadoop в облачное хранилище Google с соответствующим core-site.xml в выбранном ответе.

Свойство fs.gs.auth.service.account.keyfile следует использовать вместо spark.hadoop.google.cloud.auth.service.account.json.keyfile . Единственное отличие состоит в том, что для этого свойства требуется p12 файл ключа вместо json .

0 голосов
/ 27 апреля 2019

может означать, что службы hadoop еще не приняли обновления, сделанные в вашем файле core-site.xml, поэтому я предлагаю перезапустить службы hadoop, другое действие, которое вы можете предпринять, это проверить параметры контроля доступа [1].

Если после выполнения предложенного действия у вас все еще возникла та же проблема, пожалуйста, опубликуйте полное сообщение об ошибке.

[1] https://cloud.google.com/storage/docs/access-control/

...