Поскольку вы используете интерфейсы Hadoop / Spark (например, sc.textFile
), все должно действительно выполняться с помощью клавиш fs.s3.*
, fs.s3n.*
или fs.s3a.*
, а не пытаться подключиться через какие-либо параметры ~/.aws
или /etc/boto.cfg
. Есть несколько способов передать эти настройки в кластер Dataproc:
Во время создания кластера:
gcloud dataproc clusters create --properties \
core:fs.s3.awsAccessKeyId=<s3AccessKey>,core:fs.s3.awsSecretAccessKey=<s3SecretKey> \
--num-workers ...
Префикс core
здесь означает, что вы хотите, чтобы настройки были помещены в файл core-site.xml
, как описано в Документация по свойствам кластера.
В качестве альтернативы, во время отправки задания, если вы используете API-интерфейсы Dataproc:
gcloud dataproc jobs submit pyspark --cluster <your-cluster> \
--properties spark.hadoop.fs.s3.awsAccessKeyId=<s3AccessKey>,spark.hadoop.fs.s3.awsSecretAccessKey=<s3SecretKey> \
...
В этом случае мы передаем свойства как свойства Spark, а Spark предоставляет удобный механизм для определения свойств conf "hadoop" как подмножества Spark conf, просто используя префикс spark.hadoop.*
. Если вы отправляете в командной строке через SSH, это эквивалентно:
spark-submit --conf spark.hadoop.fs.s3.awsAccessKeyId=<s3AccessKey> \
--conf spark.hadoop.fs.s3.awsSecretAccessKey=<s3SecretKey>
Наконец, если вы хотите настроить его во время создания кластера, но предпочитаете не указывать ключи доступа явно в метаданных Dataproc, вы можете использовать действие инициализации. В пути должен присутствовать удобный инструмент под названием bdconfig
, с помощью которого вы можете легко изменить настройки XML:
#!/bin/bash
# Create this shell script, name it something like init-aws.sh
bdconfig set_property \
--configuration_file /etc/hadoop/conf/core-site.xml \
--name 'fs.s3.awsAccessKeyId' \
--value '<s3AccessKey>' \
--clobber
bdconfig set_property \
--configuration_file /etc/hadoop/conf/core-site.xml \
--name 'fs.s3.awsSecretAccessKey' \
--value '<s3SecretKey>' \
--clobber
Загрузите это куда-нибудь в корзину GCS и используйте во время создания кластера:
gsutil cp init-aws.sh gs://<your-bucket>/init-aws.sh
gcloud dataproc clustres create --initialization-actions \
gs://<your-bucket>/init-aws.sh
Хотя метаданные Dataproc действительно зашифрованы в состоянии покоя и надежно защищены, как и любые другие пользовательские данные, использование действия init вместо этого помогает предотвратить непреднамеренное отображение вашего ключа / секрета доступа, например, для кого-то, кто стоит за вашим экраном при просмотре свойств вашего кластера Dataproc.
person
Dennis Huo
schedule
07.09.2016
awscli
, или вы получаете доступ к S3 через обычные интерфейсы Spark / Hadoop FileSystem? - person Dennis Huo   schedule 07.09.2016