首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要将FLINK-hadoop兼容性-2.10 jar显式复制到EMR集群上的${FLINK-HOME}/lib位置

需要将FLINK-hadoop兼容性-2.10 jar显式复制到EMR集群上的${FLINK-HOME}/lib位置
EN

Stack Overflow用户
提问于 2018-02-08 10:06:20
回答 2查看 795关注 0票数 3

我目前正在开发一个Flink应用程序,它使用一些Hadoop依赖项将数据写入S3位置。在本地环境中,它工作正常,但是当我在EMR集群上部署这个Flink应用程序时,它会抛出一个与兼容性问题相关的异常。

我得到的错误信息是

java.lang.RuntimeException: Could not load the TypeInformation for the class 'org.apache.hadoop.io.Writable'. You may be missing the 'flink-hadoop-compatibility' dependency. at org.apache.flink.api.java.typeutils.TypeExtractor.createHadoopWritableTypeInfo(TypeExtractor.java:2025) at org.apache.flink.api.java.typeutils.TypeExtractor.privateGetForClass(TypeExtractor.java:1649) at org.apache.flink.api.java.typeutils.TypeExtractor.privateGetForClass(TypeExtractor.java:1591) at org.apache.flink.api.java.typeutils.TypeExtractor.createTypeInfoWithTypeHierarchy(TypeExtractor.java:778) ....

我在POM依赖项中包含了flink-hadoop-compatibility-2.10 jar的maven依赖项。但它并没有发现它。我使用的Flink版本是1.2.0

但是,当我显式地将兼容性JAR复制到${FLINK-HOME}/lib位置时,我不会得到任何异常,并且能够成功地运行Flink应用程序。

我们有任何方法可以使用,以便在不将JAR文件部署到${FLINK-HOME}/lib的情况下,我们可以运行应用程序吗?

POM依赖项需要进行哪些修改,以便应用程序能够检测到它,并且不需要将兼容性JAR复制到flink-home/lib位置?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-16 15:00:10

在查看了各种帖子并对POM文件进行了实验之后,我认为在当前版本的Apache Flink (1.2.0)中,需要将JAR文件复制(部署)到${FLINK-HOME}/lib位置。

票数 1
EN

Stack Overflow用户

发布于 2019-06-13 06:40:19

代码语言:javascript
复制
package org.apache.flink.api.java.typeutils;

public class TypeExtractor {

    /** The name of the class representing Hadoop's writable */
    private static final String HADOOP_WRITABLE_CLASS = "org.apache.hadoop.io.Writable";
    private static final String HADOOP_WRITABLE_TYPEINFO_CLASS = "org.apache.flink.api.java.typeutils.WritableTypeInfo";


    // visible for testing
    public static <T> TypeInformation<T> createHadoopWritableTypeInfo(Class<T> clazz) {
        checkNotNull(clazz);

        Class<?> typeInfoClass;
        try {
            typeInfoClass = Class.forName(HADOOP_WRITABLE_TYPEINFO_CLASS, false, TypeExtractor.class.getClassLoader());
        }
        catch (ClassNotFoundException e) {
            throw new RuntimeException("Could not load the TypeInformation for the class '"
                    + HADOOP_WRITABLE_CLASS + "'. You may be missing the 'flink-hadoop-compatibility' dependency.");
        }

        ...
    }
}

这是因为org.apache.hadoop.io.Writable意味着由TypeExtractor.class.getClassLoader() (即AppClassLoader )加载,而子链接jar是由ParentFirstClassLoader加载的,ParentFirstClassLoaderAppClassLoader的子级,因此AppClassLoader无法从flink jar加载org.apache.hadoop.io.Writable

我不确定这是否是一个bug,如果不将FLINK-hadoop兼容jar文件复制到${FLINK-HOME} classLoader位置,则切换到Thread.currentThread().getContextClassLoader()将使其工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48682729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档