根据官方提供的方法,用HADOOP_CLASSPATH=`hadoop classpath`集成hadoop成功。
因为flink on yarn是用的cdh6集群,所以我想利用现有的classpath中的包含的hbase库,使用

export 
HADOOP_CLASSPATH=/opt/cloudera/parcels/CDH/lib/hbase/lib/*:$HADOOP_CLASSPATH

然后用yarn-session创建一个flink运行环境,再用sql-client连接这个容器,创建hbase映射表,这种用法失败:分析提示是找不到hbase包。




./bin/yarn-session.sh -d -s 4 -nm common-flink -jm 1024m -tm 4096m

./bin/sql-client.sh embedded -e conf/sql-env.yaml




sql-env.yaml

configuration:

  execution.target: yarn-session




再将hbase包复制到flink_home/lib这种方式,结果一下就掉到了深深的坑里:

尝试1.ClassNotFoundException: org.apache.hadoop.hbase.client.HTable

尝试2.ClassNotFoundException: 
org.apache.hbase.thirdparty.com.google.common.util.concurrent.ListeningExecutorService

尝试3.ClassNotFoundException: 
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos$MasterService$BlockingInterface

尝试4.复制hbase-shaded-client-2.1.0-cdh6.3.0.jar到lib,类冲突整个yarn-session都无法启动容器

尝试5\6\7.同3

尝试8\9.ClassNotFoundException: 
org.apache.hbase.thirdparty.com.google.protobuf.RpcController

尝试9.ClassNotFoundException: 
org.apache.hbase.thirdparty.io.netty.channel.EventLoopGroup

尝试10.NoSuchMethodError: org.apache.hadoop.hbase.client.HTable.getTableName()[B

at 
org.apache.flink.runtime.executiongraph.ExecutionJobVertex.<init>(ExecutionJobVertex.java:272)




直到尝试9通过复制jar包到lib下都解决了,现在lib包下的hbase依赖包有:

hbase-client-2.1.0-cdh6.3.0.jar

hbase-common-2.1.0-cdh6.3.0.jar

hbase-protocol-2.1.0-cdh6.3.0.jar

hbase-protocol-shaded-2.1.0-cdh6.3.0.jar

hbase-shaded-miscellaneous-2.2.1.jar

hbase-shaded-netty-2.2.1.jar

hbase-shaded-protobuf-2.2.1.jar




直到尝试10时解决方法除了修改源代码,想问还有什么解决方法没有?或者有什么好的方法集成hbase?

回复