Mac通过docker一键部署airflow
Airflow部署及使用
由于工作中需要使用airflow进行开发,网上搜索“mac系统在docker中搭建airflow”的文章真的很少,而且写的又不够详细。遂自己摸索搭建成功后便分享给大家使用,即有按部就班“一步一步”的操作,也有“一键初始化”脚本,大家根据自己的实际情况进行操作。
1、Dockerhub查看镜像地址
# 如果你比较懒可以使用最后的“airflow一键初始化脚本”,mac电脑通用
https://hub.docker.com/r/puckel/docker-airflow/tags?page=1&ordering=last_updated
2、拉取docker镜像
# 执行镜像下载命令
docker pull puckel/docker-airflow:latest
3、在宿主机创建外挂文件夹
# 获取当前系统的用户名,例如:jason
echo $USER
# 执行上述命名将得到的用户名替换在 $USER 的位置
sudo mkdir -p -v /data/docker/volumes/airflow/{dags,logs} && sudo chown -R $USER /data/docker/volumes/airflow/{dags,logs}
4、创建docker容器
# 创建容器
docker run -p 8080:8080 -v /data/docker/volumes/airflow/dags:/usr/local/airflow/dags -v /data/docker/volumes/airflow/logs:/usr/local/airflow/logs --name airflow -d puckel/docker-airflow:latest
命令说明:
-d puckel/docker-airflow:latest #交互运行容器,让容器以守护态(daemonized)形式在后台运行
--name airflow #给新创建的容器命名即容器别名,如:airflow
-p 8080:8080 #端口映射,此处映射主机8080端口到容器airflow的8080端口
-v /data/docker/volumes/airflow/airflow.cfg:/usr/local/airflow/airflow.cfg #挂载主配置文件
-v /data/docker/volumes/airflow/dags:/usr/local/airflow/dags #挂载资源路径
-v /data/docker/volumes/airflow/logs:/usr/local/airflow/logs #挂载日志文件
5、重新创建docker容器
此步骤主要是将容器中的airflow.cfg拷贝出来,方便airflow.cfg后续修改;
5.1、查看airflow容器是否正常启动
# 查看容器是否正常,如 running 即启动成功
docker inspect airflow | jq -r '.[].State.Status'
5.2、启动成功才能将容器中的airflow.cfg拷贝出来修改
#1、查看容器ID,例如:$container_id
docker ps -a | grep 'airflow' |awk '{print $1}'
#2、使用docker拷贝(命令参考,可忽略):docker cp source_path target_path
docker cp $container_id:/usr/local/airflow/airflow.cfg /data/docker/volumes/airflow
#3、拷贝airflow.cfg到指定目录,命令集成(推荐用,一键搞定省心)
sudo docker cp $(docker ps -a | grep 'airflow' |awk '{print $1}'):/usr/local/airflow/airflow.cfg /data/docker/volumes/airflow
5.3、删除容器重新创建,非删除镜像
此步骤主要是将/usr/local/airflow/airflow.cfg外挂到宿主机中
#1、删除容器示例:docker stop $image_alias && docker rm $image_alias
docker stop airflow && docker rm airflow
#2、重新创建docker容器
docker run -p 8080:8080 -v=/data/docker/volumes/airflow/airflow.cfg:/usr/local/airflow/airflow.cfg -v=/data/docker/volumes/airflow/dags:/usr/local/airflow/dags -v=/data/docker/volumes/airflow/logs:/usr/local/airflow/logs --name airflow -d puckel/docker-airflow:latest
#3、查看容器airflow挂载到宿主机的地址
docker inspect airflow | jq -r '.[].HostConfig.Binds'
#4、查看容器是否正常
docker ps
6、进入docker容器
docker exec -it airflow /bin/bash
-d:分离模式,在后台运行
-i:交互模式,即使没有附加也保持 STDIN 打开
-t:分配一个伪终端
/bin/bash:运行命令 bash shell
7、sqlite数据库初始化
(生产不建议使用,但可用于个人测试。生产推荐使用mysql,如果使用mysql可以跳过sqlite部分)
#1、使用默认的sqlite+SequentialExecutor启动
airflow initdb
#2、出现错误:
airflow.exceptions.AirflowException: Could not create Fernet object: Incorrect padding
#3、解决办法:
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
#4、将第3步执行的结果替换到export中
export AIRFLOW__CORE__FERNET_KEY=第3步执行的结果
#5、重新执行初始化数据库命令
airflow initdb
#6、启动成功后,即可正常访问
http://localhost:8080/admin/
8、修改airflow的airflow.cfg配置
提供手动修改和命令行修改的功能
#1、查看docker中mysql的IP地址,替换在如下的IP地址中
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql
#2、手动修改(使用命令行修改可跳过此步)
executor = LocalExecutor
# 示例:sql_alchemy_conn="mysql://${USER}:${PASSWORD}@${HOST}:${PORT}/${DB_INSTANCE}${DB_EXTRAS}"
sql_alchemy_conn = mysql://airflow:airflow@172.17.0.2:3306/airflow
#3、命令行修改(使用手动修改可跳过此步)
sudo sed -i \"\" 's/executor = SequentialExecutor/executor = LocalExecutor/g' /data/docker/volumes/airflow/airflow.cfg
sudo sed -i \"\" 's/\# sql_alchemy_conn = sqlite:\/\/\/\/tmp\/airflow.db/sql_alchemy_conn = mysql:\/\/airflow:airflow\@172.17.0.2:3306\/airflow/g' /data/docker/volumes/airflow/airflow.cfg
#4、查看修改是否成功
cat /data/docker/volumes/airflow/airflow.cfg | grep 'executor ='
cat /data/docker/volumes/airflow/airflow.cfg | grep 'sql_alchemy_conn'
9、mysql数据库初始化
部署方式:docker+airflow+mysql+LocalExecutor
9.1、查看docker中mysql的IP地址
如果你的mysql也是安装在docerk中的话,则最好操作如下命令:
# 查看docker中mysql的IP地址,主要用于mysql创建新用户授权时使用,
# 命令中的 mysql 是docker中安装数据库时的别名,请根据实际情况自行修改
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql
9.2、登录mysql并创建专属的airflow数据库
#新建名字为<airflow>的数据库
CREATE DATABASE airflow;
#1、新建用户`airflow`,密码为`airflow`, 该用户对数据库`airflow`有完全操作权限
#2、将9.1步骤执行命令行的结果替换在 $IPAddress 的位置,也可以将IP最后一位换成%,例如:172.17.0.%
GRANT all privileges on airflow.* TO 'airflow'@'$IPAddress' IDENTIFIED BY 'airflow';
FLUSH PRIVILEGES;
# 查看授权(常用操作指令可不执行)
select host,user from mysql.`user` where user='airflow';
# 删除授权(常用操作指令可不执行)
DROP USER 'airflow'@'$IPAddress';
9.3、修改mysql的my.cnf配置
# 由于airflow初始化数据库时需要用到如下参数,请自行添加
[mysqld]
explicit_defaults_for_timestamp = 1
9.4、初始化mysql数据库
# 1、进入docker容器
docker exec -it airflow /bin/bash
# 2、先执行数据库重置命令,再执行数据库初始化命令
airflow reset
airflow initdb
# 3、出现错误:
airflow.exceptions.AirflowException: Could not create Fernet object: Incorrect padding
# 4、解决办法:
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
# 5、将第3步执行的结果替换到export中
export AIRFLOW__CORE__FERNET_KEY=第3步执行的结果
# 6、查看环境变量是否设置成功
echo $AIRFLOW__CORE__FERNET_KEY
# 7、重新执行初始化数据库命令
airflow initdb
# 8、启动成功后,即可正常访问
http://localhost:8080/admin/
10、airflow一键初始化脚本
注意:执行《一键初始化脚本》时需要先配置mysql环境和创建airflow数据库用户,即如下操作;
1、先执行9.1、9.2、9.3等步骤的操作,执行完成后请检查是否正确;
2、先启动airflow容器,然后再执行9.4步骤的操作;
3、执行完成后即可访问:http://localhost:8080/admin/
Mac通过docker一键部署airflow的更多相关文章
- mac通过docker一键部署Jenkins
目录 mac通过docker一键部署Jenkins 一.前言 二.系统配置 三.安装步骤 Dockerhub查看镜像地址 1.一键安装 1.1.下载脚本 1.2.安装程序 1.2.1.安装程序详情 1 ...
- mac通过docker一键部署MySQL8
目录 mac通过docker一键部署MySQL8 一.前言 二.系统配置 三.安装步骤 Dockerhub查看镜像地址 1.一键安装 1.1.克隆脚本 1.2.安装程序 1.2.1.安装程序详情 1. ...
- mac通过docker一键部署Nexus3
目录 mac通过docker一键部署Nexus3 一.前言 二.系统配置 三.安装步骤 1.Dockerhub查看镜像地址 2.一键安装 2.1.克隆脚本 2.2.安装程序 2.2.1.程序安装详情 ...
- Docker一键部署Hadoop心得(一)
最近一直在折腾使用docker一键部署全分布式hadoop集群,虽然一键部署的脚本写好了并且可以成功运行出各个节点,但在运行一个wordcount实例时出现了错误,错误如下: java.io.IOEx ...
- 使用Docker 一键部署 LNMP+Redis 环境
使用Docker 部署 LNMP+Redis 环境 Docker 简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linu ...
- 基于Docker一键部署大规模Hadoop集群及设计思路
一.背景: 随着互联网的发展.互联网用户的增加,互联网中的数据也急剧膨胀.每天产生的数据量数以万计,本地文件系统和单机CPU已无法满足存储和计算要求.Hadoop分布式文件系统(HDFS)是海量数据存 ...
- RabbitMQ集群 Docker一键部署
以下内容来自网络转载 步骤1. 安装docker 以centos7为例,https://docs.docker.com/engine/installation/linux/centos/ 步骤2. 创 ...
- Docker一键部署Hadoop心得(二)
今天在运行MapReduce程序时,虽然wordcount实例运行成功了,但后面出现了重新使用历史服务器失败的错误 17/12/22 13:33:19 INFO ipc.Client: Retryin ...
- docker一键部署zookeeper
version: '3.1' services: zoo1: image: zookeeper:3.4.11 restart: always hostname: zoo1 container_name ...
随机推荐
- Choreographer全解析
前言 今天继续屏幕刷新机制的知识讲解,上文说到vsync的处理,每一帧UI的绘制前期处理都在Choreographer中实现,那么今天就来看看这个神奇的舞蹈编舞师是怎么将UI变化反应到屏幕上的. 代码 ...
- swack的wiki站上线
swack的个人wiki网址:www.swack.cn [服务器破旧,速度较慢,见谅!]
- phpstorm 注册码破解
激活码1 812LFWMRSH-eyJsaWNlbnNlSWQiOiI4MTJMRldNUlNIIiwibGljZW5zZWVOYW1lIjoi5q2j54mIIOaOiOadgyIsImFzc2ln ...
- HP PROLIANT DL388 GEN10 (故障3019)SPP损坏
HP PROLIANT DL388 GEN10 (故障3019)SPP损坏 1. 开机硬件自检,提示错误ERROR 3019: 2. 根据服务器版本GEN10下载最新固件SPP,可找服务商或者HP售后 ...
- 【SpringBoot1.x】SpringBoot1.x 任务
SpringBoot1.x 任务 文章源码 异步任务 在 Java 应用中,绝大多数情况下都是通过同步的方式来实现交互处理的.但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使 ...
- 【JDBC核心】批量插入
批量插入 批量执行 SQL 语句 当需要成批插入或者更新记录时,可以采用 Java 的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理.通常情况下比单独提交处理更有效率. JDBC 的批量 ...
- 【C++】《C++ Primer 》第七章
第七章 类 一.定义抽象数据类型 类背后的基本思想:数据抽象(data abstraction)和封装(encapsulation). 数据抽象是一种依赖于接口(interface)和实现(imple ...
- C++ 中的 inline 详解
inline:是一个关键词,放在一个函数前面,说明这个函数是inline函数. inline函数是什么?inline有什么作用? 为了解答这个问题,我们首先要知道编译器是如何为我们工作的. 先看一段代 ...
- service代理模式及负载均衡
[root@k8s-master ~]# vim service.yaml apiVersion: v1 kind: Service metadata: name: my-service spec: ...
- hive窗口函数/分析函数详细剖析
hive窗口函数/分析函数 在sql中有一类函数叫做聚合函数,例如sum().avg().max()等等,这类函数可以将多行数据按照规则聚集为一行,一般来讲聚集后的行数是要少于聚集前的行数的.但是有时 ...