我需要将表结果保存到S3上的orc中,我就是这样做的:
tEnv.createTemporaryTable("my_output_table", TableDescriptor.forConnector("filesystem")
.schema(outputSchema)
.option("path", s3OutputPath)
.format(FormatDescriptor.forFormat("orc").build())
.build());
finalResultToInsert.executeInsert("my_output_table");但是,在运行时,它会引发
Caused by: org.apache.flink.table.api.ValidationException: Could not find any format factory for identifier 'orc' in the classpath.
at org.apache.flink.table.filesystem.FileSystemTableSink.<init>(FileSystemTableSink.java:128) ~[flink-table_2.12-1.14.2.jar:1.14.2]
at org.apache.flink.table.filesystem.FileSystemTableFactory.createDynamicTableSink(FileSystemTableFactory.java:87) ~[flink-table_2.12-1.14.2.jar:1.14.2]
at org.apache.flink.table.factories.FactoryUtil.createTableSink(FactoryUtil.java:179) ~[flink-table_2.12-1.14.2.jar:1.14.2]
at org.apache.flink.table.planner.delegation.PlannerBase.getTableSink(PlannerBase.scala:394) ~[flink-table_2.12-1.14.2.jar:1.14.2]
......我已经包含了相关的依赖项。
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-orc_2.11</artifactId>
<version>1.14.2</version>
</dependency>在生成的jar文件中,我可以看到flink orc类:
org/apache/flink/orc/
org/apache/flink/orc/AbstractOrcFileInputFormat.class
org/apache/flink/orc/OrcFileFormatFactory$1.class
org/apache/flink/orc/OrcFilters$LessThanEquals.class
org/apache/flink/orc/AbstractOrcFileInputFormat$OrcVectorizedReader.class
org/apache/flink/orc/OrcFilters$Not.class
org/apache/flink/orc/OrcFileFormatFactory.class
org/apache/flink/orc/OrcColumnarRowSplitReader.class
org/apache/flink/orc/OrcColumnarRowSplitReader$ColumnBatchGenerator.class
org/apache/flink/orc/AbstractOrcFileInputFormat$OrcReaderBatch.class
org/apache/flink/orc/OrcFilters$In.class
......所以我真的不明白为什么它仍然找不到它的类路径。
另外,在这个项目中,我还包括了flink-avro依赖项,如果我将输出格式从orc更改为avro,它就会工作得很好。
同时,我也在执行AWS EMR的工作。EMR版本为6.6.0,Flink版本为1.14.2。https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-660-release.html
有人能帮忙吗?非常感谢!
发布于 2022-10-20 14:31:16
好吧,看来我解决了这个问题
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-orc_2.11</artifactId>
<version>1.14.2</version>
</dependency>到Maven pom中依赖项部分的顶部,它就可以工作了。我认为这只是由于类加载的顺序,所以放在前面可能会解决flink-orc依赖关系类加载期间的冲突,因为它将首先加载。
发布于 2022-10-20 10:19:57
如果我没弄错的话,兽人需要Hadoop。因此,您还应该添加org.apache.hadoop: Hadoop --公共的也可能添加其他Hadoop依赖项。
https://stackoverflow.com/questions/74098958
复制相似问题