首页 > 解决方案 > 无法从 Amazon EMR 的 pyspark 中的 hdfs 读取文件

问题描述

我正在尝试为 Amazon EMR 制作 python 程序,但我无法从其中的 hdfs 读取文件。我这样做是这样的:集群配置如下:发布:emr-5.25.0,hive 2.3.5,spark 2.4.3

起初,我从不在集群中的计算机启动 shell 脚本,如下所示:

aws emr add-steps ... --steps Type=CUSTOM_JAR .. Args=['s3://script.sh']

脚本在 s3 存储桶中。

执行一些检查并将文件从 s3 复制到集群的脚本,如下所示:

s3-dist-cp s3://some_file /mnt1/some_file
hdfs dfs -put /mnt1/some_file hdfs://home/hadoop/output/gzip
hdfs dfs -ls -h hdfs://home/hadoop/output/gzip (1)

然后脚本像这样启动python程序:

spark-submit ... --master yarn --deploy-mode cluster s3://script.py

在 python 程序中,我正在做这样的事情:

if __name__=="main":

    subprocess.check_output("hdfs dfs -ls hdfs://home/hadoop/output/gzip") #(2)
    sc = SparkContext()
    f = sc.binaryFiles("hdfs://home/hadoop/output/gzip") #(3)
    f.keys().foreach(some_fn)

我的问题是(1)工作正常并在 hdfs 中显示文件。(3) 也可以正常工作,但 (2) 不输出任何内容,说“[Errno 2] 没有这样的文件或目录”。

我想做的是修改python代码,因为据我了解,binaryFiles将文件内容加载到内存中并在节点之间拆分,但在这个任务中我只需要知道文件名。

标签: pythonapache-sparkpysparkamazon-emr

解决方案


推荐阅读