AWS MWAA:Glue Crawler 问题
AWS MWAA: Glue Crawler issue
我已经手动配置了一个 Glue Crawler,现在正尝试通过 Airflow(在 AWS 中)运行它。
根据 here 的文档,与 Glue 环境中的其他任务相比,似乎有很多方法可以处理此 objective。但是,我在处理这个看似简单的场景时遇到了问题。
以下代码定义了 Glue[Crawler]+Airflow 的基本设置。假设在它之前和之后定义了一些其他的工作任务,这里不包括。
run_crawler = AwsGlueCrawlerHook()
run_crawler.start_crawler(crawler_name="foo-crawler")
现在,这是一个示例流程:
json2parquet >> run_crawler >> parquet2redshift
考虑到所有这些,Airflow Web 服务器上出现以下错误 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
方法以外的方法...?公平点,但我不知道还能使用什么。我只想在一些上游任务成功完成但无法完成后启动爬虫。
我该如何解决这个问题?
出现这个问题是因为我缺乏 Airflow 知识。使用 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,
)
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
How should I resolve this problem?
run_crawler
需要作为运算符实现(例如BaseOperator
)。
PythonOperator
是一种运算符。 GlueCrawlerOperator
在创建、更新和 运行 安装 Glue 爬虫方面更 feature-rich。运算符以幂等方式执行。例如,如果已经存在同名的爬虫,运营商将运行它。否则,它将创建它。
我已经手动配置了一个 Glue Crawler,现在正尝试通过 Airflow(在 AWS 中)运行它。
根据 here 的文档,与 Glue 环境中的其他任务相比,似乎有很多方法可以处理此 objective。但是,我在处理这个看似简单的场景时遇到了问题。
以下代码定义了 Glue[Crawler]+Airflow 的基本设置。假设在它之前和之后定义了一些其他的工作任务,这里不包括。
run_crawler = AwsGlueCrawlerHook()
run_crawler.start_crawler(crawler_name="foo-crawler")
现在,这是一个示例流程:
json2parquet >> run_crawler >> parquet2redshift
考虑到所有这些,Airflow Web 服务器上出现以下错误 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
方法以外的方法...?公平点,但我不知道还能使用什么。我只想在一些上游任务成功完成但无法完成后启动爬虫。
我该如何解决这个问题?
出现这个问题是因为我缺乏 Airflow 知识。使用 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,
)
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
How should I resolve this problem?
run_crawler
需要作为运算符实现(例如BaseOperator
)。
PythonOperator
是一种运算符。 GlueCrawlerOperator
在创建、更新和 运行 安装 Glue 爬虫方面更 feature-rich。运算符以幂等方式执行。例如,如果已经存在同名的爬虫,运营商将运行它。否则,它将创建它。