Flink 提交jar,报错no class Configuration not find

博客内容描述了在使用Flink将数据sink到Hbase时遇到的错误,以及解决问题的两个步骤:配置环境变量和替换特定的jar包。重点在于Uber jar与非Uber jar的区别,作者指出Uber jar解决了问题,但未详细说明具体差异。

bug描述

在Flink将数据sink到Hbase里面,提交作业到flink 集群运行报错。

在这里插入图片描述

解决方案

1、刚开始是将hbase_home,hadoop_home 配置环境变量到/et/profile文件。
2、将flink-shaded-hadoop-2-uber-2.7.5-7.0.jar 放到flink/lib文件夹下面。注意这里有个坑:
就是这个jar我第一次下载的是flink-shaded-hadoop-2-2.7.5-7.0.jar这个包,就报上面的错误,后来我替换成-uber的jar包就不报错了。

疑问

带uber的jar包和不带uber的jar的区别是什么?

<think> 我们注意到用户的问题是关于Flink连接HBase时出现“error while executing blob connection”错误。然而,在提供的引用中并没有直接提到HBase或Blob存储。引用[1]和引用[2]都是关于Flink的SQL执行错误,分别涉及领导通知问题和Oracle表不存在问题。 但是,用户明确表示要解决Flink连接HBase时出现的该错误。因此,我们需要分析这个错误可能的来源。 在Flink中连接HBase,通常使用HBase的客户端API。错误信息“error while executing blob connection”可能是由于以下原因: 1. **HBase配置问题**:例如,hbase-site.xml配置不正确,或者ZooKeeper配置错误。 2. **网络连接问题**:Flink任务管理器无法连接到HBase的ZooKeeper或RegionServer。 3. **依赖问题**:Flink作业中缺少必要的HBase连接器依赖。 4. **HBase表不存在或权限问题**:尝试访问的HBase表不存在,或者当前用户没有权限访问。 由于错误信息中提到了“blob connection”,这通常与二进制大对象(Blob)有关,但在HBase中,数据以字节数组形式存储,所以可能是在操作HBase的Blob(大对象)时出现的连接问题。 ### 解决方案步骤: #### 1. **检查HBase配置** - 确保在Flinkclasspath中有正确的`hbase-site.xml`文件。该文件应包含HBase集群的正确配置,如ZooKeeper的地址和端口。 - 在Flink作业中,可以通过以下方式指定HBase配置: ```java Configuration conf = HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum", "zk1,zk2,zk3"); conf.set("hbase.zookeeper.property.clientPort", "2181"); ``` 或者,将`hbase-site.xml`放在Flink的`conf`目录下。 #### 2. **验证网络连接** - 确保Flink任务管理器可以访问HBase的ZooKeeper集群和RegionServer。 - 检查防火墙设置,确保端口(如ZooKeeper的2181端口,HBase RegionServer的端口)是开放的。 #### 3. **检查依赖** - Flink作业需要包含HBase连接器的依赖。对于Maven项目,添加以下依赖(版本根据你的Flink和HBase版本调整): ```xml <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-hbase_2.11</artifactId> <version>${flink.version}</version> </dependency> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifactId> <version>${hbase.version}</version> </dependency> ``` 注意:确保Flink和HBase的版本兼容。 #### 4. **检查HBase表是否存在以及权限** - 在HBase shell中检查表是否存在:`list 'your_table'` - 确保运行Flink作业的用户有权限读写HBase表。可以在HBase中为表设置ACL,或者使用Kerberos认证(如果HBase集群启用了安全模式)。 #### 5. **查看完整错误日志** - 错误信息“error while executing blob connection”可能只是表面现象,需要查看完整的堆栈跟踪以确定根本原因。在Flink任务管理器的日志中查找更详细的错误信息。 #### 6. **代码示例** - 以下是一个Flink连接HBase的示例代码(Java): ```java import org.apache.flink.addons.hbase.TableInputFormat; import org.apache.flink.api.java.DataSet; import org.apache.flink.api.java.ExecutionEnvironment; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.conf.Configuration; public class HBaseExample { public static void main(String[] args) throws Exception { final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); DataSet<String> data = env.createInput(new TableInputFormat<String>() { @Override protected Scan getScanner() { Scan scan = new Scan(); scan.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("attr")); return scan; } @Override protected String getTableName() { return "my_table"; } @Override protected String mapResultToResultType(Result result) { return Bytes.toString(result.getValue(Bytes.toBytes("cf"), Bytes.toBytes("attr"))); } @Override protected void configure(Configuration parameters) { Configuration conf = HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum", "localhost"); conf.set("hbase.zookeeper.property.clientPort", "2181"); super.setConf(conf); } }); data.print(); } } ``` ### 可能的相关问题: 1. 如果HBase集群启用了Kerberos认证,如何在Flink中配置Kerberos认证? 2. 如何优化Flink读取HBase的性能? 3. 在Flink中如何写入HBase? 请根据上述步骤进行排查。如果问题仍然存在,请提供更详细的错误日志以便进一步分析。 </think>### Flink连接HBase时出现"error while executing blob connection"错误的解决方案 此错误通常发生在Flink与HBase交互过程中数据读写异常时。以下是系统化的排查步骤和解决方案: #### 1. **HBase配置验证** - **检查HBase服务状态** ```bash # 在HBase集群执行 hbase hbck -details # 验证集群健康状态 echo "status" | hbase shell # 检查RegionServer状态 ``` - **确认ZooKeeper连接** 在Flink的`flink-conf.yaml`中添加: ```yaml hbase.zookeeper.quorum: zk1,zk2,zk3 # 替换为实际ZK地址 hbase.zookeeper.property.clientPort: 2181 ``` 使用telnet验证连通性: ```bash telnet zk1 2181 ``` #### 2. **依赖冲突处理** - **检查依赖树** 在Flink lib目录保留必要依赖: ``` flink-connector-hbase_2.12-1.14.4.jar hbase-client-2.4.9.jar hbase-common-2.4.9.jar ``` 使用Maven排除冲突包: ```xml <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-hbase_2.12</artifactId> <version>1.14.4</version> <exclusions> <exclusion> <groupId>org.apache.hbase</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency> ``` #### 3. **连接代码优化** - **使用连接池管理** ```java HBaseConfiguration config = HBaseConfiguration.create(); config.set("hbase.zookeeper.quorum", "zk1,zk2,zk3"); try (Connection connection = ConnectionFactory.createConnection(config); Table table = connection.getTable(TableName.valueOf("my_table"))) { Get get = new Get(Bytes.toBytes("row_key")); Result result = table.get(get); // 数据处理逻辑 } catch (IOException e) { // 异常处理 } ``` #### 4. **序列化问题排查** - **检查RowKey设计** - 避免使用特殊字符`& | ? / \ %` - 使用一致的编码格式(推荐UTF-8) ```java Put put = new Put(Bytes.toBytes("row_key")); put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("col"), Bytes.toBytes(value)); ``` #### 5. **网络与安全配置** - **防火墙规则检查** ```bash # 在Flink节点执行 nc -zv hbase-master 16000 # HBase Master端口 nc -zv hbase-regionserver 16020 # RegionServer端口 ``` - **Kerberos认证配置** 在`flink-conf.yaml`中添加: ```yaml security.kerberos.login.keytab: /path/to/user.keytab security.kerberos.login.principal: user@REALM ``` #### 6. **日志分析技巧** 在Flink TaskManager日志中搜索关键词: ``` ERROR org.apache.hadoop.hbase.client.RpcRetryingCaller WARN org.apache.hadoop.hbase.ipc.RpcClient Exception in thread "Async I/O Worker" ``` 关注包含`Blob`或`Connection reset`的错误堆栈 > **重要提示**: > 若使用云服务(如Azure HDInsight),需检查托管存储的防火墙规则[^1],确保Flink集群IP在白名单中 ### 典型错误对照表 | 错误现象 | 可能原因 | 解决方案 | |-----------------------------------|--------------------------|-----------------------------| | 连接超时 | 网络不通/ZK配置错误 | 验证端口连通性 | | NoSuchColumnFamilyException | 列族不存在 | 检查HBase表结构 | | RegionServerAbortedException | RegionServer宕机 | 检查HBase集群状态 | | Failed to find any leader address | ZooKeeper选举问题 | 重启ZK集群 |
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值