码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Apache Airflow (十) :SSHOperator及调度远程Shell脚本


    🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客

     🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。

     🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频


    目录

    1. 安装“apache-airflow-providers-ssh ”provider package

    2. 配置SSH Connection连接

    3. 准备远程执行脚本

    4. 编写DAG python配置文件

    5. 调度python配置脚本


    在实际的调度任务中,任务脚本大多分布在不同的机器上,我们可以使用SSHOperator来调用远程机器上的脚本任务。SSHOperator使用ssh协议与远程主机通信,需要注意的是SSHOperator调用脚本时并不会读取用户的配置文件,最好在脚本中加入以下代码以便脚本被调用时会自动读取当前用户的配置信息:

    1. #Ubunto系统
    2. . ~/.profile
    3. #CentoOS或者RedHat系统
    4. . ~/.bashrc

    关于SSHOperator参数详解可以参照:

    airflow.providers.ssh.operators.ssh — apache-airflow-providers-ssh Documentation

    SSHOperator的常用参数如下:

    1. ssh_conn_id(str):ssh连接id,名称自取,需要在airflow webserver界面配置,具体配置参照案例。
    2. remote_host(str):远程连接节点host,如果配置,可替换ssh_conn_id中配置的远程host,可选。
    3. command(str):在远程主机上执行的命令或脚本。

    按照如下步骤来使用SSHOperator调度远程节点脚本:

    1. 安装“apache-airflow-providers-ssh ”provider package

    首先停止airflow webserver与scheduler,在node4节点切换到python37环境,安装ssh Connection包。另外,关于Providers package安装方式可以参照如下官网地址:

    https://airflow.apache.org/docs/apache-airflow-providers/packages-ref.html#apache-airflow-providers-ssh

    1. #切换Python37环境
    2. [root@node4 ~]# conda activate python37
    3. #安装ssh provider package
    4. (python37) [root@node4 ~]# pip install apache-airflow-providers-ssh==2.1.1
    5. #启动airflow
    6. (python37) [root@node4 ~]# airflow webserver --port 8080
    7. (python37) [root@node4 ~]# airflow scheduler

    2. 配置SSH Connection连接

    登录airflow webui ,选择“Admin”->“Connections”:

    点击“+”添加连接,这里host连接的是node5节点:

    3. 准备远程执行脚本

    在node5节点/root路径下创建first_shell.sh,内容如下:

    1. #!/bin/bash
    2. echo "==== execute first shell ===="

    在node3节点/root路径下创建second_shell.sh,内容如下:

    1. #!/bin/bash
    2. echo "==== execute second shell ===="

    4. 编写DAG python配置文件

    注意在本地开发工具编写python配置时,需要用到SSHOperator,需要在本地对应的python环境中安装对应的provider package。

    1. C:\Users\wubai>d:
    2. D:\>cd d:\ProgramData\Anaconda3\envs\python37\Scripts
    3. d:\ProgramData\Anaconda3\envs\python37\Scripts>pip install apache-airflow-providers-ssh==2.1.1

    python配置文件:

    1. from datetime import datetime, timedelta
    2. from airflow import DAG
    3. from airflow.operators.bash import BashOperator
    4. from airflow.providers.ssh.operators.ssh import SSHOperator
    5. default_args = {
    6.     'owner':'lisi',
    7.     'start_date':datetime(2021, 9, 23),
    8.     'retries': 1,  # 失败重试次数
    9.     'retry_delay': timedelta(minutes=5) # 失败重试间隔
    10. }
    11. dag = DAG(
    12.     dag_id = 'execute_remote_shell',
    13.     default_args=default_args,
    14.     schedule_interval=timedelta(minutes=1)
    15. )
    16. first=SSHOperator(
    17.     task_id='first',
    18.     ssh_conn_id='ssh-node5',# 配置在Airflow webui Connection中配置的SSH Conn id
    19.     command='sh /root/first_shell.sh ',
    20.     dag = dag
    21. )
    22. second=SSHOperator(
    23.     task_id='second',
    24.     ssh_conn_id='ssh-node5',# 配置在Airflow webui Connection中配置的SSH Conn id
    25.     command='sh /root/second_shell.sh ',
    26.     remote_host="192.168.179.6",#如果配置remote_host ,将会替换Connection中的SSH 配置的host
    27.     dag=dag
    28. )
    29. first >> second

    5. 调度python配置脚本

    将以上配置好的python文件上传至node4节点$AIRFLOW_HOME/dags下,重启Airflow websever与scheduler,登录webui,开启调度:

    调度结果如下:


  • 相关阅读:
    【自动驾驶】路径规划—— Dubins 曲线推导(基于向量的方法)
    方圆的秒杀系统优化方案实战,(十)Kafka实现异步削峰
    解决跨域问题的FastAPI应用及常见报错解析
    C#,二分图(Bipartite Graph)最佳二分匹配(Maximum Bipartite Matching)算法与源程序
    C#程序中很多ntdll.dll、clr.dll的线程
    JS闭包的应用场景
    [13]javascript的类型检测的方法
    [管理与领导-110]:IT人看清职场中的隐性规则 - 7 - 十二条职场真相
    双十一不踩雷的好物怎么选,几款最值得入手的好物推荐
    “她经济”崛起,茉莉智慧如何以科技赋能月子中心迭代升级?
  • 原文地址:https://blog.csdn.net/qq_32020645/article/details/134459074
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号