xuyanqiangCode 2025-01-13 09:54 采纳率: 60%
浏览 39

flink报错java.lang.reflect.InaccessibleObjectException

我使用的是jdk17,在使用flink1.17时,启动报错。

img


下面是我的代码

package org.dromara.study;

import org.apache.flink.api.java.functions.KeySelector;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.KeyedStream;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

/**
 * @Description DataStream 实现
 * @Author xyq
 * @Date 2025/1/12 17:57
 */
public class WordCountDataStream {
    public static void main(String[] args) {
        // 1.创建执行环境
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        // 2.读取数据
        DataStreamSource<String> lineDs = env.readTextFile("D:\\workSpace\\SDYT_NEW\\security-operation-plus\\doc\\word.txt");
        // 3.处理数据
        SingleOutputStreamOperator<Tuple2<String, Integer>> wordAndOneDs = lineDs.flatMap(new FlatMapImpl());
        // 4.分组
        KeyedStream<Tuple2<String, Integer>, String> workAndOneKs = wordAndOneDs.keyBy(new KeySelector<Tuple2<String, Integer>, String>() {
            @Override
            public String getKey(Tuple2<String, Integer> value) throws Exception {
                return value.f0;
            }
        });
        // 5.聚合
        SingleOutputStreamOperator<Tuple2<String, Integer>> sunDs = workAndOneKs.sum(1);
        // 4.输出数据
        sunDs.print();
        // 5. 执行:类似与sparkstreaming 最后 ssc.start()方法
        try {
            env.execute();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


  • 写回答

2条回答 默认 最新

  • 关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    看起来你的问题在于JDK版本和Apache Flink版本之间的兼容性问题。你正在使用JDK 17和Flink 1.17版本,可能存在一些兼容性问题。

    首先,SLF4J的错误信息只是告诉你没有成功加载日志实现,这通常不会导致严重的问题。真正的错误可能在于"java.lang.reflect.InaccessibleObjectException",这个异常通常发生在尝试访问一个不可访问的成员(例如,私有字段或方法)时。在JDK 9及更高版本中,对反射API的使用更加严格,可能会引发此异常。

    关于你的问题,我建议你尝试以下解决方案:

    1. 尝试降低JDK版本:将JDK降级到与Flink更兼容的版本,比如JDK 8或JDK 11。
    2. 更新Flink版本:如果你不想更改JDK版本,也可以尝试升级到更高版本的Flink,新版本可能已经修复了与JDK 17的兼容性问题。
    3. 如果你使用的是IDE(例如IntelliJ IDEA或Eclipse),确保你的项目使用的是正确的JDK版本。在IDE中,你可以设置项目的JDK版本,确保它与你的Flink版本兼容。

    关于你的代码,我看到你在使用FlatMapImpl类进行数据处理,但没有提供这个类的实现。请确保这个类的实现是正确的,并且与Flink API兼容。另外,请确保你的输入文件路径("D:\workSpace\SDYT_NEW\security-operation-plus\doc\word.txt")是正确的,并且文件存在。

    最后,对于具体的错误,你需要查看堆栈跟踪的详细错误消息,找出引发异常的具体行和类。这可能会帮助你找到问题的根源。

    评论

报告相同问题?

问题事件

  • 创建了问题 1月13日