了解 HBase Java 客户端
Posted
技术标签:
【中文标题】了解 HBase Java 客户端【英文标题】:Understanding HBase Java Client 【发布时间】:2016-06-17 06:31:06 【问题描述】:我几天前开始使用 Hbase 并浏览了网上的所有资料。
我已经安装并配置了 HBase,shell 命令运行良好。
我有一个 Java 客户端示例,可以从 HBase 表中获取数据并成功执行,但我不明白它是如何工作的?在代码中我们没有提到Hbase服务器的端口,主机?它如何从表中获取数据?
这是我的代码:
public class RetriveData
public static void main(String[] args) throws IOException
// Instantiating Configuration class
Configuration config = HBaseConfiguration.create();
// Instantiating HTable class
@SuppressWarnings( "deprecation", "resource" )
HTable table = new HTable(config, "emp");
// Instantiating Get class
Get g = new Get(Bytes.toBytes("1"));
// Reading the data
Result result = table.get(g);
// Reading values from Result class object
byte [] value = result.getValue(Bytes.toBytes("personal data"),Bytes.toBytes("name"));
byte [] value1 = result.getValue(Bytes.toBytes("personal data"),Bytes.toBytes("city"));
// Printing the values
String name = Bytes.toString(value);
String city = Bytes.toString(value1);
System.out.println("name: " + name + " city: " + city);
输出如下:
Output:
name: raju city: hyderabad
【问题讨论】:
【参考方案1】:我同意 Binary Nerds 的回答
添加一些更有趣的信息以便更好地理解。
你的问题:
我不明白它是如何工作的?在我们没有的代码中 提到Hbase服务器的端口,主机?它如何能够获取 表中的数据?
因为你是在集群中执行这个程序
// Instantiating Configuration class
Configuration config = HBaseConfiguration.create()
所有集群属性都将在集群内部进行处理。因为您在集群中并且正在执行 hbase java 客户端程序。
现在尝试如下(在 Windows 上以与远程机器 eclipse 不同的方式执行相同的程序,以找出您之前和现在所做的不同之处)。
public static Configuration configuration; // this is class variable
static //fill clusternode1,clusternode2,clusternode3 from your cluster
configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.property.clientPort", "2181");
configuration.set("hbase.zookeeper.quorum",
"clusternode1,clusternode2,clusternode3");
configuration.set("hbase.master", "clusternode1:600000");
希望这能帮助你理解。
【讨论】:
【参考方案2】:如果您查看github 上的HBaseConfiguration
的源代码,您可以看到它在调用create()
时做了什么。
public static Configuration create()
Configuration conf = new Configuration();
// In case HBaseConfiguration is loaded from a different classloader than
// Configuration, conf needs to be set with appropriate class loader to resolve
// HBase resources.
conf.setClassLoader(HBaseConfiguration.class.getClassLoader());
return addHbaseResources(conf);
接着是:
public static Configuration addHbaseResources(Configuration conf)
conf.addResource("hbase-default.xml");
conf.addResource("hbase-site.xml");
checkDefaultsVersion(conf);
HeapMemorySizeUtil.checkForClusterFreeMemoryLimit(conf);
return conf;
所以它从你的 HBase 配置文件 hbase-default.xml
和 hbase-site.xml
加载配置。
【讨论】:
谢谢。它确实有助于理解底层实现。如果我们想从远程主机执行 java 客户端,那么我们需要覆盖下面 RamaPrada G 建议的配置。 是的,您可以使用conf.set()
直接设置配置或复制这些xml 文件并加载它们。无论哪种方式,它都应该具有相同的效果。以上是关于了解 HBase Java 客户端的主要内容,如果未能解决你的问题,请参考以下文章
HBase Java 客户端无法访问远程 HBase 区域服务器