有人知道OrcTableSource是否支持S3文件系统吗?

时间:2018-11-22 03:31:32

标签: apache-flink

使用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);

1 个答案:

答案 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