Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 &引用;未找到方案s3的文件系统“;尝试使用Apache Beam读/写时_Amazon S3_Kotlin_Apache Beam - Fatal编程技术网

Amazon s3 &引用;未找到方案s3的文件系统“;尝试使用Apache Beam读/写时

Amazon s3 &引用;未找到方案s3的文件系统“;尝试使用Apache Beam读/写时,amazon-s3,kotlin,apache-beam,Amazon S3,Kotlin,Apache Beam,我第一次开始在一个项目中使用ApacheBeam,我正在尝试从AWS上的EMR集群向S3读写拼花地板文件 但是,每次尝试执行代码时,我只得到: java.lang.IllegalArgumentException: No filesystem found for scheme s3 at org.apache.beam.sdk.io.FileSystems.getFileSystemInternal(FileSystems.java:459) at org.apache.beam.sdk.io.

我第一次开始在一个项目中使用ApacheBeam,我正在尝试从AWS上的EMR集群向S3读写拼花地板文件

但是,每次尝试执行代码时,我只得到:

java.lang.IllegalArgumentException: No filesystem found for scheme s3
at org.apache.beam.sdk.io.FileSystems.getFileSystemInternal(FileSystems.java:459)
at org.apache.beam.sdk.io.FileSystems.match(FileSystems.java:119)
at org.apache.beam.sdk.io.FileSystems.match(FileSystems.java:140)
at org.apache.beam.sdk.io.FileSystems.match(FileSystems.java:152)
at org.apache.beam.sdk.io.FileIO$MatchAll$MatchFn.process(FileIO.java:636)
文档没有提供任何示例,因此我不知道是否必须在代码中的任何地方初始化某些内容

我试图检查Beam源代码,但据我所知,FileSystems类应该注册所有文件系统模块,并且我的pom.xml包含amazonweb服务Beam模块(这反过来又带来了awss3模块)

我现在正在执行的唯一初始化块是:

val options = PipelineOptionsFactory.create()
options.runner = SparkRunner::class.java
val pipeline = Pipeline.create(options)
...
val runner = SparkRunner.fromOptions(options)
runner.run(pipeline).waitUntilFinish()
Spark开始正常运行,直到出现异常


有什么建议吗?

我认为您需要为AWS凭据创建一个自定义类,该类将表示Apache Beam作业选项

BasicAWSCredentials awsCreds = new BasicAWSCredentials(accessKey, secretKey);
YourCustomOptionsClass options = PipelineOptionsFactory.create().as(YourCustomOptionsClass.class);
options.as(AwsOptions.class).setAwsCredentialsProvider(new AWSStaticCredentialsProvider(awsCreds));
options.as(AwsOptions.class).setAwsRegion(region);
options.setRunner(DataflowRunner.class);
options.setProject(projectId);

options.set... (All other options you need)
在我的代码中,YourCustomOptionClass实现了S3Options和DataflowPipelineOptions

要了解有关创建自定义选项的更多信息,请查看ApacheBeam文档

其他可能有帮助的完整示例: