hadoop copyFromLocal File not found -使用pyspark脚本将infile csv复制到hdfs位置的命令

mznpcxlj  于 5个月前  发布在  Hadoop
关注(0)|答案(1)|浏览(57)

我在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节点中?

sigwle7e

sigwle7e1#

您可以将--files传递给spark-submit,它会自动将文件上传到HDFS(在YARN executor目录中),但这样您就不必要地复制文件,每个executor都会尝试将相同的文件复制到相同的HDFS位置。
对于你的问题,一般的解决方案是不使用Spark来运行所示的代码。只需使用python,或者 Package hadoop fs -copyFromLocalspark-submit的shell脚本

相关问题