1.HBase简单介绍
HBase是一种构建在HDFS之上的分布式、面向列的存储系统。在需要实时读写、随机访问超大规模数据集时,可以使用HBase。
HBase以表的形式存储数据。表是由行和列组成,列划分为若干个列族。
存储形式如下:
建表时,不需要限定表中的字段,只要制定若干个列族就可以了。插入数据时,列族中可以任意存储多个列。
一个列名的值可以有多个版本
要查询一个具体字段的值,需要指定的坐标:表名-->行键-->列族:列名-->版本
2.Java客户端操作HBase建表
创建表的时候要指定列名和列族名
package neu.tt.hbase;
import java.io.IOException;
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.MasterNotRunningException;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
import org.apache.hadoop.hbase.client.HBaseAdmin;
public class CreateTableTest {
public static void main(String[] args) throws MasterNotRunningException, ZooKeeperConnectionException, IOException{
//设置HBase据库的连接配置参数
Configuration conf =HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "slave2:2181,slave3:2181,slave4:2181");
//建立表名
TableName tableName=TableName.valueOf("hbasetest");
//列族名
String[] family = { "basicinfo","deptinfo"};
HBaseAdmin hbaseAdmin = new HBaseAdmin(conf);
//创建表对象
HTableDescriptor hbaseTableDesc = new HTableDescriptor(tableName);
for(int i = 0; i < family.length; i++) {
//设置列族名
hbaseTableDesc.addFamily(new HColumnDescriptor(family[i]));
}
hbaseAdmin.createTable(hbaseTableDesc);
hbaseAdmin.close();
}
}
3.插入数据
@Test
public void insertTest() throws Exception{
HTable hbasetest = new HTable(conf, "hbasetest");
//rk0001表示row key的值
Put name=new Put(Bytes.toBytes("rk0001"));
//源码:public Put add(byte [] family, byte [] qualifier, byte [] value)
name.add(Bytes.toBytes("basicinfo"), Bytes.toBytes("name"),Bytes.toBytes("tiantian"));
Put age=new Put(Bytes.toBytes("rk0001"));
age.add(Bytes.toBytes("basicinfo"), Bytes.toBytes("age"),Bytes.toBytes(18));
ArrayList<Put> puts = new ArrayList<>();
puts.add(name);
puts.add(age);
hbasetest.put(puts);
hbasetest.close();
}
附加:这是hbase的源码下载地址