EMR без сервера с использованием Docker- как установить файлы JAR

Я пытаюсь установить EMR без сервера, для чего у меня есть два варианта.

  1. Использование сценария Terraform, который позволил мне выбрать начальный размер, максимальный объем памяти и т. д., однако у меня нет возможности установить файлы jar / внешние библиотеки
  2. Использование образа докера, который не позволяет мне выбрать начальный размер, максимальную память и т. д.
  3. Я думаю об использовании сценария terraform в докере, однако я не знаю, как установить на него файлы JAR. Может кто-нибудь поделиться мыслями.

Также мои библиотеки внутренние и написаны на JAVA/Scala

ТЮ

Я пробовал докер, а также TF

1 ответ

Во-первых, я думаю, было бы неплохо пояснить, чем EMR Serverless отличается от других вариантов развертывания EMR. EMR Serverless состоит из двух основных компонентов:

  1. Бессерверное приложение EMR — это тип платформы (Hive/Spark), версия (EMR 6.9.0 / Spark 3.3.0) и свойства приложения, включая архитектуру (x86 или arm64), сеть (VPC или нет), пользовательские образы и рабочие размеры.
  2. Задания — это конкретный код для вашего задания, включая файлы JAR или зависимости среды выполнения, а также конкретную роль IAM с разрешениями, специфичными для самого задания.

Нет кластера для установки, а инфраструктура (приложение) обычно отделена от отправки задания. Если у вас есть только одна банка, которая является вашей работой, вы должны загрузить ее на S3 и включить в качестве--entrypointвашей команде и укажите основной класс с помощью--class.

      aws emr-serverless start-job-run \
    --application-id application-id \
    --execution-role-arn job-role-arn \
    --job-driver '{
        "sparkSubmit": {
            "entryPoint": "s3://<BUCKET>/jars/spark-examples.jar",
            "entryPointArguments": ["1"],
            "sparkSubmitParameters": "--class org.co.YourMainClass"
        }
    }'

Тем не менее, похоже, что вы хотите включить в свою работу дополнительные банки. У вас есть два варианта:

  1. Создайте собственное изображение , включающее эти банки в путь, включенный Spark, например/usr/lib/spark.
  2. Включите банки с отправкой задания , либо загрузив их на S3 и указав путь к ним с помощью параметра, либо, если они доступны в Maven, указав зависимости с помощью параметра.

Для варианта 1, когда вы создаете новое приложение (в котором вы определяете рабочие размеры), вы включаете пользовательское изображение, которое хотите использовать. Например, следующая команда CLI создает приложение с пользовательским образом (--image-configuration), а также предварительно инициализированную рабочую конфигурацию (--initial-capacity):

      aws emr-serverless create-application \
    --release-label emr-6.9.0 \
    --type SPARK \
    --image-configuration '{
        "imageUri": "aws-account-id.dkr.ecr.region.amazonaws.com/my-repository:tag/@digest"
    }' \
  --initial-capacity '{
    "DRIVER": {
        "workerCount": 5,
        "workerConfiguration": {
            "cpu": "2vCPU",
            "memory": "4GB"
        }
    },
    "EXECUTOR": {
        "workerCount": 50,
        "workerConfiguration": {
            "cpu": "4vCPU",
            "memory": "8GB"
        }
    }
  }'

Для варианта 2, если у вас есть только один uberjar, который вы хотите использовать в своей работе, вы загружаете его на S3 и предоставляете в качестве точки входа вstart-job-runкоманда:

      aws emr-serverless start-job-run \
    --application-id <APPLICATION_ID> \
    --execution-role-arn <JOB_ROLE_ARN> \
    --job-driver '{
        "sparkSubmit": {
            "entryPoint": "s3://<S3_BUCKET>/code/java-spark/java-demo-1.0.jar",
            "sparkSubmitParameters": "--class HelloWorld"
        }
    }'

Если вы хотите указать зависимости maven, вы можете использовать--packagesвsparkSubmitParameters:

      "sparkSubmitParameters": "--packages org.postgresql:postgresql:42.4.0"

Если вы загружаете дополнительные jar-файлы в S3, вы также можете указать их с помощью--jarsвариант.

      "sparkSubmitParameters": "--jars s3://<S3_BUCKET>/jars/uber-jar-1.0-SNAPSHOT.jar"

Дополнительную информацию об этих параметрах можно найти в репозитории emr-serverless-samples на GitHub .

Другие вопросы по тегам