集群外访问Hbase – access Hbase use a java client program

集群外访问Hbase – access Hbase use a java client program

 

集群环境:

Master -

10.123.122.151          test-Master

 

Slave   -

10.123.122.163          test-DATA01

10.123.122.162          test-DATA02

10.123.122.156          test-DATA03 zookeeper

 

由于需要以client方式访问hbase读写数据, 在原有环境hadoop-0.20.2+737 (cdh3) + hbase-0.89.20100924+28 + jdk-6u20 下总是不能成功连接,典型的错误如下:

Session establishment complete 但是无法继续下去(log4j 调整到 debug模式可以看到详细的日志信息)

 

[INFO] Initiating client connection, connectString=Test-DATA03:2181 sessionTimeout=60000 watcher=org.apache.hadoop.hbase.zookeeper.ZooKeeperWrapper@423e5d1

[DEBUG] zookeeper.disableAutoWatchReset is false

[DEBUG] <Test-DATA03:/hbase,org.apache.hadoop.hbase.client.HConnectionManager>Connected to zookeeper again

[INFO] Opening socket connection to server Test-DATA03/10.123.122.156:2181

[INFO] Socket connection established to Test-DATA03/10.123.122.156:2181, initiating session

[DEBUG] Session establishment request sent on Test-DATA03/10.123.122.156:2181

[INFO] Session establishment complete on server Test-DATA03/10.123.122.156:2181, sessionid = 0x1300c46dd880ba6, negotiated timeout = 60000

[DEBUG] Reading reply sessionid:0x1300c46dd880ba6, packet:: c

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要查询HBase集群中的所有用户,可以使用HBaseJava API来实现。以下是一种可能的实现方式: ``` Configuration config = HBaseConfiguration.create(); Connection connection = ConnectionFactory.createConnection(config); Admin admin = connection.getAdmin(); HBaseProtos.SnapshotDescription snapshot = HBaseProtos.SnapshotDescription.newBuilder() .setName("user_snapshot") .setTable(TableName.valueOf("user_table")) .setType(HBaseProtos.SnapshotDescription.Type.FLUSH) .build(); admin.snapshot(snapshot); Path snapshotDir = new Path("/hbase/snapshot/user_snapshot"); FileSystem fs = FileSystem.get(config); FileStatus[] files = fs.listStatus(snapshotDir); for (FileStatus file : files) { if (file.getPath().toString().endsWith(".regioninfo")) { HRegionInfo regionInfo = HRegionInfo.loadRegionInfoFromBytes( fs.open(file.getPath()).readAllBytes() ); Set<String> users = regionInfo.getTableDesc().getValue("USER").keySet(); System.out.println("Users in region " + regionInfo.getRegionNameAsString() + ": " + users); } } admin.deleteSnapshot("user_snapshot"); admin.close(); connection.close(); ``` 以上代码中,首先创建HBase的Configuration对象,然后使用ConnectionFactory.createConnection方法创建Connection对象,接着使用Connection.getAdmin方法获取Admin对象。然后创建一个快照(Snapshot)来备份用户表,并获取快照文件所在的目录路径。接着使用FileSystem.listStatus方法获取快照目录下的所有文件,并遍历每个文件。如果文件名以.regioninfo结尾,说明该文件是一个Region的元数据文件,从中解析出用户信息并输出。最后删除备份的快照,并关闭Admin和Connection对象。 请注意,以上代码中的表名、列族名、列名等需要根据实际情况进行修改。同时,代码中的用户信息是通过Region的元数据文件中的表描述符(TableDescriptor)获取的,因此需要在创建表时将用户信息添加到表描述符中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值