簡體   English   中英

Airflow API 清除並重新運行任務時調用返回400

[英]Airflow API call returning 400 when clearing and rerunning a task

我正在設置一個運行少量數據塊筆記本的 Airflow 環境。 我已經使用創建集群的 PythonOperator 設置了一個 create_cluster 任務,提供權限並安裝所需的庫,所有這些都使用Databricks REST API 2.0

我在安裝庫的 API 調用中遇到問題。 當我觸發 DAG 運行時,一切正常。 同時,如果我正在清除 create_cluster 任務,庫 API 將返回 400 響應。 我什至不確定為什么會這樣。 PFB 我打的 api 電話:

response_lib = s.post('https://%s/api/2.0/libraries/install' % (DOMAIN),
        headers={'Authorization': 'Bearer %s' % TOKEN},
        json={
            "cluster_id": clusterid,
            "libraries": [
                {
                    "jar": "dbfs:/FileStore/jars/4092ccd0_a657_4de2_865a_6a413580bbcd-ojdbc8.jar"
                },
                {
                    "jar": "dbfs:/FileStore/jars/d4c36be6_f697_443e_84fd_179ce07e510a-fc98ca3a_e4c2_48de_8a76_63153afe6588_spark_salesforce_assembly_1_1_3_PR46_maxCharsPerColumn_c6b42-231af.jar"
                },
                {
                    "jar": "dbfs:/FileStore/jars/2e72bd30_5861_4f2f_ba94_b591b3c604b0-jars_a68bd7d7_5e75_493c_8720_c70ff3c1f58e_RedshiftJDBC42_1_2_12_1017_fefdf-6e9da.jar"
                },
                {
                    "maven": {
                        "coordinates": "com.springml:spark-salesforce_2.11:1.1.3"
                        }
                },
                {
                    "pypi": {
                        "package": "cx_Oracle"
                        }
                },
                {
                    "pypi": {
                        "package": "numpy==1.16.1"
                        }
                },
                {
                    "pypi": {
                        "package": "tabulate"
                        }
                },
                {
                    "pypi": {
                        "package": "pysftp"
                        }
                },
                {
                    "pypi": {
                        "package": "s3fs"
                        }
                },
                {
                    "pypi": {
                        "package": "regex"
                        }
                }
    
                ]
            }
        )
        
        if response_lib.status_code==200:
            print('Library installation response',response_lib)
        else:
            print("Libraries could not be installed")
            print(response_lib)
        

這是重試任務時print(response_lib)的 output: <Response [400]>

我正在使用由 AWS 管理的 Airflow。 有人可以幫我理解為什么會這樣。 Databricks 官方文檔Libraries API 2.0

解決了這個問題。 在調用安裝 API 之前,提供了 10 秒的延遲。 這似乎解決了這個問題。

代碼:

Event().wait(10)
response_lib = s.post('https://%s/api/2.0/libraries/install' % (DOMAIN),
        headers={'Authorization': 'Bearer %s' % TOKEN},
...........

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM