Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Data Processing
  • Начало работы
    • Все руководства
      • Обзор
      • Работа с заданиями Hive
      • Работа с заданиями MapReduce
      • Работа с заданиями PySpark
      • Работа с заданиями Spark
      • Запуск заданий Apache Hive
      • Запуск Spark-приложений
      • Запуск заданий с удаленного хоста
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Публичные материалы
  • Вопросы и ответы
  • Обучающие курсы

В этой статье:

  • Перед началом работы
  • Запуск задания
  1. Практические руководства
  2. Работа с заданиями
  3. Запуск заданий с удаленного хоста

Запуск заданий с удаленных хостов, не входящих в кластер Yandex Data Processing

Статья создана
Yandex Cloud
Улучшена
Dmitry A.
Обновлена 8 апреля 2025 г.
  • Перед началом работы
  • Запуск задания

В этом руководстве показывается, как с помощью утилиты spark-submit запускать Spark-задания в кластере Yandex Data Processing с хостов, не входящих в кластер Yandex Data Processing.

Примечание

Задания в кластере Yandex Data Processing также можно запускать из Yandex DataSphere. Подробнее см. в концепции.

Перед началом работыПеред началом работы

Создайте и настройте хост для удаленного запуска заданий на кластере Yandex Data Processing:

Версия образа 1.4
Версия образа 2.0
  1. Создайте виртуальную машину с операционной системой Ubuntu 16.04 LTS.

  2. Чтобы обеспечить сетевой доступ к кластеру Yandex Data Processing с созданной ВМ, настройте группы безопасности кластера.

  3. Подключитесь к ВМ по SSH:

    ssh -A <имя_пользователя>@<FQDN_ВМ>
    
  4. Скопируйте настройки репозитория с любого из хостов кластера Yandex Data Processing. Для этого выполните последовательность команд на созданной виртуальной машине.

    1. Скопируйте адрес репозитория:

      ssh root@<FQDN_хоста_кластера> \
      "cat /etc/apt/sources.list.d/yandex-dataproc.list" | \
      sudo tee /etc/apt/sources.list.d/yandex-dataproc.list
      
    2. Скопируйте gpg-ключ для верификации подписей deb-пакетов:

      ssh root@<FQDN_хоста_кластера> \
      "cat /srv/dataproc.gpg" | sudo apt-key add -
      
    3. Обновите кэш репозиториев:

      sudo apt update
      
  5. Установите необходимые пакеты:

    sudo apt install openjdk-8-jre-headless hadoop-client hadoop-hdfs spark-core spark-python
    

    Примечание

    Пакет spark-python необходим только для запуска заданий PySpark.

  6. Скопируйте конфигурационные файлы Hadoop и Spark:

    sudo -E scp -r \
        root@<FQDN_хоста_кластера>:/etc/hadoop/conf/* \
        /etc/hadoop/conf/ && \
    sudo -E scp -r \
        root@<FQDN_хоста_кластера>:/etc/spark/conf/* \
        /etc/spark/conf/
    
  7. Создайте пользователя sparkuser, от имени которого будут запускаться задания:

    sudo useradd sparkuser && \
    ssh root@<FQDN_хоста_кластера> "
      hadoop fs -mkdir /user/sparkuser
      sudo -u hdfs hdfs dfs -chown sparkuser:sparkuser /user/sparkuser
      sudo -u hdfs hdfs dfs -ls /user/sparkuser
    "
    
  1. Создайте виртуальную машину с операционной системой Ubuntu 20.04 LTS.

  2. Чтобы обеспечить сетевой доступ к кластеру Yandex Data Processing с созданной ВМ, настройте группы безопасности кластера.

  3. Подключитесь к ВМ по SSH:

    ssh -A <имя_пользователя>@<FQDN_ВМ>
    
  4. Скопируйте настройки репозитория с любого из хостов кластера Yandex Data Processing. Для этого выполните последовательность команд на созданной виртуальной машине.

    1. Скопируйте адрес репозитория:

      ssh ubuntu@<FQDN_хоста_кластера> \
      "cat /etc/apt/sources.list.d/yandex-dataproc.list" | \
      sudo tee /etc/apt/sources.list.d/yandex-dataproc.list
      
    2. Скопируйте gpg-ключ для верификации подписей deb-пакетов:

      ssh ubuntu@<FQDN_хоста_кластера> \
      "cat /srv/dataproc.gpg" | sudo apt-key add -
      
    3. Обновите кэш репозиториев:

      sudo apt update
      
  5. Установите необходимые пакеты:

    sudo apt install openjdk-8-jre-headless hadoop-client hadoop-hdfs spark-core spark-python
    

    Примечание

    Пакет spark-python необходим только для запуска заданий PySpark.

  6. Скопируйте конфигурационные файлы Hadoop и Spark:

    sudo -E scp -r \
        ubuntu@<FQDN_хоста_кластера>:/etc/hadoop/conf/* \
        /etc/hadoop/conf/ && \
    sudo -E scp -r \
        ubuntu@<FQDN_хоста_кластера>:/etc/spark/conf/* \
        /etc/spark/conf/
    
  7. Создайте пользователя sparkuser, от имени которого будут запускаться задания:

    sudo useradd sparkuser && \
    ssh ubuntu@<FQDN_хоста_кластера> "
      hadoop fs -mkdir /user/sparkuser
      sudo -u hdfs hdfs dfs -chown sparkuser:sparkuser /user/sparkuser
      sudo -u hdfs hdfs dfs -ls /user/sparkuser
    "
    

Запуск заданияЗапуск задания

Spark-задание
PySpark-задание
  1. Запустите задание с помощью команды:

    sudo -u sparkuser spark-submit \
         --master yarn \
         --deploy-mode cluster \
         --class org.apache.spark.examples.SparkPi \
             /usr/lib/spark/examples/jars/spark-examples.jar 1000
    

    Результат:

    20/04/19 16:43:58 INFO client.RMProxy: Connecting to ResourceManager at rc1b-dataproc-m-ds7lj5gnnnqggbqd.mdb.yandexcloud.net/  10.13.13.18:8032
    20/04/19 16:43:58 INFO client.AHSProxy: Connecting to Application History server at rc1b-dataproc-m-ds7lj5gnnnqggbqd.mdb.yandexcloud.net/10.13.13.18:10200
    20/04/19 16:43:58 INFO yarn.Client: Requesting a new application from cluster with 4 NodeManagers
    ...
    20/04/19 16:43:58 INFO yarn.Client: Preparing resources for our AM container
    20/04/19 16:43:58 INFO yarn.Client: Uploading resource file:/usr/lib/spark/examples/jars/spark-examples.jar -> hdfs://  rc1b-dataproc-m-ds7lj5gnnnqggbqd.mdb.yandexcloud.net/user/sparkuser/.sparkStaging/application_1586176069782_0003/  spark-examples.jar
    20/04/19 16:43:58 INFO yarn.Client: Uploading resource file:/etc/spark/conf/hive-site.xml -> hdfs://  rc1b-dataproc-m-ds7lj5gnnnqggbqd.mdb.yandexcloud.net/user/sparkuser/.sparkStaging/application_1586176069782_0003/hive-site.  xml
    20/04/19 16:43:58 INFO yarn.Client: Uploading resource file:/tmp/spark-6dff3163-089b-4634-8f74-c8301d424567/  __spark_conf__8717606866210190000.zip -> hdfs://rc1b-dataproc-m-ds7lj5gnnnqggbqd.mdb.yandexcloud.net/user/sparkuser/.  sparkStaging/application_1586176069782_0003/__spark_conf__.zip
    20/04/19 16:44:00 INFO yarn.Client: Submitting application application_1586176069782_0003 to ResourceManager
    20/04/19 16:44:00 INFO impl.YarnClientImpl: Submitted application application_1586176069782_0003
    20/04/19 16:44:01 INFO yarn.Client: Application report for application_1586176069782_0003 (state: ACCEPTED)
    20/04/19 16:44:01 INFO yarn.Client:
       client token: N/A
       diagnostics: AM container is launched, waiting for AM container to Register with RM
       ApplicationMaster host: N/A
       ApplicationMaster RPC port: -1
       queue: default
       start time: 1587314639386
       final status: UNDEFINED
       tracking URL: http://rc1b-dataproc-m-ds7lj5gnnnqggbqd.mdb.yandexcloud.net:8088/proxy/application_1586176069782_0003/
       user: sparkuser
    20/04/19 16:44:05 INFO yarn.Client: Application report for application_1586176069782_0003 (state: RUNNING)
    20/04/19 16:44:05 INFO yarn.Client:
       client token: N/A
       diagnostics: N/A
       ApplicationMaster host: rc1b-dataproc-d-9cd9yoenm4npsznt.mdb.yandexcloud.net
       ApplicationMaster RPC port: 41648
       queue: default
       start time: 1587314639386
       final status: UNDEFINED
       tracking URL: http://rc1b-dataproc-m-ds7lj5gnnnqggbqd.mdb.yandexcloud.net:8088/proxy/application_1586176069782_0003/
       user: sparkuser
    20/04/19 16:44:06 INFO yarn.Client: Application report for application_1586176069782_0003 (state: RUNNING)
    20/04/19 16:44:07 INFO yarn.Client: Application report for application_1586176069782_0003 (state: RUNNING)
    20/04/19 16:44:08 INFO yarn.Client: Application report for application_1586176069782_0003 (state: RUNNING)
    20/04/19 16:44:09 INFO yarn.Client: Application report for application_1586176069782_0003 (state: FINISHED)
    20/04/19 16:44:09 INFO yarn.Client:
       client token: N/A
       diagnostics: N/A
       ApplicationMaster host: rc1b-dataproc-d-9cd9yoenm4npsznt.mdb.yandexcloud.net
       ApplicationMaster RPC port: 41648
       queue: default
       start time: 1587314639386
       final status: SUCCEEDED
       tracking URL: http://rc1b-dataproc-m-ds7lj5gnnnqggbqd.mdb.yandexcloud.net:8088/proxy/application_1586176069782_0003/
       user: sparkuser
    20/04/19 16:44:09 INFO util.ShutdownHookManager: Shutdown hook called
    20/04/19 16:44:09 INFO util.ShutdownHookManager: Deleting directory /tmp/spark-6dff3163-089b-4634-8f74-c8301d424567
    20/04/19 16:44:09 INFO util.ShutdownHookManager: Deleting directory /tmp/spark-826498b1-8dec-4229-905e-921203b7b1d0
    
  2. Проверьте статус выполнения с помощью утилиты yarn application:

    yarn application -status application_1586176069782_0003
    

    Результат:

    20/04/19 16:47:03 INFO client.RMProxy: Connecting to ResourceManager at rc1b-dataproc-m-ds7lj5gn********.mdb.yandexcloud.net/10.13.13.18:8032
    20/04/19 16:47:03 INFO client.AHSProxy: Connecting to Application History server at rc1b-dataproc-m-ds7lj5gn********.mdb.yandexcloud.net/10.13.13.18:10200
    Application Report :
        Application-Id : application_1586176069782_0003
        Application-Name : org.apache.spark.examples.SparkPi
        Application-Type : SPARK
        User : sparkuser
        Queue : default
        Application Priority : 0
        Start-Time : 1587314639386
        Finish-Time : 1587314647621
        Progress : 100%
        State : FINISHED
        Final-State : SUCCEEDED
        Tracking-URL : rc1b-dataproc-m-ds7lj5gn********.mdb.yandexcloud.net:18080/history/application_1586176069782_0003/1
        RPC Port : 41648
        AM Host : rc1b-dataproc-d-9cd9yoen********.mdb.yandexcloud.net
        Aggregate Resource Allocation : 141510 MB-seconds, 11 vcore-seconds
        Aggregate Resource Preempted : 0 MB-seconds, 0 vcore-seconds
        Log Aggregation Status : SUCCEEDED
        Diagnostics :
        Unmanaged Application : false
        Application Node Label Expression : <Not set>
        AM container Node Label Expression : <DEFAULT_PARTITION>
        TimeoutType : LIFETIME    ExpiryTime : UNLIMITED    RemainingTime : -1seconds
    
  3. Просмотрите журналы со всех запущенных контейнеров с помощью утилиты yarn logs:

    sudo -u sparkuser yarn logs \
         -applicationId application_1586176069782_0003 | grep "Pi is"
    

    Результат:

    Pi is roughly 3.14164599141646
    
  1. На виртуальной машине создайте файл month_stat.py со следующим кодом:

    import sys
    
    from pyspark import SparkContext, SparkConf
    from pyspark.sql import SQLContext
    
    def main():
        conf = SparkConf().setAppName("Month Stat - Python")
        conf.set("fs.s3a.aws.credentials.provider", "org.apache.hadoop.fs.s3a.AnonymousAWSCredentialsProvider")
        sc = SparkContext(conf=conf)
    
        sql = SQLContext(sc)
        df = sql.read.parquet("s3a://yc-mdb-examples/dataproc/example01/set01")
        defaultFS = sc._jsc.hadoopConfiguration().get("fs.defaultFS")
        month_stat = df.groupBy("Month").count()
        month_stat.repartition(1).write.format("csv").save(defaultFS+"/tmp/month_stat")
    
    if __name__ == "__main__":
            main()
    
  2. Скопируйте файл month_stat.py на хосте-мастере кластера:

    sudo -E scp month_stat.py <имя_пользователя>@<FQDN_хоста_кластера>:~/month_stat.py
    

    Для образа 2.0 укажите пользователя ubuntu, для образа 1.4 — root.

  3. Запустите приложение:

    sudo -u sparkuser spark-submit \
         --master yarn \
         --deploy-mode cluster \
         month_stat.py
    
  4. Результат работы приложения будет выгружен в HDFS на кластере. Список получившихся файлов можно вывести командой:

    ssh <имя_пользователя>@<FQDN_хоста_кластера> "hdfs dfs -ls /tmp/month_stat"
    

    Для образа 2.0 укажите пользователя ubuntu, для образа 1.4 — root.

Примечание

Вы можете просматривать логи выполнения заданий и искать в них информацию с помощью сервиса Yandex Cloud Logging. Подробнее см. в разделе Работа с логами.

Была ли статья полезна?

Предыдущая
Запуск Spark-приложений
Следующая
Использование Object Storage в Yandex Data Processing
Проект Яндекса
© 2025 ООО «Яндекс.Облако»