web-dev-qa-db-fra.com

Airflow SparkSubmitOperator - Comment envoyer des étincelles sur un autre serveur

Je suis nouveau sur Airflow et Spark et je me bats avec le SparkSubmitOperator .

Notre planificateur de flux d'air et notre cluster hadoop ne sont pas installés sur la même machine ( première question: est-ce une bonne pratique? ).

Nous avons de nombreuses procédures automatiques qui doivent appeler des scripts pyspark. Ces scripts pyspark sont stockés dans le cluster hadoop (10.70.1.35). Les creux de flux d'air sont stockés dans la machine à flux d'air (10.70.1.22).

Actuellement, lorsque nous voulons lancer un script pyspark avec airflow, nous utilisons un simple BashOperator comme suit:

cmd = "ssh [email protected] spark-submit \
   --master yarn \
   --deploy-mode cluster \
   --executor-memory 2g \
   --executor-cores 2 \
   /home/hadoop/pyspark_script/script.py"
t = BashOperator(task_id='Spark_datamodel',bash_command=cmd,dag=dag)

Cela fonctionne parfaitement bien. Mais nous aimerions commencer à utiliser SparkSubmitOperator pour spark soumettre nos scripts pyspark ).

J'ai essayé ceci:

from airflow import DAG
from datetime import timedelta, datetime
from airflow.contrib.operators.spark_submit_operator import 
SparkSubmitOperator
from airflow.operators.bash_operator import BashOperator
from airflow.models import Variable

dag = DAG('SPARK_SUBMIT_TEST',start_date=datetime(2018,12,10), 
schedule_interval='@daily')


sleep = BashOperator(task_id='sleep', bash_command='sleep 10',dag=dag)

_config ={'application':'[email protected]:/home/hadoop/pyspark_script/test_spark_submit.py',
    'master' : 'yarn',
    'deploy-mode' : 'cluster',
    'executor_cores': 1,
    'EXECUTORS_MEM': '2G'
}

spark_submit_operator = SparkSubmitOperator(
    task_id='spark_submit_job',
    dag=dag,
    **_config)

sleep.set_downstream(spark_submit_operator) 

La syntaxe doit être correcte car le dag n'apparaît pas comme cassé. Mais quand il s'exécute, il me donne l'erreur suivante:

[2018-12-14 03:26:42,600] {logging_mixin.py:95} INFO - [2018-12-14 
03:26:42,600] {base_hook.py:83} INFO - Using connection to: yarn
[2018-12-14 03:26:42,974] {logging_mixin.py:95} INFO - [2018-12-14 
03:26:42,973] {spark_submit_hook.py:283} INFO - Spark-Submit cmd: 
['spark-submit', '--master', 'yarn', '--executor-cores', '1', '--name', 
'airflow-spark', '--queue', 'root.default', 
'[email protected]:/home/hadoop/pyspark_script/test_spark_submit.py']
[2018-12-14 03:26:42,977] {models.py:1760} ERROR - [Errno 2] No such 
file or directory: 'spark-submit'
Traceback (most recent call last):
      File "/home/dataetl/anaconda3/lib/python3.6/site- 
   packages/airflow/models.py", line 1659, in _run_raw_task    
    result = task_copy.execute(context=context)
      File "/home/dataetl/anaconda3/lib/python3.6/site- 
   packages/airflow/contrib/operators/spark_submit_operator.py", line 
168, 
    in execute
        self._hook.submit(self._application)
      File "/home/dataetl/anaconda3/lib/python3.6/site- 
   packages/airflow/contrib/hooks/spark_submit_hook.py", line 330, in 
submit
        **kwargs)
      File "/home/dataetl/anaconda3/lib/python3.6/subprocess.py", line 
707, 
    in __init__
        restore_signals, start_new_session)
      File "/home/dataetl/anaconda3/lib/python3.6/subprocess.py", line 
    1326, in _execute_child
        raise child_exception_type(errno_num, err_msg)
    FileNotFoundError: [Errno 2] No such file or directory: 'spark-submit'

Voici mes questions:

  1. Dois-je installer spark hadoop sur ma machine à circulation d'air? Je demande parce que dans ce sujet J'ai lu que je dois copier hdfs-site.xml et Hive-site.xml. Mais comme vous pouvez l'imaginer, je n'ai ni /etc/hadoop/ ni /etc/Hive/ répertoires sur ma machine airflow.

  2. a) Si non , où dois-je exactement copier hdfs-site.xml et Hive-site.xml sur ma machine à circulation d'air?

  3. b) Si oui , cela signifie-t-il que je dois configurer ma machine à flux d'air en tant que client? Une sorte de nœud Edge qui ne participe pas aux travaux mais peut être utilisé pour soumettre des actions?

  4. Puis-je pouvoir spark-submit depuis ma machine airflow? Si oui, je n'ai pas besoin de créer une connexion sur Airflow comme je le fais pour une base de données mysql par exemple, non?

  5. Oh et la cerise sur le gâteau: vais-je pouvoir stocker mes scripts pyspark dans ma machine à airflow et spark-submit les à partir de cette même machine à circulation d'air. Ce serait super!

Tout commentaire serait très utile, même si vous n'êtes pas en mesure de répondre à toutes mes questions ...

Merci d'avance quand même! :)

6
V. Foy

Pour répondre à votre première question, oui c'est une bonne pratique.

Pour savoir comment utiliser SparkSubmitOperator, veuillez vous référer à ma réponse sur https://stackoverflow.com/a/53344713/5691525

  1. Oui , vous avez besoin de binaires à étincelles sur la machine à circulation d'air.
  2. -
  3. Oui
  4. Non -> Vous avez toujours besoin d'une connexion pour indiquer à Airflow où avez-vous installé vos fichiers spark binaires. Similaire à - https://stackoverflow.com/a/50541640/5691525
  5. Devrait marcher
7
kaxil