2010-03-25

HBase中的HMaster对象讨论

Posted in 云计算 at 13:17 Author:仲远

标签:

要想获得HBase中的各种元信息,或许比较有效的方式就是得到HMaster对象了。因为HMaster对象能够再获得getClusterStatus()、getConfiguration()、getRootRegionLocation()、getServerManager()等等许多重要的管理信息。

不过,在查阅了网上的一些资料以及查看官方提供的API说明后,我发现在一个HBase中,似乎只能有一个HMaster对象,因而不能够通过new HMaster(conf)来创建HMaster对象。因此只能通过想办法获得HMaster对象,来获取其它这些有用的信息。

但是在查阅如何获取HMaster对象的过程中,我逐渐发现,似乎要想从Client端获得这个对象是不太可能的一件事情,或许是因为HMaster对象功能过于强大,因此HBase在考虑安全性的时候,并不允许Client获得这个重要的对象。

(1)在Client端,或许只能通过HBaseAdmin来获得HMasterInterface的对象,这个对象只有最简单的几个方法调用。

HBaseConfiguration conf = new HBaseConfiguration();
HBaseAdmin hbaseAdmin = new HBaseAdmin(conf);  
HMasterInterface hMaster = hbaseAdmin.getMaster();

或者直接通过HBaseAdmin来获得getClusterStatus()(需要在HBase 0.20.x中才支持)来获得一些元信息。

(2)在HBase本身的项目中,是可以获得HMaster对象的,例如在org.apache.hadoop.hbase.LocalHBaseCluster的构造中,就初始化了一个HMaster的对象,在这里你可以将其传递给需要的方法。

在HBase提供的网页信息统计页面master.jsp中,是通过如下方式获得HMaster对象的:

HMaster master = (HMaster)getServletContext().getAttribute(HMaster.MASTER);
HBaseConfiguration conf = master.getConfiguration();
HServerAddress rootLocation = master.getRootRegionLocation();
Map<byte [], MetaRegion> onlineRegions = master.getOnlineMetaRegions();
Map<String, HServerInfo> serverToServerInfos = master.getServersToServerInfo();

本文可以自由转载,转载时请保留全文并注明出处:
转载自仲子说 [ http://www.wangzhongyuan.com/ ]
原文链接:

Leave a Comment

*
To prove you're a person (not a spam script), type the security text shown in the picture. Click here to regenerate some new text.
Click to hear an audio file of the anti-spam word