上次将了HBase搭建完成后,一些Shell的使用,现在我们将了解一下HBase的代码控制,我使用的是java8以及hbase2.1.1版本
首先你的集群已经是搭建完成了,然后这次我使用的是IDEA,我们需要将集群上的hbase-site.xml和hdfs-site.xml以及日志配置文件下载下来,放入根目录,如下
准备好这些,还需要你配置好机器的maven环境,下面是用到的pom文件
junit
junit
4.12
org.apache.hbase
hbase-client
2.1.1
完成了这些,还需要注意一点就是你的配置文件中是你Linux主机的hostname,而你现在的机器如果没有配置Linux的ip映射,就会发生错误,那么两种办法可以解决,我的是win的系统,所以如果你把配置文件中的hostname配置到你的windows主机上,就请打开C:\Windows\System32\drivers\etc\host,输入你的{ip} {hostname}配置映射即可,第二种办法,就是你直接更改你的配置文件中的hostname为Linux的ip就可以了
在完成昨天的学习后,我们的HBase中已经没有任何我们自己建的表,那么我们就使用api来建立HBase表
建表
对于我这个版本来说,参考书上的代码已经是部分过期不推荐使用了,而是换成了xxxBuilder来更灵活的创建对象,这次我们创建test表,列族依旧是cf,如下
public void createTable() throws IOException {
//使用HBase配置创建新连接
Connection connection = ConnectionFactory.createConnection();
//或者HBase集群的管理员实例,实例不是线程安全的
Admin admin = connection.getAdmin();
//创建表名描述
TableName tableName = TableName.valueOf("default:test");
//创建表描述,并赋予表名
TableDescriptorBuilder tableBuilder = TableDescriptorBuilder.newBuilder(tableName);
//Builder构建列族信息
ColumnFamilyDescriptor cf = ColumnFamilyDescriptorBuilder.newBuilder("cf".getBytes()).build();
//将列族信息也赋予表描述对象
TableDescriptor table = tableBuilder.setColumnFamily(cf).build();
//创建表
admin.createTable(table);
//关闭
admin.close();
//关闭
connection.close();
}
如果控制台没有报错,那么就是创建成功了,然后我们在控制台的输出上可以看到许多有关会话相关的环境信息的打印以及会话地址与会话和连接关闭动作等
这里需要说一点,上面的TableName.valueOf("default:test");中的default,就类似RDBMS中的库的概念,我们昨天在shell操作中,并没有指定哪个库,那么默认就会有一个default库供我们使用,库的名次在HBase中叫做namespace
有了表,我们可以来修改表的信息,就像昨天在HBase shell中查看表属性一样,我们一样来修改VERSIONS属性,提前确定一下你目前的test表的VERSIONS => '1'
修改列族属性
修改cf列族的VERSIONS属性为5
public void modifyCF() throws IOException {
Connection connection = ConnectionFactory.createConnection();
Admin admin = connection.getAdmin();
TableName tableName = TableName.valueOf("default:test");
//修改列族的信息,肯定要得到列族描述对象
//需要注意的是,由于我们不指定VERSIONS的话,默认最大版本和最小版本都是1
//所以如果你像下面在修改VERSIONS的时候,需要遵循MinVersions < MaxVersions
//最终修改到HBase中去的值是最大值
ColumnFamilyDescriptor cf = ColumnFamilyDescriptorBuilder.newBuilder("cf".getBytes())
.setMinVersions(4).setMaxVersions(5).build();
//执行修改
admin.modifyColumnFamily(tableName,cf);
connection.close();
admin.close();
}
那么现在在shell窗口desc 'test'就会看到VERSIONS => '5',上面的修改操作是sync的,也有一个异步修改的方法,只是方法名不一样而已modifyColumnFamilyAsync(x,x),会修改了VERSIONS,那么修改别的属性只是在找方法名而已
好了,我们将列族内的属性修改了之后,他会为我们保留五个历史cell,所以下面我们就开始添加数据啦~
put添加数据
put没什么特别需要注意的,如下代码
public void putData() throws IOException {
Connection connection = ConnectionFactory.createConnection();
Table table = connection.getTable(TableName.valueOf("default:test"));
//创建put对象,一个put肯定