尝试使用Teradata Vantage执行使用dbt的Airflow工作流程

作者:Igor Machin、Ambrose Inman
最新更新日期:2022年11月18日

警告
该文章是对Teradata Corporation网站上的”Getting Started”页面进行的摘译。我们不能保证所提供内容的准确性、完整性、可靠性和时效性。请参考原文获取准确的信息。
如果有需要修正的地方或者您有任何建议,请在评论中告知。

简明扼要的概述

在此教程中,我们将在AWS EC2 VM上安装Airflow,并配置工作流程以使用dbt,并说明如何在Teradata Vantage数据库上运行它。Airflow通常用于构建用于处理和加载数据的数据管道的任务调度工具。在此示例中,我们将执行基于Docker的Airflow环境的安装过程。安装Airflow后,我们将运行一些示例Airflow DAG(有向无环图,或简称为工作流),将数据加载到Teradata Vantage数据库中。

前提条件

拥有访问AWS(亚马逊云服务)并创建虚拟机的权限。

提示:
本教程提供的计算力和存储能力与此文档中介绍的机器(在AWS上的t2.2xlarge EC2,存储容量约为100GB)相当,并且只要连接到互联网,也可以在其他计算平台或裸金属机器上进行调整。如果使用其他计算平台,需要对本教程的某些步骤进行修改。

您需要一个SSH客户端。

提示:如果是Mac或Linux机器,这些工具已经包含在内。 如果是Windows机器,请考虑使用PuTTY或MobaXterm。

如果您需要访问Teradata Vantage实例,请参阅无费版的Teradata Vantage试用环境的构建方法(总结),如果您不使用Vantage。

安装并执行 Airflow。

创建一个虚拟机

1. 访问AWS EC2控制台,并点击”启动实例”。

选择 Red Hat 作为操作系统镜像。

选择实例类型为”t2.2xlarge”。

1. 创建新的密钥对,或使用现有的密钥对。

应用网络设置,使服务器能够通过ssh进行访问,并使服务器能够与互联网进行出站连接。通常情况下,应用默认设置。

分配 100GB 的存储空间。

Python的安装

使用ec2-user用户通过ssh连接到机器。

2.确认是否已安装Python(需要安装Python3.7或以上版本)。请在命令行输入”python”或”python3″。

如果未安装Python(即命令无法找到),请执行以下命令进行安装。命令可能会要求输入”y”以确认安装。

sudo yum install python3
# create a virtual environment for the project
sudo yum install python3-pip
sudo pip3 install virtualenv

構築空气流通环境

1.在ec2-user的主目录/home/ec2-user中创建Airflow的目录结构。

mkdir airflow
cd airflow
mkdir -p ./dags ./logs ./plugins ./data ./config ./data
echo -e "AIRFLOW_UID=$(id -u)" > .env

请使用您偏好的文件传输工具(如scp、PuTTY、MobaXterm等),将airflow.cfg文件上传到airflow/config目录中。

安装Docker

Docker是一个容器化工具,可以将Airflow安装在容器环境中。

备注
需要在airflow目录中执行此步骤。

1.卸载Podman(RHEL的容器化工具)。

sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
podman \
runc

2. 安装yum工具

sudo yum install -y yum-utils

3.在 yum 软件源中添加 Docker。

sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

安装Docker。

sudo yum install docker-ce docker-ce-cli containerd.io

使用以下的命令来作为服务启动Docker。第一条命令将会在下次系统启动时自动运行Docker服务。第二条命令将会立即启动Docker。

5.使用以下命令将Docker作为服务启动。第一个命令将在下次系统启动时自动运行Docker服务。第二个命令将立即启动Docker。

sudo systemctl enable docker
sudo systemctl start docker

6. 确认Docker是否已正确安装。此命令应该返回一个空的容器列表(因为还没有启动任何容器)。

sudo docker ps

安装docker-compose和docker环境配置文件。

请将docker-compose.yaml和Dockerfile上传到虚拟机并保存到airflow目录中。

提示
docker-compose.yaml和Dockerfile的作用
docker-compose.yaml和Dockerfile是安装时所需的配置环境的文件。docker-compose.yaml文件用于下载和安装Airflow的docker容器。该容器包括Web UI、用于元数据的Postgres数据库、调度程序、3个可以并行执行的工作器(执行3个任务)、触发器以及用于显示由dbt生成的文档的nginx Web服务器。此外,还会进行宿主目录的挂载和各种安装过程。Dockerfile用于在每个容器中安装所需的软件包。
如果想进一步了解docker-compose.yaml和Dockerfile的具体作用,请查看这些文件。其中还包含了注释,以明确说明为什么会安装这些内容。

2.安装Docker Compose(需要用来运行yaml文件)。

注意事项
本操作步骤基于版本1.29.2。请在https://github.com/docker/compose/releases上确认最新的发布版本,并根据需要更新以下命令。
sudo curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

3.我们来测试docker-compose的安装。该命令应该返回docker-compose的版本,例如:docker-compose version 1.29.2, build 5becea4c。

docker-compose --version

安装一个测试的dbt项目

备注:
dbt工具本身将通过docker-compose安装到容器中。

我要安装Git。

sudo yum install git

获取Jaffle店的DBT项目样本。

备忘录
dbt目录会在用户主目录下创建(不会在airflow目录下创建)。在这个例子中,主目录是/home/ec2-user。
# move to home dir
cd
mkdir dbt
cd dbt
git clone https://github.com/Teradata/jaffle_shop-dev.git jaffle_shop
cd jaffle_shop
mkdir target
chmod 777 target
echo '' > target/index.html
chmod o+w target/index.html

使用Teradata Studio Express、bteq等数据库工具,在Teradata数据库上创建airflowtest和jaffle_shop用户/数据库。以dbc身份登录数据库并执行命令(如有需要,请更改密码):

CREATE USER "airflowtest" FROM "dbc" AS PERM=5000000000 PASSWORD="abcd";
CREATE USER "jaffle_shop" FROM "dbc" AS PERM=5000000000 PASSWORD="abcd";

4.创建dbt的设置目录:

cd
mkdir .dbt

将profiles.yml复制到.dbt目录中。

为了适应Teradata数据库的设置,需要编辑文件。至少需要更改主机、用户名和密码。使用在步骤3中设置的jaffle_shop用户的认证信息。

使用Docker建立Airflow环境。

在包含Dockerfile和docker-compose.yaml的airflow目录中,执行Docker环境创建脚本。

cd ~/airflow
sudo docker-compose up --build

当安装完成后,屏幕上将显示以下消息:

airflow-webserver_1  | 127.0.0.1 - - [13/Sep/2022:00:20:48 +0000] "GET /health HTTP/1.1" 200 187 "-" "curl/7.74.0"

这表示Airflow Web服务器已准备好接受通话。

2.现在,Airflow应该已经启动了。由于安装过程中使用的终端会话用于显示日志消息,因此建议在后续步骤中打开另一个终端会话。确认Airflow的安装类型:

sudo docker ps

预计会有这样的结果:

CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES60d50d9f43f5apache/airflow:2.2.4″/usr/bin/dumb-init …”18 minutes agoUp 18 minutes (healthy)8080/tcpairflow_airflow-scheduler_1e2b46ec98274apache/airflow:2.2.4″/usr/bin/dumb-init …”18 minutes agoUp 18 minutes (healthy)8080/tcpairflow_airflow-worker_3_17b44004c7277apache/airflow:2.2.4″/usr/bin/dumb-init …”18 minutes agoUp 18 minutes (healthy)8080/tcpairflow_airflow-worker_1_14017b8ce9235apache/airflow:2.2.4″/usr/bin/dumb-init …”18 minutes agoUp 18 minutes (healthy)0.0.0.0:8080->8080/tcp, :::8080->8080/tcpairflow_airflow-webserver_13cc407e2d565apache/airflow:2.2.4″/usr/bin/dumb-init …”18 minutes agoUp 18 minutes (healthy)0.0.0.0:5555->5555/tcp, :::5555->5555/tcp, 8080/tcpairflow_flower_1340a83b202e3apache/airflow:2.2.4″/usr/bin/dumb-init …”18 minutes agoUp 18 minutes (healthy)8080/tcpairflow_airflow-triggerer_182198f0d8b84apache/airflow:2.2.4″/usr/bin/dumb-init …”18 minutes agoUp 18 minutes (healthy)8080/tcpairflow_airflow-worker_2_1382c3077c1e5redis:latest”docker-entrypoint.s…”18 minutes agoUp 18 minutes (healthy)6379/tcpairflow_redis_18a3be8d8a7f4nginx”/docker-entrypoint.…”18 minutes agoUp 18 minutes (healthy)0.0.0.0:4000->80/tcp, :::4000->80/tcpairflow_nginx_19ca888e9e8dfpostgres:13″docker-entrypoint.s…”18 minutes agoUp 18 minutes (healthy)5432/tcpairflow_postgres_1

选项:如果要删除Docker安装(例如,更新docker-compose.yaml和Dockerfile文件以重新创建其他环境),命令是(从包含这些文件的airflow目录中):

sudo docker-compose down --volumes --rmi all

当栈停止时,更新配置文件并执行步骤 1 的命令以进行重新启动。

要测试Airflow Web UI是否能正常工作,请在浏览器中输入以下URL,并将其替换为VM的外部IP地址:

DAG UI:http://:8080/home – 用户名:airflow / 密码:airflow

○ 花朵空气流 UI (ワーカーコントロール):http://:5555/ liú UI : http://:5555/)

执行Airflow DAG

请将 airflow_dbt_integration.py、db_test_example_dag.py、discover_dag.py、variables.json 文件复制到 /home/ec2-user/airflow/dags 目录下。

2. 检查文件:

○ db_test_example_dag.py – 这是一个简单的Teradata SQL示例,它创建了几个表并执行查询。

○ airflow_dbt_integration.py – 执行dbt与Airflow集成的示例(将dbt与Teradata数据库集成)。在此示例中,将创建并加载虚构的jaffle_shop数据模型,并创建此项目的文档(可以在浏览器中访问http://”YOUR VM_IP_ADDRESS”:4000/来查看)。

需要调整db_test_example_dag.py的重要性是更新db_test_example_dag.py,使Teradata数据库的IP地址指向您的数据库。

○ discover_dag.py – 这是一个示例,展示了如何读取不同类型的数据文件(CSV、Parquet、JSON)。源代码文件中包含了注释,说明程序的功能以及如何使用它。此示例依赖于variables.json文件,该文件需要导入到Airflow中。这将在后续步骤中完成。

这些dag文件将要等几分钟才能被Airflow工具捕获到。一旦这些文件被捕获,它们将会显示在Airflow首页的DAG列表中。

将variables.json文件作为变量文件导入Airflow。

点击管理员 → 变量(Variables)菜单项,进入变量页面。

image.png

点击”Choose File”,在文件资源管理器中选择”variable.json”,然后点击”Import Variables”。

image.png

请根据您的环境调整和编辑变量。

通过UI执行Doug功能,并检查日志。

总结

本教程旨在提供实践练习,包括如何在Linux服务器上安装Airflow环境以及如何使用Airflow与Teradata Vantage数据库进行交互。此外,还将提供有关如何集成Airflow和数据建模以及维护工具dbt,并示范如何创建和加载Teradata Vantage数据库的示例。

进一步详细了解

使用Teradata Vantage时,可使用dbt(数据构建工具)。

广告
将在 10 秒后关闭
bannerAds