我使用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:org.apache.hadoop.fs.RawLocalFileSystem.deprecatedGetFileStatus(RawLocalFileSystem.java:611)org.apache.hadoop.fs.RawLocalFileSystem.getFileLinkStatusInternal(RawLocalFileSystem)中不存在文件/so.orc .java:824)org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:601)位于org.apache.hadoop的org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:428)。 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的org.apache.orc.impl.ReaderImpl。(ReaderImpl.java:370)。orc.OacheFile.createReader(OrcFile.java:342)org.apache.flink.orc.OrcRowInputFormat.open(OrcRowInputFormat.java:225)org.apache.flink.orc.OrcRowInputFormat.open(OrcRowInputFormat.java:63) at org.apache.flink.runtime.operators.DataSourceTask.invoke(DataSourceTask.java:170)at org.apache.flink.runtime.taskmanager.Task.run(Task.java:711)at java.lang.Thread.run (Thread.java:748)
顺便说一句,我已经设置了flink-s3-fs-presto-1.6.2,并且正确运行了以下代码。问题仅限于OrcTableSource。
DataSet> orderinfoSet =
env.readCsvFile("s3://orders/so.csv")
.types(String.class, String.class, String.class
,String.class, String.class);
问题是Flink OrcRowInputFormat使用两个不同的文件系统:一个用于生成输入分割,另一个用于读取实际的输入分割。对于前者,它使用Flink的FileSystem抽象,而后者则使用Hadoop FileSystem。因此,您需要配置Hadoop的配置core-site.xml以包含以下代码段
fs.s3.impl
org.apache.hadoop.fs.s3a.S3AFileSystem
这是Flink的限制,应该修复OrcRowInputFormat。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。