Yandex.Cloud
  • Сервисы
  • Почему Yandex.Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Yandex Data Proc
  • Сценарии использования
    • Настройка сети для кластеров Data Proc
    • Использование Apache Hive
    • Запуск Spark-приложений
    • Запуск приложений с удаленного хоста
    • Копирование файлов из Yandex Object Storage
  • Пошаговые инструкции
    • Все инструкции
    • Создание кластера
    • Подключение к кластеру
    • Изменение подкластера
    • Управление подкластерами
    • Удаление кластера
  • Концепции
    • Обзор Data Proc
    • Классы хостов
    • Версии Hadoop и компонентов
    • Интерфейсы и порты компонентов
    • Веб-интерфейсы компонентов
    • Автоматическое масштабирование
    • Декомиссия подкластеров и хостов
    • Сеть в Data Proc
    • Квоты и лимиты
  • Управление доступом
  • Правила тарификации
  • Справочник API
    • Аутентификация в API
    • gRPC
      • Обзор
      • ClusterService
      • JobService
      • ResourcePresetService
      • SubclusterService
      • OperationService
    • REST
      • Обзор
      • Cluster
        • Обзор
        • create
        • delete
        • get
        • list
        • listHosts
        • listOperations
        • start
        • stop
        • update
      • Job
        • Обзор
        • create
        • get
        • list
      • ResourcePreset
        • Обзор
        • get
        • list
      • Subcluster
        • Обзор
        • create
        • delete
        • get
        • list
        • update
  • Вопросы и ответы
  1. Сценарии использования
  2. Копирование файлов из Yandex Object Storage

Использование Yandex Object Storage в Data Proc

  • DistCp
    • Копирование с использованием CredentialProvider
  • Копирование файлов с передачей ключей в аргументах
  • Использование s3fs
  • Использование Object Storage в Spark

В этом разделе рассмотрены различные способы доступа к объектам из бакетов Object Storage для процессов, запущенных на кластерах Data Proc.

Примечание

Перед настройкой доступа к сервисам Yandex.Cloud и интернет-ресурсам убедитесь, что сеть кластера настроена правильно.

DistCp

Для копирования файлов из Object Storage в HDFS рекомендуется использовать утилиту DistCp, которая предназначена для копирования данных как внутри кластера, так и между кластерами и внешними хранилищами.

Для аутентификации в Object Storage можно использовать два подхода:

  1. Использовать CredentialProvider.
  2. Передавать параметры access key и secret key при запуске задачи.

Копирование с использованием CredentialProvider

Чтобы воспользоваться провайдером для хранения секретов, разместите эти секреты в компонентах, которым нужен доступ к Object Storage. Для этого можно воспользоваться JCEKS (Java Cryptography Extension KeyStore): в примере вы создадите файл с секретами, который затем разместите в HDFS.

  1. Укажите access key и secret key, например:

    hadoop credential create fs.s3a.access.key -value <access key> -provider localjceks://file/home/jack/yc.jceks
    hadoop credential create fs.s3a.secret.key -value <secret key> -provider localjceks://file/home/jack/yc.jceks
    
  2. Перенесите файл секрета в локальный HDFS:

    hdfs dfs -put /home/jack/yc.jceks /user/root/
    
  3. Скопируйте файл из Object Storage непосредственно в HDFS:

    hadoop distcp \
           -D fs.s3a.bucket.dataproc-examples.endpoint=storage.yandexcloud.net \
           -D hadoop.security.credential.provider.path=jceks://hdfs/user/root/yc.jceks \
           -update \
           -skipcrccheck \
           -numListstatusThreads 10 \
           s3a://yc-mdb-examples/dataproc/example01/set01 \
           hdfs://<хост HDFS>/<путь>/
    

    <хост HDFS> — целевой сервер HDFS, который вы используете. Сервер по умолчанию можно получить с помощью команды:

    hdfs getconf -confKey fs.defaultFS
    

Пример команды копирования файлов из бакета:

hadoop distcp \
       -D fs.s3a.bucket.dataproc-examples.endpoint=storage.yandexcloud.net \
       -D hadoop.security.credential.provider.path=jceks://hdfs/user/root/yc.jceks \
       -update \
       -skipcrccheck \
       -numListstatusThreads 10 \
       s3a://yc-mdb-examples/dataproc/example01/set01 \
       hdfs://rc1b-dataproc-m-d31bs470ivkyrz60.mdb.yandexcloud.net/user/root/datasets/set01/

Копирование файлов с передачей ключей в аргументах

Вы можете не создавать файл секретов, а передавать ключи в аргументах команды:

hadoop distcp \
       -D fs.s3a.bucket.dataproc-examples.endpoint=storage.yandexcloud.net \
       -D fs.s3a.bucket.dataproc-examples.access.key=<access_key> \
       -D fs.s3a.bucket.dataproc-examples.secret.key=<secret_key> \
       -update \
       -skipcrccheck \
       -numListstatusThreads 10 \
       s3a://yc-mdb-examples/dataproc/example01/set01 \
       hdfs://rc1b-dataproc-m-d31bs470ivkyrz60.mdb.yandexcloud.net/user/root/datasets/set01/

Использование s3fs

s3fs позволяет монтировать бакеты Object Storage посредством Fuse. Более подробно о ее использовании можно узнать на странице s3fs

Использование Object Storage в Spark

Spark Shell
PySpark Shell

Реализуйте нужный вариант доступа:

  • С использованием JCEKS:

    sc.hadoopConfiguration.set("fs.s3a.endpoint", "storage.yandexcloud.net");
    sc.hadoopConfiguration.set("hadoop.security.credential.provider.path", "jceks://hdfs/<путь к файлу JCEKS>");
    
  • По ключу доступа и секрету:

    sc.hadoopConfiguration.set("fs.s3a.endpoint", "storage.yandexcloud.net");
    sc.hadoopConfiguration.set("fs.s3a.access.key","<access key>>");
    sc.hadoopConfiguration.set("fs.s3a.secret.key","<secret_key>");
    

После этого можно читать файл из Object Storage:

val sqlContext = new org.apache.spark.sql.SQLContext(sc)
val df = sqlContext.read.parquet("s3a://<имя бакета>/<путь к объекту>")

Выберите способ доступа:

  • Доступ к объектам Object Storage c использование JCEKS:

    sc._jsc.hadoopConfiguration().set("fs.s3a.endpoint", "storage.yandexcloud.net")
    sc._jsc.hadoopConfiguration().set("hadoop.security.credential.provider.path", "jceks://hdfs/<путь к файлу JCEKS>")
    
  • Доступ по ключу доступа и секрету бакета:

    sc._jsc.hadoopConfiguration().set("fs.s3a.endpoint", "storage.yandexcloud.net")
    sc._jsc.hadoopConfiguration().set("fs.s3a.access.key","<ключ доступа>>")
    sc._jsc.hadoopConfiguration().set("fs.s3a.secret.key","<секрет бакета>")
    

Получив доступ, вы можете читать файл напрямую из Object Storage:

sql = SQLContext(sc)
df = sql.read.parquet("s3a://<bucket_name>/<path_to_file_or_directory>")
В этой статье:
  • DistCp
  • Копирование с использованием CredentialProvider
  • Копирование файлов с передачей ключей в аргументах
  • Использование s3fs
  • Использование Object Storage в Spark
Language
Вакансии
Политика конфиденциальности
Условия использования
© 2021 ООО «Яндекс.Облако»