我在使用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)中不存在文件/so.orc。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.checksumfisystem$checksumfsinputchecker.(checksumfisystem。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。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(线程。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);
1条答案
按热度按时间31moq8wy1#
问题是Flink
OrcRowInputFormat
使用两个不同的文件系统:一个用于生成输入拆分,另一个用于读取实际的输入拆分。对于前者,它使用Flink的FileSystem
对于后者,它使用hadoop的FileSystem
. 因此,您需要配置hadoop的配置core-site.xml
包含以下代码段有关为hadoop设置s3的更多信息,请参见此链接。
这是Flink的局限性
OrcRowInputFormat
应该是固定的。我已经创建了相应的问题。