在初始 EMR 步骤中,我使用S3DistCP将文件树从 S3 复制到 HDFS 。hdfs dfs -ls -R hdfs:///data_dir
显示预期的文件,类似于:
/data_dir/year=2015/
/data_dir/year=2015/month=01/
/data_dir/year=2015/month=01/day=01/
/data_dir/year=2015/month=01/day=01/data01.12345678
/data_dir/year=2015/month=01/day=01/data02.12345678
/data_dir/year=2015/month=01/day=01/data03.12345678
“目录”被列为零字节文件。
然后我运行一个需要读取这些文件的火花步骤。因此加载代码是:
sqlctx.read.json('hdfs:///data_dir, schema=schema)
作业因 java 异常而失败
java.io.IOException: Not a file: hdfs://10.159.123.38:9000/data_dir/year=2015
我曾经(也许天真地)假设 spark 会递归地下降“dir 树”并加载数据文件。如果我指向 S3,它会成功加载数据。
我误解了HDFS吗?我可以告诉 spark 忽略零字节文件吗?我可以使用 S3DistCp 来展平树吗?