【问题标题】:AWS MWAA: Glue Crawler issueAWS MWAA:胶水爬虫问题
【发布时间】:2021-04-06 13:49:24
【问题描述】:

我手动配置了 Glue Crawler,现在正尝试通过 Airflow(在 AWS 中)运行它。

根据来自 here 的文档,与 Glue 环境中的其他任务相比,似乎有很多方法可以处理此目标。但是,我在处理这个看似简单的场景时遇到了问题。

以下代码定义了 Glue[Crawler]+Airflow 的基本设置。假设在它之前和之后定义了一些其他的工作任务,这里不包括。

run_crawler = AwsGlueCrawlerHook()
run_crawler.start_crawler(crawler_name="foo-crawler")

现在,这是一个示例流程:

json2parquet >> run_crawler >> parquet2redshift

鉴于这一切,Airflow Webserver UI 上出现以下错误:

Broken DAG: An error occurred (CrawlerRunningException) when calling the StartCrawler operation: Crawler with name housing-raw-crawler-crawler-b3be889 has already started

我明白了:为什么你不使用 start_crawler 方法以外的东西...?公平点,但我不知道还能用什么。我只想在 一些上游任务成功完成后启动爬虫,但我无法。

我应该如何解决这个问题

【问题讨论】:

    标签: amazon-web-services airflow aws-glue mwaa


    【解决方案1】:

    json2parquet >> run_crawler >> parquet2redshift

    在 Airflow 中,按位右移 Python 运算符 (>>) 用于定义 2 个运算符之间的下游关系(例如 BaseOperator)。

    Declaring a DAG > Task Dependencies (Airflow)

    run_crawler = AwsGlueCrawlerHook()
    run_crawler.start_crawler(crawler_name="foo-crawler")

    run_crawler (AwsGlueCrawlerHook) 不是运算符。它是BaseHook 的子类。 >>(和<<)Python 运算符可用于BaseOperator 子类的对象。

    airflow.hooks.base
    airflow.models.baseoperator

    我应该如何解决这个问题?

    run_crawler 需要实现为运算符(例如BaseOperator)。

    PythonOperator 是一种运算符。 GlueCrawlerOperator 在创建、更新和运行 Glue 爬虫方面功能更丰富。操作符是幂等的。例如,如果已经存在同名爬虫,则运营商将运行它。否则,它将创建它。

    GlueCrawlerOperator (Airflow)

    【讨论】:

      【解决方案2】:

      这个问题是因为我缺乏气流知识而出现的。使用PythonOperator 并将上述功能封装在该对象中解决了这个问题。例如,可行的方法如下所示:

      def glue_crawler_parquet2redshift():
          run_crawler = AwsGlueCrawlerHook()
          return run_crawler.start_crawler(crawler_name="housingGlueCrawlerParquetRaw")
      
      glue_crawler_parquet2redshift_task = PythonOperator(
          task_id='ingestHousingRawParquet',
          python_callable=glue_crawler_parquet2redshift,
          dag=housing_dag,
          )
      

      【讨论】:

        猜你喜欢
        • 2023-01-23
        • 2019-10-31
        • 2020-07-20
        • 2021-01-09
        • 2019-11-17
        • 2018-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多