开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

flink 启动 sql gateway链接hiveserver2报错有人遇见过吗?

flink 启动 sql gateway链接hiveserver2报错有人遇见过吗?Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.fs.FSDataInputStreamimage.png

展开
收起
真的很搞笑 2023-06-05 18:34:50 217 0
6 条回答
写回答
取消 提交回答
  • 可能启动flink sql客户端的时候,没有加载hadoop环境变量,导致flink找都不到对应包,进而无法执行。

    # HADOOP_HOME is your hadoop root directory after unpack the binary package.
    export HADOOP_CLASSPATH=`$HADOOP_HOME/bin/hadoop classpath`
    
    ./bin/start-cluster.sh
    

    再重启flink集群即可。

    ——参考链接

    2024-01-25 22:50:14
    赞同 1 展开评论 打赏
  • 依赖的问题,请检查一下依赖。然后把这个依赖换成合适的就可以了。微信截图_20231028103855.png

    2024-01-21 21:05:44
    赞同 展开评论 打赏
  • 某政企事业单位安全运维工程师,主要从事系统运维及网络安全工作,多次获得阿里云、华为云、腾讯云征文比赛一二等奖;CTF选手,白帽,全国交通行业网络安全大赛二等奖,全国数信杯数据安全大赛银奖,手握多张EDU、CNVD、CNNVD证书。

    wyvq5mjsckydw_fc7bd6e53ffe4d3c8051598a0fda5fca.png

    根据您提供的信息,看起来您的问题是关于Apache Flink SQL Gateway启动时遇到异常,特别是由于ClassNotFoundException引发的问题。这个问题涉及到org.apache.hadoop.fs.FSDataInputStream 类的缺失。FSDataInputStream 是Hadoop HDFS中的一个类,用于表示HDFS中的数据流。

    首先,我们需要确定的是,您是否已经在类路径中包含了Hadoop的相关jar包。如果您还没有这么做,则必须手动下载Hadoop jar包并将它们加入到了Flink项目的类路径中。您可以尝试以下操作:

    • 下载Hadoop 的相应版本(推荐使用与您的Flink版本匹配的那个)。

    • 解压Hadoop压缩包。

    • 将解压出来的lib目录下的所有jar包复制到Flink项目根目录下的lib目录下。

    • 如果有多个Hadoop版本,请删除之前不适用的版本的jar包。

    完成上述步骤之后,再次尝试启动Flink SQL Gateway。此外,还需要注意的一点是确保所有的Hadoop jar包都已经正确地放置到位,并且在Flink ClassLoader中可寻址。

    如果问题依然存在,那么还可能出现其他的因素导致这个问题发生,例如:

    • 版本不兼容:确保您使用的Hadoop版本与您的Flink版本兼容。

    • Maven依赖问题:检查Maven pom.xml文件中的依赖项,确保它们都被正确地解析和打包进最终的JAR文件中。

    • 运行环境问题:确保您的操作系统满足Hadoop的要求,例如内核版本和JVM版本等等。

    2024-01-20 18:17:46
    赞同 展开评论 打赏
  • 看起来您正在尝试使用HiveServer2端点将Flink SQL网关连接到Apache蜂巢,但在这样做时遇到了ClassNotFoundException。错误特别提到了在执行期间hadoop-fs包 (v16) 中缺少类。根据我的经验,以下是一些可能的解决方案:请确保您已为最新稳定版本的Flink-Hive连接器添加了正确的依赖项。根据日志记录,您似乎正在使用v2.16.x。将以下maven依赖项添加到您的聚甲醛.xml文件中:

       <groupId>org.apache.flink</groupId>
       <artifactId>flink-connector-hive_{{scala_version}}{% endfor %}</artifact_id>
       <version>{{flink_hive_connector}}</version>
    

    '将scala_version替换为您在Flink安装中使用的Scala版本,并且flink_hive_connector应与正在使用的Flink版本匹配。 验证您是否设置了通过hiveserver2访问蜂巢所需的环境变量。特别是,确保定义了 $ HADOOP_HOME并指向您的Hadoop发行版的根目录。 如果在设置上述内容后仍面临问题,请尝试降级到Flink的早期版本或升级到较新的版本,具体取决于兼容性限制。

    2024-01-15 15:36:52
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    在使用Flink SQL Gateway连接HiveServer2时也遇到了类似的错误。根据我的经验,这个问题可能是由于Flink SQL Gateway的Hadoop依赖问题导致的。你可以尝试以下方法来解决这个问题:

    1. 确保你的Flink版本与Hadoop版本兼容。你可以在Flink的官方文档中查看Flink与Hadoop的兼容性信息:https://ci.apache.org/projects/flink/flink-docs-release-1.14/docs/compatibility/hadoop/
    2. 确保在你的Flink集群中正确安装了Hadoop。Flink SQL Gateway需要Hadoop的一些库来与HiveServer2进行通信。你可以通过检查Flink集群的配置文件来确认Hadoop是否已经正确安装。
    3. 如果你使用的是Maven或Gradle来构建Flink项目,你可以尝试添加以下依赖项来解决Hadoop依赖问题:


    org.apache.hadoop
    hadoop-client
    2.7.3

    CopyCopy

    implementation 'org.apache.hadoop:hadoop-client:2.7.3'
    CopyCopy

    1. 如果问题仍然存在,你可以尝试在启动Flink SQL Gateway时添加以下系统属性来解决Hadoop依赖问题:

    -Dorg.apache.hadoop.fs.FSDataInputStream.class.path=/path/to/your/hadoop-client-jars
    CopyCopy

    将/path/to/your/hadoop-client-jars替换为你的Hadoop客户端库的路径。

    2024-01-12 21:28:44
    赞同 展开评论 打赏
  • 如何解决Flink依赖冲突问题?https://help.aliyun.com/zh/flink/support/reference?spm=a2c4g.11186623.0.i74

    image.png

    问题现象

    有明显报错,且引发错误的为Flink或Hadoop相关类。

    java.lang.AbstractMethodError
    java.lang.ClassNotFoundException
    java.lang.IllegalAccessError
    java.lang.IllegalAccessException
    java.lang.InstantiationError
    java.lang.InstantiationException
    java.lang.InvocationTargetException
    java.lang.NoClassDefFoundError
    java.lang.NoSuchFieldError
    java.lang.NoSuchFieldException
    java.lang.NoSuchMethodError
    java.lang.NoSuchMethodException
    无明显报错,但会引起一些不符合预期的现象,例如:

    日志不输出或log4j配置不生效。

    该类问题通常是由于依赖中携带了log4j相关配置导致的。需要排查作业JAR包中是否引入了log4j配置的依赖,可以通过在dependency中配置exclusions的方式去掉log4j配置。

    说明
    如果必须要使用不同版本的log4j,需要使用maven-shade-plugin将log4j相关的class relocation掉。

    RPC调用异常。

    Flink的Akka RPC调用出现依赖冲突可能导致的异常,默认不会显示在日志中,需要开启Debug日志进行确认。

    例如,Debug日志中出现Cannot allocate the requested resources. Trying to allocate ResourceProfile{xxx},但是JM日志在Registering TaskManager with ResourceID xxx后,没有下文,直到资源请求超时报错NoResourceAvailableException。此外TM持续报错Cannot allocate the requested resources. Trying to allocate ResourceProfile{xxx}。

    原因:开启Debug日志后,发现RPC调用报错InvocationTargetException,该报错导致TM Slot分配到一半失败出现状态不一致,RM持续尝试分配Slot失败无法恢复。

    问题原因

    作业JAR包中包含了不必要的依赖(例如基本配置、Flink、Hadoop和log4j依赖),造成依赖冲突从而引发各种问题。

    作业需要的Connector对应的依赖未被打入JAR包中。

    排查方法

    查看作业pom.xml文件,判断是否存在不必要的依赖。

    通过jar tf foo.jar命令查看作业JAR包内容,判断是否存在引发依赖冲突的内容。

    通过mvn dependency:tree命令查看作业的依赖关系,判断是否存在冲突的依赖。

    解决方案

    基本配置建议将scope全部设置为provided,即不打入作业JAR包。

    DataStream Java


    org.apache.flink
    flink-streaming-java_2.11
    ${flink.version}
    provided

    DataStream Scala



    org.apache.flink
    flink-streaming-scala_2.11
    ${flink.version}
    provided

    DataSet Java



    org.apache.flink
    flink-java
    ${flink.version}
    provided

    DataSet Scala



    org.apache.flink
    flink-scala_2.11
    ${flink.version}
    provided

    添加作业需要的Connector对应的依赖,并将scope全部设置为compile(默认的scope是compile),即打入作业JAR包中,以Kafka Connector为例,代码如下。



    org.apache.flink
    flink-connector-kafka_2.11
    ${flink.version}

    其他Flink、Hadoop和log4j依赖不建议添加。但是:

    如果作业本身存在基本配置或Connector相关的直接依赖,建议将scope设置为provided,示例如下。



    org.apache.hadoop
    hadoop-common
    provided

    如果作业存在基本配置或Connector相关的间接依赖,建议通过exclusion将依赖去掉,示例如下。



    foo
    bar


    org.apache.hadoop
    hadoop-common


    2024-01-12 15:02:24
    赞同 展开评论 打赏
滑动查看更多

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    SQL Server 2017 立即下载
    GeoMesa on Spark SQL 立即下载
    原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载