学习Hadoop第二十八课(java通过调用接口来操作HBase)

来源:互联网 发布:战狼2知乎 编辑:程序博客网 时间:2024/05/16 16:21

       上节课我们一起简单学习了HBase的一些理论,这节课我们一起学习用java调HBase的接口来操作HBase。

       我们首先建一个工程,这里我们还用原始的新建一个lib包。然后我们把下载的hbase-0.96.2-hadoop2-bin.tar.gz包解压,解压后有个lib包,我们把lib包下的jar包都拷贝到工程的lib目录下并Build path到工程当中。下图当中我只是截取了jar包的一部分。

          下面我把代码粘贴出来。

package com.myhbase;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.HBaseAdmin;
public class HBaseDemo {
 public static void main(String[] args) throws Exception {
  //首先得到HBase的配置对象
  Configuration conf=HBaseConfiguration.create();
  //配置Client连向谁,我们的Client连向的是zookeeper,因此我们配置的是zookeeper的信息,这些信息存在hbase-site.xml当中。
  //我们会觉得不可思议,建HBase表,竟然Client连的既不是HMaster也不是HRegionServer,而是zookeeper,其实Client连zookeeper
  //zookeeper只是负责协调,真正执行建表语句的还是HMaster,只不过zookeeper帮我们去找到HMaster并告诉它应该做什么了而已。
  conf.set("hbase.zookeeper.quorum","itcast04:2181,itcast05:2181,itcast06:2181");  
  
  //要创建HBase表,我们需要HBaseAdmin对象
  HBaseAdmin admin=new HBaseAdmin(conf);
  
  //admin的create方法接收的参数是一个HTableDescriptor对象,因此我们需要先获取HTableDescriptor,
  //我们给表起名为peoples(人类)
  HTableDescriptor htd= new HTableDescriptor(TableName.valueOf("peoples"));
  
  //我们还需要给表描述对象添加一些属性,我们在建表的时候会创建列族,首先我们创建一个名叫"info"的列族。
  HColumnDescriptor hcd_info=new HColumnDescriptor("info");
  //每个列族可以指定最大的版本存储数量,这里我们给列族"info"设置版本最大存储数量是3
  hcd_info.setMaxVersions(3);
  //接着我们再创建第二个列族
  HColumnDescriptor hcd_data=new HColumnDescriptor("data");
  
  //创建完两个列族,我们需要把列族添加到表的描述对象当中
  htd.addFamily(hcd_info);
  htd.addFamily(hcd_data);
  
  //这时我们开始创建表,前面已经设置了一些属性值,因此生成的表便会带一些属性的。
  admin.createTable(htd);
  //用完admin对象要记得关闭
  admin.close();
 }
 
}
        我们执行上面的代码,在Console控制台我们会看到如下所示的信息,其实这不算问题,这只是Windows和Linux平台不同而报的异常,程序捕捉到了该异常没有抛出来,只是打印出来了而已。这不影响我们的执行结果。
2016-11-03 00:49:34,201 ERROR [main] util.Shell (Shell.java:getWinUtilsPath(303)) - Failed to locate the winutils binary in the hadoop binary path
java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.

 at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:278)
 at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:300)
 at org.apache.hadoop.util.Shell.<clinit>(Shell.java:293)
 at org.apache.hadoop.util.StringUtils.<clinit>(StringUtils.java:76)
 at org.apache.hadoop.conf.Configuration.getStrings(Configuration.java:1514)
 at org.apache.hadoop.hbase.zookeeper.ZKConfig.makeZKProps(ZKConfig.java:113)
 at org.apache.hadoop.hbase.zookeeper.ZKConfig.getZKQuorumServersString(ZKConfig.java:265)
 at org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher.<init>(ZooKeeperWatcher.java:159)
 at org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher.<init>(ZooKeeperWatcher.java:134)
 at org.apache.hadoop.hbase.client.ZooKeeperKeepAliveConnection.<init>(ZooKeeperKeepAliveConnection.java:43)
 at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getKeepAliveZooKeeperWatcher(HConnectionManager.java:1710)
 at org.apache.hadoop.hbase.client.ZooKeeperRegistry.getClusterId(ZooKeeperRegistry.java:82)
 at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.retrieveClusterId(HConnectionManager.java:806)
 at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.<init>(HConnectionManager.java:633)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
 at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
 at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
 at org.apache.hadoop.hbase.client.HConnectionManager.createConnection(HConnectionManager.java:387)
 at org.apache.hadoop.hbase.client.HConnectionManager.createConnection(HConnectionManager.java:366)
 at org.apache.hadoop.hbase.client.HConnectionManager.getConnection(HConnectionManager.java:247)
 at org.apache.hadoop.hbase.client.HBaseAdmin.<init>(HBaseAdmin.java:183)
 at com.myhbase.HBaseDemo.main(HBaseDemo.java:21)
         我们到管理界面来看看是不是有我们刚才生成的表,我输入的地址是169.254.254.10:60010来访问其中169.254.254.10是我的itcast01的IP地址,你输入你itcast01的IP地址。60010是HBase的默认端口。如下图所示,可以看到,Tables当中已经有我们刚才生成的peoples表了,而且列族的名字,版本数量都一致,说明我们通过java来建表的操作成功了!!
 
          这节课我们就一起学习到这里。

0 0
原创粉丝点击