FLINK SQL DDL写入hbase问题

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

FLINK SQL DDL写入hbase问题

酷酷的浑蛋


在使用flink sql ddl语句向hbase中写的时候报如下错误:
java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration
    at org.apache.flink.addons.hbase.HBaseUpsertTableSink.consumeDataStream(HBaseUpsertTableSink.java:87)
    at org.apache.flink.table.planner.plan.nodes.physical.stream.StreamExecSink.translateToPlanInternal(StreamExecSink.scala:141)
    at org.apache.flink.table.planner.plan.nodes.physical.stream.StreamExecSink.translateToPlanInternal(StreamExecSink.scala:50)


项目maven中已经引入过下面依赖
<artifactId>hbase-server</artifactId>
<artifactId>hbase-common</artifactId>
<artifactId>hadoop-common</artifactId>
<artifactId>flink-hbase_2.11</artifactId>
而且我看jar中是有HBaseConfiguration这个类的,为什么放到服务器上执行就报错呢,在本地执行没问题
Reply | Threaded
Open this post in threaded view
|

Re: FLINK SQL DDL写入hbase问题

Leonard Xu
Hi
你服务器上是否配置了hadoop_classpath? 建议hbase在试用时 用 hadoop_classpath + flink-hbase jar,不然依赖问题会比较麻烦。

祝好
Leonard Xu

> 在 2020年6月11日,14:24,酷酷的浑蛋 <[hidden email]> 写道:
>
>
>
> 在使用flink sql ddl语句向hbase中写的时候报如下错误:
> java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration
>    at org.apache.flink.addons.hbase.HBaseUpsertTableSink.consumeDataStream(HBaseUpsertTableSink.java:87)
>    at org.apache.flink.table.planner.plan.nodes.physical.stream.StreamExecSink.translateToPlanInternal(StreamExecSink.scala:141)
>    at org.apache.flink.table.planner.plan.nodes.physical.stream.StreamExecSink.translateToPlanInternal(StreamExecSink.scala:50)
>
>
> 项目maven中已经引入过下面依赖
> <artifactId>hbase-server</artifactId>
> <artifactId>hbase-common</artifactId>
> <artifactId>hadoop-common</artifactId>
> <artifactId>flink-hbase_2.11</artifactId>
> 而且我看jar中是有HBaseConfiguration这个类的,为什么放到服务器上执行就报错呢,在本地执行没问题

Reply | Threaded
Open this post in threaded view
|

回复: FLINK SQL DDL写入hbase问题

酷酷的浑蛋




您是说将那几个jar都放到flink/lib下吗?


在2020年06月11日 14:39,Leonard Xu<[hidden email]> 写道:
Hi
你服务器上是否配置了hadoop_classpath? 建议hbase在试用时 用 hadoop_classpath + flink-hbase jar,不然依赖问题会比较麻烦。

祝好
Leonard Xu

在 2020年6月11日,14:24,酷酷的浑蛋 <[hidden email]> 写道:



在使用flink sql ddl语句向hbase中写的时候报如下错误:
java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration
at org.apache.flink.addons.hbase.HBaseUpsertTableSink.consumeDataStream(HBaseUpsertTableSink.java:87)
at org.apache.flink.table.planner.plan.nodes.physical.stream.StreamExecSink.translateToPlanInternal(StreamExecSink.scala:141)
at org.apache.flink.table.planner.plan.nodes.physical.stream.StreamExecSink.translateToPlanInternal(StreamExecSink.scala:50)


项目maven中已经引入过下面依赖
<artifactId>hbase-server</artifactId>
<artifactId>hbase-common</artifactId>
<artifactId>hadoop-common</artifactId>
<artifactId>flink-hbase_2.11</artifactId>
而且我看jar中是有HBaseConfiguration这个类的,为什么放到服务器上执行就报错呢,在本地执行没问题
Reply | Threaded
Open this post in threaded view
|

Re: FLINK SQL DDL写入hbase问题

Leonard Xu
Hi,

> 您是说将那几个jar都放到flink/lib下吗?

你看这个报错,是在flink的client提交作业的时候就抛出的异常,看起来是你client所在机器配置缺少了hbase的jar。
你在使用hbase集群,肯定线上是有hadoop集群的,hbase 的一些类是依赖了 hadoop 的依赖,所以你把 hbase lib下 jar 加到 $HADOOP_CLASSPATH下,这样$HADOOP_CLASSPATH 下就有hbase所需的所有jar了,在flink的lib目录下,只需要添加 flink-hbase_2.11 的依赖即可,flink作业启动脚本会检查$HADOOP_CLASSPATH,能够加载到所需的jar。

> <artifactId>hbase-server</artifactId>
> <artifactId>hbase-common</artifactId>
> <artifactId>hadoop-common</artifactId>


不推荐在 pom 里这样引入hadoop 和 hbase 的 jar 包,这样依赖容易冲突。

Best,
Leonard Xu

>
> 在2020年06月11日 14:39,Leonard Xu<[hidden email]> 写道:
> Hi
> 你服务器上是否配置了hadoop_classpath? 建议hbase在试用时 用 hadoop_classpath + flink-hbase jar,不然依赖问题会比较麻烦。
>
> 祝好
> Leonard Xu
>
> 在 2020年6月11日,14:24,酷酷的浑蛋 <[hidden email]> 写道:
>
>
>
> 在使用flink sql ddl语句向hbase中写的时候报如下错误:
> java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration
> at org.apache.flink.addons.hbase.HBaseUpsertTableSink.consumeDataStream(HBaseUpsertTableSink.java:87)
> at org.apache.flink.table.planner.plan.nodes.physical.stream.StreamExecSink.translateToPlanInternal(StreamExecSink.scala:141)
> at org.apache.flink.table.planner.plan.nodes.physical.stream.StreamExecSink.translateToPlanInternal(StreamExecSink.scala:50)
>
>
> 项目maven中已经引入过下面依赖
> <artifactId>hbase-server</artifactId>
> <artifactId>hbase-common</artifactId>
> <artifactId>hadoop-common</artifactId>
> <artifactId>flink-hbase_2.11</artifactId>
> 而且我看jar中是有HBaseConfiguration这个类的,为什么放到服务器上执行就报错呢,在本地执行没问题