【问题标题】:hdfs path is not a valid when using SparkSubmitOperator with Airflow将 SparkSubmitOperator 与 Airflow 一起使用时,hdfs 路径无效
【发布时间】:2022-08-10 23:40:36
【问题描述】:
//etl.py
start = DummyOperator(task_id = \'start\', dag = dag) 
job1 = SparkSubmitOperator(task_id = \'t1\', application = \'/home/airflow/dags/test.py\',
                    name = \'test\', conf = {\'spark.master\': \'yarn\'}, dag = dag)
 
start >> job1
//test.py
os.environ[\'JAVA_HOME\'] = \'/usr/lib/jvm/java-1.8.0-openjdk-amd64\'
os.environ[\'SPARK_HOME\'] = \'/opt/spark3\'
os.environ[\'YARN_CONF_DIR\'] = \'/opt/hadoop/etc/hadoop\'
os.environ[\'HADOOP_CONF_DIR\'] = \'/opt/hadoop/etc/hadoop\'

spark = SparkSession.builder.master(\"yarn\").appName(\'test1\').getOrCreate()

target_dir = \"hdfs:/localhost:9000/hospital/data/test.csv\"

file = spark.read.format(\'csv\').options(header=\'True\').options(inferSchema=\'True\').load(target_dir)

我将 \"test.csv\" 放在 hdfs://hospital/data/test.csv 上,然后运行气流网络服务器,但出现错误

java.lang.IllegalArgumentException:路径名 /localhost:9000/hospital/来自 hdfs 的数据:/localhost:9000/hospital/data 不是有效的 DFS 文件名。

我也尝试过 hdfs:///localhost:9000/hospital/data、hdfs::/hospital/data 等,但总是出现相同的错误。

我该如何解决?

    标签: apache-spark hadoop airflow


    【解决方案1】:

    路径名应该是 hdfs 服务器中的路径,而不是完整的 url。

    要配置您的 spark 会话以连接到 hdfs 服务器:

    spark = (
        SparkSession.builder.master("yarn").appName('test1')
        .set("spark.hadoop.fs.default.name", "hdfs://localhost:9000")
        .set("spark.hadoop.fs.defaultFS", "hdfs://localhost:9000")
        .getOrCreate()
    )            
    

    路径只是/hospital/data/test.csv

    【讨论】:

    • 谢谢你的详细回答。但是,我收到了另一个错误py4j.protocol.Py4JError: An error occurred while calling o52.load。你知道如何解决这个错误吗?
    • 你能提供堆栈跟踪吗?
    猜你喜欢
    • 2020-03-23
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多