我有一个带有1个主节点,30个核心节点和一些自动缩放任务节点的AWS EMR集群。现在,Oozie正在群集上运行数百个Hive和mysql作业。我将把一些工作从Oozie换成Airflow。我用谷歌搜索将Airflow应用于集群。我发现所有dag应该位于每个节点上,并且必须在所有节点上安装Airflow Worker。但是,我的dag将被频繁更新,新的dag将被频繁添加,但是节点的数量大约为100,甚至使用了自动缩放的节点。而且,如您所知,只有主节点在群集上具有hive / mysql应用程序。所以我很困惑。谁能告诉我将气流架构应用于我的EMR集群?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在将Apache Airflow应用于您的AWS EMR集群时,确实需要考虑DAG的部署、更新以及与Hive和MySQL等服务的交互。以下是一种推荐的架构设计,以简化管理和维护:
单独的Airflow管理节点:不建议在每个EMR节点上安装Airflow Worker。而是应该有一个或多个独立的Airflow服务器(可以是EC2实例或者使用Kubernetes部署),这些服务器托管Airflow Webserver和Scheduler。这使得DAG的管理、更新变得集中且高效。
DAG存储:使用版本控制系统(如Git)来存储DAG文件,并通过Webhook或其他CI/CD流程自动同步到Airflow管理节点。这样,当DAG有更新或新增时,只需更新Git仓库,即可自动部署到Airflow服务器。
使用EMR Hooks and Operators:Airflow提供了多种Hooks和Operators来与AWS服务集成,包括与EMR交互的。例如,EmrCreateJobFlowOperator
用于创建新的EMR集群,而EmrAddStepsOperator
则可以用来向现有集群添加Hive或Pyspark作业步骤。这意味着您不需要在每个节点上运行Airflow Worker,而是从Airflow管理节点远程触发EMR上的任务。
访问Hive和MySQL:对于与Hive和MySQL的交互,可以通过Airflow的HiveOperator
和MySqlOperator
来实现。这些操作会直接通过网络调用与EMR主节点上的Hive Metastore和外部MySQL数据库通信,无需在每个节点上安装特定软件。
使用Celery Executor:如果您的工作负载非常大,可能需要采用Celery Executor配置Airflow,它允许你设置一个或多个Worker节点来执行任务。这些Worker可以是按需启动的EC2实例,也可以是Kubernetes Pod,根据工作负载动态扩展。
Lambda或Step Functions:对于更复杂的调度逻辑或基于事件的触发,可以结合使用AWS Lambda或Step Functions来与Airflow协同工作,实现更细粒度的控制和自动化。
通过上述架构,您可以有效地将Airflow集成到现有的EMR环境中,同时保持DAG的管理集中化、易于更新,并确保与Hive和MySQL的交互顺畅。这种设计不仅提高了系统的可维护性,也充分利用了云原生服务的弹性伸缩能力。