摘要:Airflow是一个使用Python语言编写的分布式调度平台,通过DAG(Directed acyclic graph 有向无环图)来管理任务。

本文分享自华为云社区《分布式调度平台Airflow在华为云MRS中的实践》,作者: 啊喔YeYe 。

介绍

Airflow是一个使用Python语言编写的分布式调度平台,通过DAG(Directed acyclic graph 有向无环图)来管理任务,不需要知道业务数据的具体内容,设置任务的依赖关系即可实现任务调度。其平台拥有和Hive、Presto、MySQL、HDFS、Postgres等数据源之间交互的能力,并且提供了hook,使其拥有很好地扩展性。

MapReduce服务提供租户完全可控的企业级大数据集群云服务,可轻松运行Hadoop、Spark、HBase、Kafka、Storm等大数据组件。Airflow对接MapReduce服务后,可依靠Airflow平台提供的命令行界面和一个基于Web的用户界面,可以可视化管理依赖关系、监控进度、触发任务等

环境准备

  • 在华为云购买弹性云服务器ECS,用于安装运行Airflow,并绑定弹性公网IP,用于访问公网安装Airflow服务
  • 已开通MRS 3.x普通集群
  • 弹性云服务器ECS的虚拟私有云和安全组需与MRS普通集群一致,其公共镜像建议选择CentOS 8.2 64bit

安装Airflow

1. 登录已购买的Linux弹性云服务器,执行以下命令升级pip版本

pip3 install --upgrade pip==20.2.4

2. 安装Airflow以及创建登录Airflow的admin用户

使用vim 脚本名.sh新建脚本,写入如下内容并保存,使用sh 脚本名.sh执行脚本,执行完成后会创建登录Airflow的admin用户,并输入密码完成创建。本脚本会完成Airflow的安装以及创建登录Airflow的admin用户。脚本含义见注释。

# airflow needs a home, ~/airflow is the default,
# but you can lay foundation somewhere else if you prefer
# (optional)
export AIRFLOW_HOME=~/airflow AIRFLOW_VERSION=2.0.1
PYTHON_VERSION="$(python3 --version | cut -d " " -f 2 | cut -d "." -f 1-2)"
# For example: 3.6
CONSTRAINT_URL="https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-${PYTHON_VERSION}.txt"
# For example: https://raw.githubusercontent.com/apache/airflow/constraints-2.0.1/constraints-3.6.txt
pip install "apache-airflow==${AIRFLOW_VERSION}" --constraint "${CONSTRAINT_URL}" # initialize the database
airflow db init airflow users create \
--username admin \
--firstname Peter \
--lastname Parker \
--role Admin \
--email spiderman@superhero.org

3.执行以下命令启动Airflow WebServer

airflow webserver --port 8080 -D

4. 执行以下命令启动Airflow Scheduler

airflow scheduler -D

5. 访问Airflow WebUI

在本地浏览器输入“http://ECS弹性IP:8080”网址,进入Airflow WebUI登录界面

登录之后:

提交spark作业至MRS

1. 参考安装客户端在运行Airflow的弹性云服务器ECS上安装MRS客户端

例如安装客户端到/opt/client目录下,安装命令:

sh ./install.sh /opt/client/ -o chrony

2. 在安装Airflow的目录下新建目录"dags"

如Airflow安装目录是“/root/airflow”,新建目录“/root/airflow/dags”

3. 新建提交Spark作业的Python脚本

在新建目录下使用vim 脚本名.py新建python脚本并保存,脚本内容如下:

from datetime import timedelta
from airflow import DAG
from airflow.operators.bash import BashOperator
from airflow.operators.dummy import DummyOperator
from airflow.utils.dates import days_ago args = {
'owner': 'airflow',
} dag = DAG(
dag_id='spark-pi',
default_args=args,
start_date=days_ago(200),
schedule_interval='@once',
dagrun_timeout=timedelta(minutes=300),
tags=['spark'],
) run_this = BashOperator(
task_id='run_on_yarn',
# 其他组件命令参考MRS组件开发指南,将任务提交或运行命令替换到bash_command变量
bash_command='source /opt/client/bigdata_env;spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster /opt/client/Spark2x/spark/examples/jars/spark-examples_2.11-2.4.5-hw-ei-302023.jar 10',
#bash_command='echo "run"; echo 0 >> /tmp/test',
dag=dag,
) run_this

4. 登录Airflow WebUI,单击“spark-pi”左侧的开关按钮,然后单击右侧的三角按钮运行

5. 登录Manager页面,选择“集群 > 服务 > Yarn > 概览”

6. 步单击“ResourceManager WebUI”后面对应的链接,进入Yarn的WebUI页面,查看Spark任务是否运行

点击关注,第一时间了解华为云新鲜技术~

解读分布式调度平台Airflow在华为云MRS中的实践的更多相关文章

  1. 华为云MRS支持lakeformation能力,打造一站式湖仓,释放数据价值

    摘要:对云端用户而言,业务价值发现是最重要的,华为MRS支持LakeFormation后,成功降低了数据应用的成本,帮助客户落地"存"与"算"的管理,加快推进了 ...

  2. Elastic-Job 分布式调度平台

    概述 referred:http://elasticjob.io/docs/elastic-job-lite/00-overview Elastic-Job是一个分布式调度解决方案,由两个相互独立的子 ...

  3. 中国DevOps平台市场,华为云再次位居领导者位置

    摘要:华为云软件开发生产线DevCloud在市场份额和发展战略两大维度均排名第一,再次位居领导者位置. 9月21日 ,国际权威分析师机构IDC发布<IDC MarketScape: 中国 Dev ...

  4. 华为云 MRS 基于 Apache Hudi 极致查询优化的探索实践

    背景 湖仓一体(LakeHouse)是一种新的开放式架构,它结合了数据湖和数据仓库的最佳元素,是当下大数据领域的重要发展方向. 华为云早在2020年就开始着手相关技术的预研,并落地在华为云 Fusio ...

  5. 华为云的API调用实践(python版本)

    一.结论: 1.华为云是符合openstack 社区的API,所以,以社区的API为准.社区API见下面的链接. https://developer.openstack.org/api-ref/net ...

  6. 华为云函数中使用云数据库的JavaScript SDK基础入门

    背景介绍 使用云数据库Server端的SDK,此处我以华为提供的官方Demo为例,他们的Demo也已经开源放在了GitHub上,大家需要的可以自行下载. https://github.com/AppG ...

  7. 分布式调度平台XXL-JOB源码分析-执行器端

    上一篇文章已经说到调度中心端如何进行任务管理及调度,本文将分析执行器端是如何接收到任务调度请求,然后执行业务代码的. XxlJobExecutorApplication为我们执行器的启动项,其中有个X ...

  8. 分布式调度平台XXL-JOB源码分析-调度中心

    架构图 上图是我们要进行源码分析的2.1版本的整体架构图.其分为两大块,调度中心和执行器,本文先分析调度中心,也就是xxl-job-admin这个包的代码. 关键bean 在application.p ...

  9. 分布式调度平台XXL-JOB源码分析-时序图

    整体流程 初始化 任务调度 任务执行 任务回调 注册心跳

  10. 全链路压测平台(Quake)在美团中的实践

    背景 在美团的价值观中,以“客户为中心”被放在一个非常重要的位置,所以我们对服务出现故障越来越不能容忍.特别是目前公司业务正在高速增长阶段,每一次故障对公司来说都是一笔非常不小的损失.而整个IT基础设 ...

随机推荐

  1. UVA1104 Chips Challenge(费用流)

    神仙费用流题,理解了一下午,故写此篇题解以作纪念. 题意 有一个 \(N\times N\) 的棋盘,有些格子不能放棋子,有些格子必须放棋子,剩下的格子随意.要求放好棋子之后满足: 第 \(i\) 行 ...

  2. 一个类似于Gridster的栅格布局系统Vue组件

    哈喽,我是老鱼,一名致力于在技术道路上的终身学习者.实践者.分享者! Vue Grid Layout是一个类似于Gridster的栅格布局系统, 适用于Vue.js,灵感来源于React Grid L ...

  3. http1.x,http2.0,https分别介绍以及他们的区别

    一.HTTP/1.x Http1.x 缺陷:线程阻塞,在同一时间,同一域名的请求有一定数量限制,超过限制数目的请求会被阻塞 http1.0 缺陷:浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要 ...

  4. PostgreSQL 序列(Sequence)

    基本操作 --新增序列 CREATE SEQUENCE xxx_id_seq INCREMENT 1 -- 一次加多少 MINVALUE 1 -- 最小值 START 1 --从多少开始 CACHE ...

  5. 手把手教你如何扩展(破解)mybatisplus的sql生成

    mybatisplus 的常用CRUD方法 众所周知,mybatisplus提供了强大的代码生成能力,他默认生成的常用的CRUD方法(例如插入.更新.删除.查询等)的定义,能够帮助我们节省很多体力劳动 ...

  6. AcWing 456. 车站分级

    原题链接AcWing 456. 车站分级 抽象出题意,停靠过的车站的等级一定严格大于为停靠过的车站的等级,且不存在环,例如车站\(A\)等级大于车站\(B\),则\(A >= B + 1\),不 ...

  7. Nginx自定义日志中时间格式

    背景 工作需要对接内部的日志中台,对日志打印有固定的格式要求,为了使Nginx的access日志也能被采集,需要对日志格式进行自定义,要求日志格式为: yyyy-MM-dd HH:mm:ss.SSS ...

  8. 【开源】int,long long去一边去:高精度大合集!

    加法 \(add\) string add(string s1, string s2) { //时间复杂度 O(log n) string res = ""; int c = 0, ...

  9. 使用OSS搭建私有云内网yum仓库的方法

    版权声明:原创作品,谢绝转载!否则将追究法律责任. ----- 作者:kirin 使用OSS搭建私有云内网yum仓库的方法 文字&图片内容已脱敏 #.前几天接到一个搭建内网yum源的任务.刚接 ...

  10. HBuilderx 创建 、运行uniapp项目

    uni-app官网介绍的 通过 HBuilderX 可视化界面 跟着小颖来创建一个自己的小程序 创建小程序 依次点击HBuilderx 左上方的按钮:文件->新建->项目 然后打开该界面, ...