了解 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.xmlhbase-site.xml 加载配置。

【讨论】:

谢谢。它确实有助于理解底层实现。如果我们想从远程主机执行 java 客户端,那么我们需要覆盖下面 RamaPrada G 建议的配置。 是的,您可以使用conf.set() 直接设置配置或复制这些xml 文件并加载它们。无论哪种方式,它都应该具有相同的效果。

以上是关于了解 HBase Java 客户端的主要内容,如果未能解决你的问题,请参考以下文章

HBase Java 客户端无法访问远程 HBase 区域服务器

Hbase学习之三Hbase Java API

HBase 常用java api获得客户端,创建表,查询,删除

Hbase王国游记之:Hbase客户端API初体验

HBase的java客户端测试---DDL操作

HBase的java客户端测试---DML操作