Как отправить задания Spark в кластер EMR из Airflow? - PullRequest
0 голосов
/ 03 января 2019

Как установить соединение между главным кластером EMR (созданным Terraform) и Airflow. У меня настроен Airflow под сервером AWS EC2 с теми же SG, VPC и Subnet.

Мне нужны решения, чтобы Airflow мог общаться с EMR и выполнять отправку Spark.

https://aws.amazon.com/blogs/big-data/build-a-concurrent-data-orchestration-pipeline-using-amazon-emr-and-apache-livy/

У этих блогов есть понимание исполнения после того, как соединение было установлено. (Не сильно помогло)

В потоке воздуха я установил соединение, используя интерфейс для AWS и EMR: -

enter image description here

Ниже приведен код, в котором будут перечислены кластеры EMR, которые являются активными и прекращенными. Я также могу настроить активные кластеры: -

from airflow.contrib.hooks.aws_hook import AwsHook
import boto3
hook = AwsHook(aws_conn_id=‘aws_default’)
    client = hook.get_client_type(‘emr’, ‘eu-central-1’)
    for x in a:
        print(x[‘Status’][‘State’],x[‘Name’])

У меня вопрос: как я могу обновить свой код выше, может выполнять действия Spark-submit

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Несмотря на то, что он не может напрямую обращаться к вашему конкретному запросу, в целом, есть несколько способов, которыми вы можете активировать spark-submit on ( remote ) EMR через Airflow

  1. Использование Apache Livy

    • Это решение фактически не зависит от удаленного сервера, т. Е. EMR
    • Здесь пример
    • Недостатком является то, что Livy находится на ранних стадиях, и его API кажется неполным и wonky для меня
  2. Использование EmrSteps API

    • Зависит от удаленной системы: EMR
    • Надежный, но поскольку он по своей природе асинхронный , вам также понадобится EmrStepSensor (наряду с EmrAddStepsOperator)
    • В одном кластере EMR не может быть выполнено более одного шагаодновременно (хотя некоторые хаки обходные пути существуют)
  3. Используйте SSHHook / SSHOperator

    • Опять не зависит от удаленной системы
    • CoНамного проще начать работу с
    • Если ваша команда spark-submit содержит много аргументов, сборка этой команды (программно) может стать громоздкой

EDIT-1

Кажется, есть еще один простой способ

Указание удаленного master -IP


Полезные ссылки

0 голосов
/ 03 января 2019

Поскольку вы создали EMR с использованием Terraform, тогда вы получите мастер-IP как aws_emr_cluster.my-emr.master_public_dns

Надеюсь, это поможет.

...