Presto не может распознать учетные данные AWS (как IAM, так и ключи)?

Я пытаюсь настроить Presto на экземпляре AWS EC2, чтобы я мог выполнять запросы к файлам, хранящимся в S3. Я знаю, что вы можете / должны использовать EMR, но я ограничен EC2. Я создал базу данных Derby для своего хранилища метаданных, настроил HDFS в ведре и могу запрашивать файлы данных в S3 с помощью Hive. В интерфейсе командной строки Hive я могу запустить SELECT * FROM testpresto; (testpresto - это имя моей таблицы), и он правильно отображает все содержимое моего txt-файла S3. Я подключил Presto к хранилищу метаданных Hive, поэтому моя таблица отображается в интерфейсе командной строки presto через SHOW TABLES; и DESCRIBE testpresto;.

Однако, когда я запускаю SELECT * FROM testpresto;, время ожидания запроса истекает с ошибкой ниже.

Запрос 20170109_165917_00007_7pyam завершился неудачно: невозможно выполнить HTTP-запрос: подключиться к $ {MY_BUCKET} .s3-us-west-1.amazonaws.com: 443 [$ {MY_BUCKET} .s3-us-west-1.amazonaws.com / 54.231. 237.24] не удалось: время ожидания подключения истекло

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

Запрос 20170109_175329_00016_7pyam завершился неудачно: java.lang.IllegalArgumentException: необходимо указать идентификатор ключа доступа AWS и секретный ключ доступа в качестве имени пользователя или пароля (соответственно) URL-адреса s3 или путем установки свойств fs.s3.awsAccessKeyId или fs.s3.awsSecretAccessKey (соответственно).

К сожалению, ничто из того, что я делаю, не решает эту ошибку. Из того, что я читал в Интернете, кажется, что добавление ссылки на ресурс в мою конфигурацию Presto (catalog/hive.properties) через

hive.config.resources=/usr/local/hadoop/etc/hadoop/core-site.xml,/usr/local/hadoop/etc/hadoop/hdfs-site.xml

или добавление ключей напрямую через hive.s3.aws-access-key и hive.s3.aws-secret-key должно позволить Presto читать из S3. Я также пробовал использовать hive.s3.use-instance-credentials=true (как с настройкой ключей, так и без них) для использования роли IAM, но все это вызывает ту же ошибку. Есть ли какой-то другой параметр, который мне не хватает? Я не понимаю, почему Hive может запрашивать, а Presto - нет.


person A. Sokol    schedule 09.01.2017    source источник


Ответы (3)


Я тестировал Presto с S3 и Hive metastore, используя схему s3a:// для доступа к S3. Поскольку у вас Hive разговаривает с S3, остальное должно быть легко:

  • вы можете назначить роль IAM, которая позволяет вашему экземпляру EC2 взаимодействовать с S3. В Presto 0.157 это работает нестандартно, поскольку свойство hive.s3.use-instance-credentials config коннектора hive по умолчанию true
  • alternatively you can set the following in the configuration file of the hive connector (usually catalog/hive.properties):
    • hive.s3.use-instance-credentials = false
    • hive.s3.aws-access-key = ...
    • hive.s3.aws-secret-key = ...

Поскольку я понимаю, что вы протестировали эти варианты, и они у вас не сработали, вы все равно можете попробовать:

  • повторить попытку
  • попробуйте со схемой s3a, если вы еще этого не сделали
  • обновите, если вы сильно отстали от последней версии, или попробуйте ту же версию, которая работала для меня (0.157.1-t.1)
  • убедитесь, что нет конфигурации на уровне сети, блокирующей доступ к S3 с компьютера Presto
  • убедитесь, что роли IAM действительно предоставляют вам доступ к S3 (или используйте явные ключи в качестве временного обходного пути)
person Piotr Findeisen    schedule 01.04.2017

При запуске инстанса EC2 у вас есть возможность назначить ему роль IAM. Роль IAM должна быть назначена во время запуска. После запуска экземпляра вы не можете назначить ему роль или изменить его роль.

Я думаю, что вам следует создать роль IAM, которая имеет необходимый доступ к корзине s3, а затем запустить новый экземпляр EC2 и назначить ему эту роль. Как только этот экземпляр будет создан, войдите по SSH и запустите aws s3 ls, чтобы увидеть, к каким сегментам этот экземпляр также имеет доступ. Если вы правильно настроили роль, она должна иметь возможность отображать ваши корзины. С этого момента Presto должен работать.

person Community    schedule 09.01.2017
comment
У этого экземпляра есть роль IAM, которая дает ему доступ к корзине, я назначил ее во время запуска. Я могу запустить aws s3 ls s3://${MY_BUCKET} на этом EC2, и он правильно отображает содержимое корзины. - person A. Sokol; 09.01.2017
comment
Я думаю, что Presto проверит учетные данные AWS, и если они не настроены, он вернется к использованию службы метаданных AWS для использования роли IAM. Может быть, эта суть полезна - github.com/prestodb/presto/pull/1938 - person ; 09.01.2017
comment
Да, я видел эту ссылку раньше. Однако ни одно из этих изменений не реализовано, и в конечном итоге цепочка связанных PR заканчивается, когда кто-то создает CustomCredentialsProvider для Hadoop? Я действительно не знаю, как бы я включил это в Presto. - person A. Sokol; 09.01.2017
comment
Может быть, если вы добавите ключи напрямую через hive.s3.aws-access-key и hive.s3.aws-secret-key Presto с учетными данными AWS, вы сможете использовать CloudTrail или консоль IAM, чтобы увидеть, используются ли эти учетные данные и отправляются ли они в AWS для аутентификации для S3? Надеюсь, это поможет вам в дальнейшем выявить неисправность. - person ; 09.01.2017
comment
Когда я пытался использовать ключи раньше, я добавлял их в файл hive.properties в конфигурации каталога. На этот раз я попытался просто добавить их как параметры сеанса и получил следующую ошибку. Exception in thread "main" io.airlift.airline.ParseOptionConversionException: session: can not convert "hive.s3.aws-access-key=${MY_KEY}" to a ClientSessionProperty Может быть, у Presto была та же самая ошибка, когда я поместил ее в файл свойств? - person A. Sokol; 09.01.2017
comment
Хм, хороший вопрос. Я бы поместил эти ключи обратно в файл hive.properties, а затем посмотрел, действительно ли они привыкли пытаться получить доступ к корзине, заглянув в консоль IAM. Если не зарегистрировать как используемый, значит, необходимо найти еще одну ошибку Presto. - person ; 09.01.2017
comment
Должны ли отображаться настройки из моего файла (ов) connector.properties, когда я запускаю SHOW SESSION; из интерфейса командной строки Presto? - person A. Sokol; 10.01.2017

Если вы работаете с EMR, вы используете клиент Amazon S3, а не код ASF. Это означает, что кода в S3a (например, этой цепочки поставщиков учетных данных) там не будет. Игнорируйте любые ссылки на HADOOP- * JIRA или документы в разделе http://hadoop.apache.org. Извините

person stevel    schedule 14.01.2017