Кластер EKS не может получить доступ к файлам s3a при использовании spark-submit. Как это решить?

Я пытаюсь запустить искровое задание на кластере EKS, заставляя его создать 5 рабочих узлов для выполнения этой работы. Все работает отлично, кроме доступа к исполняемому файлу jar в AWS S3, который должен быть запущен. Вот мой код

apiVersion: batch/v1beta1 kind: CronJob metadata: name: project namespace: spark spec: schedule: "48 15 * * *" #min hour day month week \ will be "00 04 * * *" maybe jobTemplate: spec: template: spec: serviceAccountName: spark-service-acc containers: - name: project image: 1234567890.dkr.ecr.us-east-1.amazonaws.com/spark:latest command: ["/bin/sh", "-c", "date && \ cd /opt/spark/jars/ && \ wget http://repo1.maven.org/maven2/org/apache/hadoop/hadoop-aws/3.1.1/hadoop-aws-3.1.1.jar && \ wget http://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk-core/1.11.396/aws-java-sdk-core-1.11.396.jar && \
cd ~ && \ YESTERDAY=TZ=GMT+24 date +%Y.%m.%d && \ / opt / spark / bin / spark-submit \ --deploy-mode k8s: // https://abcdef0123456789.y99.us-east-1.eks.amazonaws.com/ \ --deploy-mode cluster \ --class com.enterprise.project.MainClass \ --conf 'spark.executor.instances=5' \ --conf 'spark.kubernetes.container.image=1234567890.dkr.ecr.us-east-1.amazonaws.com/spark: последний ' \ --conf 'spark.kubernetes.namespace=spark' \ --conf 'spark.kubernetes.authenticate.driver.serviceAccountName=spark-service-acc' \ --conf 'spark.executorEnv.ENVIRONMENT=$(ENVIRONMENT)' \ --conf 'spark.executorEnv.AWS_ACCESS_KEY_ID=$(AWS_ACCESS_KEY_ID)' \ --conf 'spark.executorEnv. $ (ENVIRONMENT)' \ --conf 'spark.kubernetes.driverEnv.AWS_ACCESS_KEY_ID=$(AWS_ACCESS_KEY_ID)' \ --conf 'spark.kubernetes.driverEnv.AWS_SECRET_ACCESS_KEY=$($) \.fs.s3a.impl=org.apache.hadoop.fs.s3a.S3AFileSystem"
--conf 'spark.hadoop.fs.s3a.access.key=$(AWS_ACCESS_KEY_ID)' --conf 'spark.hadoop.fs.s3a.secret.key=$(AWS_SECRET_ACCESS_KEY)' --driver-class-path /opt/spark/jars/aws-java-sdk-core-1.11.396.jar --driver-class-path /opt/spark/jars/hadoop-aws-3.1.1.jar s3a://abc123/executetable-file.jar \ my-исполняемый-файл-с-3-параметрами $YESTERDAY s3a://abc123 esserver.abc.com:9200 && sleep 600" ] env: # все поля, указанные ниже, должны быть переданы под секретным"env-vars" - имя: ENVIRONMENT valueFrom: secretKeyRef: имя: env-vars ключ: окружение - имя: AWS_ACCESS_KEY_ID valueFrom: secretKeyRef: имя: env-vars ключ: aws-access-key-id - имя: AWS_SECRET_ACCESS_KEY valueFrom: nameKeyRR ключ env-vars: ключ aws-secret-access-restartPolicy: никогда

Сообщение об ошибке "Не удалось найти основной на com.enterprise.project.MainClass". Это сообщение происходит, потому что код не может получить доступ к файлу JAR. Я знаю это, потому что код работает, когда я делаю файл jar общедоступным и использую http, чтобы получить файл jar.

Как ни странно, когда исполняемый файл запускается в my-executable-file-with-3-params $YESTERDAY s3a://abc123 esserver.abc.com:9200 где второй аргумент s3a://abc123 это место для записи выходных файлов из исполнения. Эта операция записи работает правильно (когда я использую http для доступа к исполняемому файлу). Эта корзина такая же, как корзина, которая содержит исполняемый файл, к которому, как уже упоминалось, нельзя получить доступ через S3A.

Такое странное поведение может быть вызвано тем, что в исполняемом файле есть jar-файлы hadoop, которые хорошо управляют чтением и записью. Так что это приводит к моим предположениям о том, что конфигурация hadoop / aws почему-то не работает. Я могу подтвердить, что ключ доступа и секретный ключ, заданные в качестве переменных среды, являются правильными, как и имена сегментов.

Теперь, как можно получить доступ к этому файлу JAR? Как я могу устранить эту проблему (возможно, проблема конфигурации hadoop)?

0 ответов

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