#apache-spark #hadoop #amazon-s3 #google-cloud-storage #amazon-emr
#apache-spark #hadoop #amazon-s3 #google-облачное хранилище #amazon-emr
Вопрос:
Как я могу обрабатывать данные, хранящиеся в хранилище Google в кластере AWS EMR в Spark?
Предполагая, что у меня есть некоторые данные, хранящиеся в gs://my-buckey/my-parquet-data
, как я могу прочитать их из своего кластера EMR без необходимости предварительно копировать данные в s3 или загружать в локальное хранилище?
Ответ №1:
Сначала получите учетные данные Google HMAC с доступом к корзине / объектам GS, которые вы хотите обработать
Затем используйте файловую систему S3A (уже поставляемую в комплекте с дистрибутивами AWS hadoop) со следующими значениями конфигурации hadoop:
val conf = spark.sparkContext.hadoopConfiguration
conf.set("fs.s3a.access.key", "<hmac key>")
conf.set("fs.s3a.secret.key", "<hmac secret>")
conf.setBoolean("fs.s3a.path.style.access", true)
conf.set("fs.s3a.endpoint", "storage.googleapis.com")
conf.setInt("fs.s3a.list.version", 1)
Затем вы можете получить доступ к хранилищу Google s3a
, используя следующие пути:
spark.read.parquet("s3a://<google storage bucket name>/<path>)
Комментарии:
1. никогда не знал, что вы можете это сделать. Неплохо. Я просто собирался предложить «поместить GCS JAR в кластер и вместо этого использовать gs:// links»
2. Насколько я мог судить, официальный соединитель hadoop для GCS не поддерживает использование учетных данных HMAC, похоже, вам нужны учетные данные учетной записи службы. Похоже, они хотят, чтобы вы просто использовали совместимый с S3 API, когда используете HMAC creds. Но, может быть, вы сможете лучше понять эту документацию, чем я: github.com/GoogleCloudDataproc/hadoop-connectors/blob/master /…