Работа с пользовательским образом
В этой лабораторной работе вы обработаете данные с помощью пользовательского образа Spark.
Постановка задачи
Построить витрину данных, объединяющую информацию о заказах из двух таблиц.
Найти среднюю стоимость заказа.
Подсчитать расхождение суммы каждого заказа со средней стоимостью заказа.
Чтобы выполнить задачу, необходимо подготовить пользовательский образ и Python-скрипт. Пользовательский образ включает библиотеки для работы с S3 и библиотеку NumPy. Cкрипт выполняет действия с данными.
Перед началом работы
Зарегистрируйтесь в личном кабинете Cloud.ru.
Если вы уже зарегистрированы, войдите под своей учетной записью.
Создайте публичный SNAT-шлюз, чтобы обеспечить инстансу доступ в интернет и связь с внешними источниками.
Создайте секрет в сервисе Secret Manager для доступа к Spark UI.
Создайте бакет Object Storage, в котором будут храниться логи, таблицы и скрипт.
Создайте сервисный аккаунт с ролями:
ar.registry.viewer — если планируете добавить пользовательский образ Spark.
s3e.viewer и s3e.editor — если планируете использовать Evolution Object Storage.
Создайте реестр Artifact Registry, в котором будет храниться пользовательский образ Spark.
Создайте инстанс Spark
Перейдите в раздел Evolution и выберите сервис Managed Spark.
Нажмите Создать инстанс.
В блоке Общие параметры укажите название инстанса, например spark-image.
В блоке Конфигурация оставьте значения по умолчанию.
В блоке Настройки:
Место хранения — выберите Object Storage.
Бакет — выберите ранее созданный бакет S3.
В поле Группа логов выберите группу логов.
Нажмите Продолжить.
В блоке Сетевые настройки:
Подсеть — выберите подсеть для инстанса Spark.
Группа безопасности — выберите группу безопасности по умолчанию.
В блоке Настройки доступа:
Подключить публичный хост — активируйте переключатель.
Логин — задайте логин для доступа к Spark.
Пароль — выберите секрет для доступа к Spark.
Нажмите Создать.
Создание инстанса занимает около 15 минут. Пока создается инстанс, выполните шаги по подготовке структуры бакета Object Storage, данных и скрипта.
Подготовьте файл CSV
Скачайте CSV-таблицы client-spark-image.csv и sales-spark-image.csv. Нажмите Скачать в правом верхнем углу.
В файловом менеджере Object Storage создайте папку input и загрузите CSV-таблицы.
Подготовьте скрипт
Скопируйте скрипт и назовите файл script-spark-image.py.
Python-скриптВ девятой строке скрипта замените your-bucket-name на название бакета Object Storage.
В файловом менеджере Object Storage создайте папку jobs и загрузите скрипт.
В результате должна получиться следующая структура:
<bucket>
input
sales-spark-image.csv
client-spark-image.csv
jobs
script-spark-image.py
Подготовьте образ в Artifact Registry
Создайте образ в формате Docker.
FROM apache/spark:3.5.0-scala2.12-java11-python3-ubuntu# add S3 libsRUN curl https://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk-bundle/1.12.262/aws-java-sdk-bundle-1.12.262.jar -o /opt/spark/jars/aws-java-sdk-bundle-1.12.262.jarRUN curl https://repo1.maven.org/maven2/org/apache/hadoop/hadoop-aws/3.3.4/hadoop-aws-3.3.4.jar -o /opt/spark/jars/hadoop-aws-3.3.4.jarARG spark_uid = rootUSER ${spark_uid}# install compartible numpy versionRUN pip install numpy == 1 .21.6В сервисе Artifact Registry:
Создайте задачу
Для продолжения работы убедитесь, что статус инстанса Spark изменился на «Готов».
В списке инстансов Managed Spark откройте карточку инстанса «spark-image».
Перейдите на вкладку Задачи.
Нажмите Создать задачу.
В блоке Общие параметры введите название задачи, например spark-image-sales.
В блоке Образ:
Выберите Пользовательский.
Под полем URI образа нажмите Выбрать из реестра и выберите добавленный ранее образ.
В блоке Скрипт приложения выберите Python.
Укажите путь к запускаемой программе. В данном случае путь s3a://{bucket_name}/jobs/script-spark-image.py, где {bucket_name} — название созданного бакета Object Storage.
Нажмите Создать.
Задача Spark начнет выполняться и отобразится на странице инстанса на вкладке Задачи.
Мониторинг выполнения задачи
Вы можете посмотреть логи задачи, когда задача находится в статусах «Выполняется» и «Готово», то есть как в процессе выполнения, так и по завершению задачи.
Перейдите к логам
Откройте карточку инстанса.
Во вкладке Задачи скопируйте ID задачи.
Нажмите
и выберите Перейти к логам.
В поле Запрос введите labels.spark_job_id="ID", где ID — идентификатор задачи, скопированный ранее.
Нажмите Обновить.
В таблице отобразятся логи задачи. Нажмите на строку, чтобы развернуть запись.
Перейдите в Spark UI
Откройте карточку инстанса.
Во вкладке Задачи нажмите Spark UI.
В соседней вкладке откроется интерфейс Spark UI.
Вернитесь на карточку инстанса и откройте вкладку Информация.
Скопируйте данные из блока Настройки доступа.
Введите данные инстанса:
Username — значение поля Пользователь.
Password — значение секрета в поле Пароль.
В интерфейсе Spark UI вы найдете информацию о ходе выполнения задачи.
Проверьте результат
Когда задача перейдет в статус «Выполнено», откройте файловый менеджер Object Storage.
В бакете появится новая папка output. В ней хранится сводная таблица данных.
- Постановка задачи
- Перед началом работы
- Создайте инстанс Spark
- Подготовьте файл CSV
- Подготовьте скрипт
- Подготовьте образ в Artifact Registry
- Создайте задачу
- Мониторинг выполнения задачи
- Проверьте результат