Копирование данных из кластера cloudera в кластер google cloud hdfs с использованием distcp

Я использую Cloudera Quickstart vm. Вчера я начал играть с облачной платформой Google. Я пытаюсь скопировать данные в hdfs cloudera в 1. облачное хранилище google (gs://bucket_name/) 2. кластер облачных hdfs google (используя hdfs://google_cluster_namenode:8020/)

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

    hadoop fs -cp hdfs://quickstart.cloudera:8020/path_to_copy/ gs://bucket_name/
    

работает отлично. Однако я не могу использовать distcp для копирования в облачное хранилище Google. Я получаю следующую ошибку. Я знаю, что это не проблема URI. Есть ли что-то еще, что мне не хватает?

Error: java.io.IOException: File copy failed: hdfs://quickstart.cloudera:8020/path_to_copy/file --> gs://bucket_name/file
at org.apache.hadoop.tools.mapred.CopyMapper.copyFileWithRetry(CopyMapper.java:284)
at org.apache.hadoop.tools.mapred.CopyMapper.map(CopyMapper.java:252)
at org.apache.hadoop.tools.mapred.CopyMapper.map(CopyMapper.java:50)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:145)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:787)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:163)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1671)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158) 
Caused by: java.io.IOException: Couldn't run retriable-command: Copying hdfs://quickstart.cloudera:8020/path_to_copy/file to gs://bucket_name/file
at org.apache.hadoop.tools.util.RetriableCommand.execute(RetriableCommand.java:101)
at org.apache.hadoop.tools.mapred.CopyMapper.copyFileWithRetry(CopyMapper.java:280)
... 10 more 
Caused by: java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: gs://bucket_name.distcp.tmp.attempt_1461777569169_0002_m_000001_2
at org.apache.hadoop.fs.Path.initialize(Path.java:206)
at org.apache.hadoop.fs.Path.<init>(Path.java:116)
at org.apache.hadoop.fs.Path.<init>(Path.java:94)
at org.apache.hadoop.tools.mapred.RetriableFileCopyCommand.getTmpFile(RetriableFileCopyCommand.java:233)
at org.apache.hadoop.tools.mapred.RetriableFileCopyCommand.doCopy(RetriableFileCopyCommand.java:107)
at org.apache.hadoop.tools.mapred.RetriableFileCopyCommand.doExecute(RetriableFileCopyCommand.java:100)
at org.apache.hadoop.tools.util.RetriableCommand.execute(RetriableCommand.java:87)
... 11 more
  1. Я не могу заставить distcp подключиться к namenode google cloud hdfs; Я получаю "Повторная попытка подключения к серверу". Я не смог найти никакой документации для настройки соединения между кластером cloudera hdfs и кластером google cloud hdfs. Я исходил из того, что аутентификация служебной учетной записи также должна работать с google hdfs. Есть ли справочная документация, которую я могу использовать для настройки копирования между кластерами? Есть ли какие-либо другие настройки аутентификации, которые мне не хватает?

comment
Я знаю, что это не проблема URI И откуда вы это знаете? Как виртуальная машина cloudera узнает, что делать с gs://? Это не общий URI. Вы получаете URISyntaxException, поэтому я хочу сказать, что это проблема URI   -  person OneCricketeer    schedule 28.04.2016
comment
Я хотел сказать, что тот же URI работает, когда я использую hadoop fs -cp. Но distcp этого не понимает?   -  person Kia    schedule 28.04.2016
comment
Вопрос, на который вы ссылаетесь, ссылается на более старую версию соединителя (1.2.8, а текущая версия — 1.4.5). Можете ли вы проверить, какая версия установлена ​​на вашем кластере? На этой странице приведены сведения о получении коннектора: cloud.google.com/hadoop. /google-cloud-storage-connector#getting Кроме того, возможно, стоит попытаться выполнить запись в каталог на GCS: gs://your_bucket/directory/file (я проверил ванильный дистрибутив Hadoop в корень ведро работает в последней версии, но не в 1.2.8, и сообщение об ошибке, похоже, указывает на то, что оно искажает ведро).   -  person Angus Davis    schedule 28.04.2016
comment
@Ангус Спасибо за ваш ответ. Да, это 1.2.8 v. Установка 1.4.5 вызывает другие проблемы с путями к классам. Нужно проверить это. И да, я пытаюсь писать в каталог на gcs.   -  person Kia    schedule 29.04.2016


Ответы (1)


Оказывается, мне пришлось изменить правила брандмауэра, чтобы разрешить tcp/http с IP-адреса, на котором я запускал distcp. Проверьте сетевые брандмауэры на вычислительных экземплярах GCP.

person Kia    schedule 03.05.2016