使用OrcTableSource从云对象存储(IBM COS)提取Orc文件时遇到了一些麻烦,下面提供了代码片段:
OrcTableSource soORCTableSource = OrcTableSource.builder() // path to ORC
.path("s3://orders/so.orc") // s3://orders/so.csv
// schema of ORC files
.forOrcSchema(OrderHeaderORCSchema)
.withConfiguration(orcconfig)
.build();
似乎此路径不正确,但是任何人都可以帮忙吗?非常感谢!
由以下原因引起:java.io.FileNotFoundException:文件/so.orc不存在 在 org.apache.hadoop.fs.RawLocalFileSystem.deprecatedGetFileStatus(RawLocalFileSystem.java:611) 在 org.apache.hadoop.fs.RawLocalFileSystem.getFileLinkStatusInternal(RawLocalFileSystem.java:824) 在 org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:601) 在 org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:428) 在 org.apache.hadoop.fs.ChecksumFileSystem $ ChecksumFSInputChecker。(ChecksumFileSystem.java:142) 在 org.apache.hadoop.fs.ChecksumFileSystem.open(ChecksumFileSystem.java:346) 在org.apache.hadoop.fs.FileSystem.open(FileSystem.java:768)处 org.apache.orc.impl.ReaderImpl.extractFileTail(ReaderImpl.java:528) 在org.apache.orc.impl.ReaderImpl。(ReaderImpl.java:370)处 org.apache.orc.OrcFile.createReader(OrcFile.java:342)在 org.apache.flink.orc.OrcRowInputFormat.open(OrcRowInputFormat.java:225) 在 org.apache.flink.orc.OrcRowInputFormat.open(OrcRowInputFormat.java:63) 在 org.apache.flink.runtime.operators.DataSourceTask.invoke(DataSourceTask.java:170) 在org.apache.flink.runtime.taskmanager.Task.run(Task.java:711)处 java.lang.Thread.run(Thread.java:748)
顺便说一句,我已经设置了flink-s3-fs-presto-1.6.2并正确运行了以下代码。该问题仅限于OrcTableSource。
DataSet<Tuple5<String, String, String, String, String>> orderinfoSet =
env.readCsvFile("s3://orders/so.csv")
.types(String.class, String.class, String.class
,String.class, String.class);
答案 0 :(得分:0)
问题在于Flink的OrcRowInputFormat
使用两种不同的文件系统:一种用于生成输入拆分,另一种用于读取实际的输入拆分。对于前者,它使用Flink的FileSystem
抽象;对于后者,它使用Hadoop的FileSystem
。因此,您需要配置Hadoop的配置core-site.xml
来包含以下代码段
<property>
<name>fs.s3.impl</name>
<value>org.apache.hadoop.fs.s3a.S3AFileSystem</value>
</property>
有关为Hadoop设置S3的更多信息,请参见this link。
这是Flink的OrcRowInputFormat
的局限,应予以修复。我已经创建了the corresponding issue。