上节课我们一起简单学习了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;
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();
}
//首先得到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)
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来建表的操作成功了!!
这节课我们就一起学习到这里。