copyFromLocal 文件未找到 - 使用 pyspark 脚本将 infile csv 复制到 hdfs 位置的命令

问题描述 投票:0回答:1

我在 Spark 脚本中使用以下代码。在这里,我想将数据文件从本地复制到 HDFS 位置。当从 shell 手动运行 HDFS 命令时,它工作正常。但通过 py-spark 脚本它失败了。

process = subprocess.Popen(["hdfs", "dfs", "-copyFromLocal", "-f", local_file,table_hdfs_location], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
return_code = process.wait()

if return_code == 0:
    print("File copy successful")
else:
    print(f"File copy failed. Return code: {return_code}")
    error_output = process.stderr.read().decode('utf-8')
    if error_output:
        print("Error message:")
        print(error_output)

错误信息: copyFromLocal:`/data/Infiles/Sales.csv':没有这样的文件或目录

这是本地目录(在 Linux 上)。路径存在并且文件也存在。

是不是因为spark无法找到所有节点对面的位置?如果我从 Spark 脚本运行这个 hdfs 命令,这个本地文件夹如何需要出现在所有 hadoop 节点中。

python hadoop
1个回答
0
投票

您可以将

--files
传递给
spark-submit
,它会自动为您将文件上传到 HDFS(好吧,在 YARN 执行器目录中),但随后您就无需复制该文件。

您的问题的一般解决方案是不使用 Spark 运行所示的代码。只需使用

python
,或者使用包装
hadoop fs -copyFromLocal
spark-submit

的 shell 脚本
© www.soinside.com 2019 - 2024. All rights reserved.