我一直在一个本地集群上运行我的Spark作业,该集群具有从输入读取的hdfs并且输出也被写入。现在我已经设置了一个AWS EMR和一个S3存储桶,我有输入,我也想将输出写入S3。
错误:
用户类抛出异常:java.lang.IllegalArgumentException:错误的FS:s3:// something / input,expected:hdfs://ip-some-numbers.eu-west-1.compute.internal:8020
我尝试搜索相同的问题,并且有几个关于此问题的问题。有人建议它只用于输出,但即使我禁用输出,我也会得到相同的错误。
另一个建议是我的代码中的FileSystem
有问题。以下是我的程序中输入/输出的所有出现:
第一次出现在我的自定义FileInputFormat
,在getSplits(JobContext job)
,我实际上没有修改自己,但我可以:
FileSystem fs = path.getFileSystem(job.getConfiguration());
在我的自定义RecordReader
中的类似情况,也没有修改自己:
final FileSystem fs = file.getFileSystem(job);
在我自己编写的自定义nextKeyValue()
的RecordReader
中,我使用:
FileSystem fs = FileSystem.get(jc);
最后,当我想检测我使用的文件夹中的文件数时:
val fs = FileSystem.get(sc.hadoopConfiguration)
val status = fs.listStatus(new Path(path))
我假设问题出在我的代码中,但是如何修改FileSystem
调用以支持S3的输入/输出?