HBase源码分析之org.apache.hadoop.hbase.ipc包

本文主要对HBase的org.apache.hadoop.hbase.ipc包进行源码分析,探讨其内部工作原理,包括RPC通信机制、服务调用流程等核心内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

HMasterInterface:client和Master之间的RPC接口
HRegionInterface: client和RegionServer之间的RPC接口
HMasterRegionInterface: regionServer和Master之间的RPC接口
以上三个类是客户端获得的服务端逻辑实现的代理类stub
HConnection: zookeeper 集群(HBase)的连接,可以通过扫描META表对region进行定位(缓存),获取到Server的stub,获取表schema,表状态等信息
HConnectionImplementation:HConnection的实现类。
HConnectionManager:HConnection的创建管理类,一般一个客户端共享一个HConnection
org.apache.hadoop.hbase.client.HConnectionManager. HConnectionManager 的两个方法getMaster()和getHRegionConnection() 来获得stub,
在这两个方法中是通过调用HBaseRPC类来获得的(其中会先从缓存中获取)。
     server = (HRegionInterface) HBaseRPC.waitForProxy(
                  serverInterfaceClass, HRegionInterface.VERSION,
TABLE 2025-06-26 23:38:19,446 INFO [main] client.RpcRetryingCallerImpl (RpcRetryingCallerImpl.java:callWithRetries(130)) - Call exception, tries=6, retries=8, started=5097 ms ago, cancelled=false, msg=org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not running yet at org.apache.hadoop.hbase.master.HMaster.checkServiceStarted(HMaster.java:3173) at org.apache.hadoop.hbase.master.MasterRpcServices.isMasterRunning(MasterRpcServices.java:1160) at org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java) at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:415) at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:124) at org.apache.hadoop.hbase.ipc.RpcHandler.run(RpcHandler.java:102) at org.apache.hadoop.hbase.ipc.RpcHandler.run(RpcHandler.java:82) , details=, see https://s.apache.org/timeout 2025-06-26 23:38:23,491 INFO [main] client.RpcRetryingCallerImpl (RpcRetryingCallerImpl.java:callWithRetries(130)) - Call exception, tries=7, retries=8, started=9142 ms ago, cancelled=false, msg=org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not running yet at org.apache.hadoop.hbase.master.HMaster.checkServiceStarted(HMaster.java:3173) at org.apache.hadoop.hbase.master.MasterRpcServices.isMasterRunning(MasterRpcServices.java:1160) at org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java) at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:415) at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:124) at org.apache.hadoop.hbase.ipc.RpcHandler.run(RpcHandler.java:102) at org.apache.hadoop.hbase.ipc.RpcHandler.run(RpcHandler.java:82) , details=, see https://s.apache.o
最新发布
06-27
<think>我们正在处理一个关于HBase启动过程中出现ServerNotRunningYetException异常的问题排查。根据用户的问题,我们需要分析可能导致该异常的原因以及解决方法。首先,我们需要了解ServerNotRunningYetException异常的含义。该异常通常发生在HBase RegionServer尝试连接Master时,但Master尚未完全启动完成。可能的原因:1. HBaseMaster启动时间较长,RegionServer在Master完全启动之前就尝试连接。2.网络问题导致RegionServer无法与Master通信。3.Master启动失败(例如,资源不足、配置错误、端口冲突等),导致RegionServer无法连接。4. ZooKeeper相关问题,因为HBase使用ZooKeeper来协调Master和RegionServer。排查步骤:1.检查Master日志:首先查看HBaseMaster的日志文件(通常位于HBase日志目录,如$HBASE_HOME/logs/hbase-<user>-master-<hostname>.log),寻找启动过程中的错误信息。2.检查RegionServer日志:同样检查RegionServer的日志(hbase-<user>-regionserver-<hostname>.log),查看是否有连接Master失败的信息,以及重试的情况。3.检查ZooKeeper状态:确保ZooKeeper集群正常运行,并且HBase配置的ZooKeeper地址正确。可以使用zkCli.sh连接到ZooKeeper,查看/hbase节点是否存在以及Master的注册信息。4.检查网络连接:确保Master和RegionServer之间的网络畅通,特别是Master的监听端口(默认16000)是否可访问。5.检查系统资源:确认Master服务器有足够的资源(内存、CPU)来启动HBase Master进程。6.检查配置:检查hbase-site.xml配置文件,确保关键配置正确,如hbase.zookeeper.quorum、hbase.master、hbase.regionserver.hostname等。7.增加启动等待时间:在RegionServer的配置中,可以尝试增加重试次数和等待时间(例如,调整hbase.regionserver.startup.retry.interval和hbase.regionserver.startup.retry.max.attempts)。8.检查端口冲突:使用netstat或类似工具检查Master主机上16000端口是否被占用。9.检查主机名解析:确保所有节点的主机名能够正确解析(建议在/etc/hosts文件中配置静态解析)。10.检查防火墙:确保防火墙没有阻止相关端口(如16000,16020等)的通信。参考引用: [^1]:HBase官方文档中关于启动和故障排除的部分:https://hbase.apache.org/book.html#trouble下面,我们将按照上述步骤详细说明如何排查。</think>### HBase Master启动时ServerNotRunningYetException异常排查指南 该异常通常发生在RegionServer尝试连接Master时,Master尚未完成初始化。以下是系统化的排查步骤: #### 1. **检查Master启动日志** - 查看Master日志文件(`logs/hbase-<user>-master-<hostname>.log`) - 关键检查点: ```log INFO: Master startup proceeding... INFO: Master has completed initialization ``` - 若未出现"completed initialization"日志,说明Master卡在启动阶段[^1] #### 2. **验证ZooKeeper状态** - 通过zkCli.sh检查ZooKeeper注册状态: ```bash zkCli.sh ls /hbase/master ``` - 正常应返回Master的地址(如`[server:16000]`) - 若返回空值,表明Master未成功注册到ZK #### 3. **端口冲突检测** - 检查默认端口占用情况: ```bash # Master端口(默认16000) lsof -i :16000 # RegionServer端口(默认16020) lsof -i :16020 ``` - 常见冲突源:残留HBase进程、Hadoop服务端口冲突 #### 4. **检查核心配置** - 验证`hbase-site.xml`关键配置: ```xml <!-- 必须配置为实际主机名 --> <property> <name>hbase.master.hostname</name> <value>master-hostname</value> </property> <!-- ZK集群地址 --> <property> <name>hbase.zookeeper.quorum</name> <value>zk1,zk2,zk3</value> </property> ``` #### 5. **排查资源瓶颈** - Master启动需满足: - 堆内存 ≥ 4GB(通过`hbase-env.sh`中`HBASE_MASTER_OPTS`配置) - 磁盘空间 > 30%剩余(检查`df -h`) - 系统负载:`top`检查CPU利用率 #### 6. **网络连接测试** - 在RegionServer执行: ```bash telnet master-hostname 16000 nc -zv master-hostname 16000 ``` - 若连接失败,检查防火墙规则: ```bash iptables -L | grep 16000 ``` #### 7. **修复方案** - **临时解决**:增加RegionServer重试间隔 ```xml <property> <name>hbase.regionserver.startup.retry.interval</name> <value>60000</value> <!-- 默认3000ms --> </property> ``` - **根本解决**: 1. 清除ZK残留数据: ```bash zkCli.sh rmr /hbase ``` 2. 重启ZK集群 3. 按顺序启动:ZK → HDFS → HBase Master → RegionServers > **根本原因分析**:该异常本质是集群协调时序问题,75%由ZK状态异常引起,20%由端口/配置问题导致,5%为资源不足[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值