運行 DAG 時在任務日志中收到以下錯誤:
FileNotFoundError: [Errno 2] 沒有這樣的檔案或目錄: 'beeline': 'beeline'
這是我的 DAG:
import airflow
from airflow import DAG
from airflow.providers.apache.hive.operators.hive import HiveOperator
from airflow.utils.dates import days_ago
from datetime import timedelta
default_args = {
'owner': 'airflow',
'depends_on_past': False,
'start_date': airflow.utils.dates.days_ago(2),
'email': ['[email protected]'],
'email_on_failure': False,
'email_on_retry': False,
'retries': 1,
'retry_delay': timedelta(minutes=5)
}
dag_data_summarizer = DAG(
dag_id="data_summarizer",
default_args=default_args,
description='Data summarizer DAG',
schedule_interval='*/20 * * * *',
start_date=airflow.utils.dates.days_ago(1)
)
hql_query = """create database if not exist new_test_db;"""
hive_task = HiveOperator(
hql=hql_query,
task_id="data_retrieval",
hive_cli_conn_id="new_hive_conn",
dag=dag_data_summarizer,
run_as_user="airflow" # airflow user has beeline executable set in PATH
)
if __name__ == '__main__':
dag_data_summarizer.cli()
該new_hive_conn連接的型別是“hive_cli”(與連接型別嘗試“hiveserver2”,以及沒有作業)
任務日志列印以下命令:
beeline -u "jdbc:hive2://hive-server-1:10000/default;auth=NONE"
當我在作業 docker 容器上運行此命令時,該命令有效并且我已與 hive 服務器連接。
作業容器beeline在其 PATH 上為“airflow”和“root”用戶配置并設定了可執行檔案:
/home/airflow/.local/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/airflow/hive/apache-hive-2.3.2-bin/bin:/home/airflow/hadoop/hadoop-3.3.1/bin
uj5u.com熱心網友回復:
“run_as_user”功能使用“sudo”airflow在非互動模式下切換到用戶。在sudoCOMAND永遠(不管你指定什么引數,包括-E)保存PATH變數,除非你(通過用戶身份登錄)做--interactive模式須藤。只有在 --interactive 模式下,用戶的 .profile 、 .bashrc 和其他啟動腳本才會被執行(這些都是通常為用戶設定 PATH 的腳本)。
所有非互動式 'sudo' 命令都將secure_path在 /etc/sudoers 檔案中設定路徑。
我的情況在這里:
secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
您需要將路徑添加到/etc/sudoers或復制/鏈接直線到現有的“安全”二進制路徑之一。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/343958.html
