本文将通过一个实际的例子来展示如何在互动地图上显示印度30个城市的天气数据。数据每5分钟自动更新,确保你的Streamlit仪表板总是显示最新的信息,而无需手动刷新页面。
此指南非常适合希望入门使用Airflow构建地理空间数据管道的人,并学习如何在Docker和Docker Compose中设置。
先来看一下,为了让你一睹我们将要构建的应用程序的风采,下面是一个最终应用程序的演示。
Apache Airflow 是一个帮助你管理并调度任务的工具,就像数据任务的待办事项一样。它让你可以创建并监控工作流,确保一切顺利并按时完成。你可以让它自动处理任务,从而无需手动完成。广泛应用于数据工程管道中,它就像是处理复杂数据流程的智能助手。更多详情,请参阅这里提供的链接:
什么是Airflow®? — Apache Airflow®文档页面Apache Airflow®是一个用于开发、调度以及监控批处理任务的开源平台……更多详情请访问 airflow.apache.org 为什么Airflow?你可能想知道为什么我们不直接从前端刷新应用的前端,特别是在我们使用天气 API 时。在这个例子中,天气 API 仅是为了简化说明,让用户专注于学习如何编排数据流。然而,实际上,数据通常来自多个来源,需要复杂的流程来处理和整合这些数据。
Apache Airflow 在管理数据工作流方面表现出色,能够高效地清洗、转换和聚合数据。这种分离数据处理与可视化的做法使系统更模块化且易于维护。Airflow 自动化更新过程,确保数据保持最新无需手动干预,并将资源密集型任务转移到专用服务器上,确保前端保持响应性。
此外,Airflow 提供了强大的错误处理和监控功能,使系统更加可靠且易于调试。其可扩展、灵活且高效的架构能够应对日益增长的数据需求,并无缝地整合新的数据源。虽然 Airflow 在数据工程领域得到广泛应用,但在地理空间领域中的应用仍刚刚起步。本指南旨在填补这个差距。
想更深入地理解的话,可以看看下面这个视频,它会一步步教你。
如何安装Apache Airflow(安装指南)使用 Docker 和 Docker Compose 是安装 Apache Airflow 最简单和最高效的方式。这些工具允许你在配置文件中定义所有所需服务,快速搭建 Airflow 环境,确保环境一致并简化安装过程。或者,你也可以在 Python 虚拟环境中使用 pip
,但这需要手动配置依赖和设置服务。对于许多用户而言,Docker 和 Docker Compose 提供了更顺畅且无忧的体验。
Docker 是一个平台工具,它让开发者可以创建、部署和运行应用程序于独立的容器中。容器打包应用程序及其所有依赖,确保应用程序在不同环境中稳定运行。这使得 Docker 成为了开发、测试和部署应用程序的重要工具。我推荐你参考这篇很棒的教程。
什么是 Docker Compose?Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。使用 Docker Compose,你可以用 YAML 文件配置应用程序的服务、网络和卷。这简化了管理多个容器的过程,并确保它们顺畅协作。
为什么要用 Docker 和 Docker Compose 来部署 Airflow?使用 Docker 和 Docker Compose 来搭建 Airflow 有几个好处:
- 隔离性:Airflow 的每个组件(如 web 服务器、调度器、数据库)都在自己的容器中运行,确保它们之间不会相互干扰。
- 一致性:容器确保 Airflow 在任何机器上都以相同的方式运行,解决了“在我的机器上可以运行”的问题。
- 扩展性:Docker 使得通过添加更多容器来容易扩展应用程序。
- 设置方便:Docker Compose 让你可以在一个文件中定义和管理所有需要的服务,从而简化了设置过程。
确保您的系统上已经安装了 Docker。如果没有的话,您可以查看Docker 安装指南 以获取更多详细信息。
本文假设你已经熟悉Python和GIS(地理信息系统)的相关概念。
项目概要在这个项目中,我们将搭建一个地理空间数据流管道,用于实时显示印度30个城市的天气数据,并在一个互动地图上展示。目标是帮助你理解项目中的每个组件以及它们如何交互,提供一个创建你自己的数据流管道的蓝图。
下面来一步步说明我们要做什么:
- 数据获取:我们将从外部API获取天气数据,处理数据并将其导出至CSV文件。这通过在Apache Airflow中创建一个有向无环图(DAG)来实现。
- 定时更新:DAG将被配置为每5分钟运行一次,确保天气数据一直是最新的,反映最新的天气情况。
- 互动地图可视化:我们将开发一个Streamlit应用程序来显示一个互动地图,该地图将可视化印度各地的天气数据。将使用Folium工具包创建此地图,每个城市将用表示温度的标记来表示。
- 实时更新:Streamlit应用程序将每5分钟自动刷新一次,允许用户查看最新天气信息而无需手动刷新页面。
该项目分为不同的目录,以帮助你理解项目结构,
以下是一些项目文件和目录结构:
应用程序/
├── 应用程序主文件 (app.py)
├── Dockerfile (用于构建Docker镜像的文件)
├── requirements.txt (项目依赖包的列表)
配置/
DAGs/
├── dag1.py (第一个DAG文件)
├── dag2.py (第二个DAG文件)
插件/
docker-compose.yaml (用于定义和运行多容器Docker应用程序的文件)
注意:目录名称保持英文以符合技术规范。
-
app/: 包含主要的应用程序文件,包括Streamlit应用程序和Docker配置。
-
config/: 存放着配置文件。
-
dags/: 包含Airflow有向无环图(DAGs),用于任务调度。
-
plugins/: 存放任何自定义的Airflow插件。
- docker-compose.yaml: 使用Docker来编排整个应用。
这些步骤和文件夹结构的目的是帮助用户理解项目设置的结构。一旦你克隆了这个仓库,所有都已经预先配置好了,所以你不必再重复接下来会详细解释的步骤。
开始吧要开始操作,请克隆代码库并按照提供的设置说明操作。
第一步:克隆代码库。首先,通过命令将代码库克隆到你自己的本地机器。
复制代码库并切换到该目录。
git clone https://github.com/kavyajeetbora/airflow_streamlit_orchestration.git
cd airflow_streamlit_orchestration.
第 2 步:设置你的天气 API 密钥
要获取实时天气数据,你得从OpenWeatherMap拿到一个API密钥。下面是如何设置的:
- 注册:在OpenWeatherMap网站上注册一个账户。
- 生成API密钥值:登录后,你可以导航到API部分并生成一个新的API密钥值。
- 配置您的应用程序:在
config/
文件夹中,请参照config/config_example.txt
文件中的格式,在您的API密钥中输入相应信息。在config
文件夹中创建自己的配置文件(config/config.cfg
),并将其保存,然后添加您的API密钥。 - 您可以参考以下步骤来生成API密钥:
接下来我们构建项目的 Docker 镜像。这一步初始化 Airflow 并配置好所需的环境,
docker-compose airflow-init # 初始化 Airflow(启动初始化脚本)
步骤 4:运行应用
最后一步是独立运行应用程序:
运行该命令:docker-compose up -d
访问应用:
设置完成后,你可以通过以下网址访问应用程序。
- Airflow Web UI: http://localhost:8080
- Streamlit Web UI: http://localhost:7751
通过按照这些步骤操作,你将拥有一套功能齐全的设置,其中Airflow负责编排数据管道流程,而Streamlit则在交互式地图上展示天气数据。此设置确保天气数据每5分钟更新一次天气数据,从而提供实时的洞察。
这边:运行在8080端口的Airflow Web服务器,那边:运行在7751端口的Streamlit应用
架构简介在结束本教程前,让我们仔细看看应用架构以及不同服务(如Airflow和Streamlit)是如何相互沟通的。这里是对设置好应用后架构的一个快速概述。
当你运行 Docker Compose 文件后,它会启动两个容器,每个容器都拥有独立的环境。本地文件系统作为共享数据空间,让容器能够无缝地共享文件。
- Airflow 容器:一旦 Airflow 容器启动并运行,它会从 API 获取天气数据,然后处理这些数据,并将处理后的数据导出为 CSV 格式保存至本地文件夹。
- Streamlit 容器:Streamlit 容器会访问该本地文件夹读取 CSV 文件,并在交互式地图上展示天气数据。
容器之间每5分钟进行一次通信,确保天气数据始终保持最新。如果你需要调整间隔,可以在 dags/weather_data_dag.py
文件中修改相应的时间安排。
理解了这种架构后,你会发现 Docker Compose 如何让 Airflow 和 Streamlit 交互更顺畅,形成一个高效的数据流。
结尾在这个教程里,我们讲了以下几个关键点:
- 项目启动:我们首先通过克隆仓库并在本地使用Docker和Docker Compose来设置应用。
- 了解架构:我们了解了Airflow和Streamlit容器如何通过本地文件系统进行数据共享。
- 数据管道:我们学到了如何获取、处理并每5分钟更新一次来自印度30个城市实时天气数据的可视化。
- Airflow和Docker:我们讨论了Airflow在编排工作流中的重要性,以及Docker和Docker Compose如何简化多容器应用部署和管理的流程。
这个教程可以作为一个起点,帮助你开始接触地理空间数据管道。按照教程中的步骤操作,你可以快速搭建一个功能性的应用,而不需要复杂的配置。这样的搭建可以作为更复杂项目的基础,让你能够专注于构建和创新而不是环境配置。
作为参考,随意使用本指南作为起点,并根据您的项目想法构建您自己的工作流。该项目的完整版本可在GitHub上找到。
GitHub - kavyajeetbora/real_time_weather_data: 使用Airflow编排Streamlit应用程序 - kavyajeetbora/real_time_weather_data如果你有任何疑问或需要进一步的帮助,随时联系我们。
编程愉快!
学习资料共同學習,寫下你的評論
評論加載中...
作者其他優質文章