1.熟悉hbase操作部署
2.掌握hbase shell基本操作
3.熟悉用java API来操作HBase分布式数据库
实验原理及内容
实验步骤
(1)启动hadoop
|
(2)输入jps检查是否启动成功
(3)进入hbase目录下启动hbase
通过create创建表
使用list查看建表详情
删除一条数据
删除一行所有数据
package cn.itcast.hbase;
import com.google.common.primitives.Bytes.*; import javafx.util.converter.ByteStringConverter; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.*; import org.apache.hadoop.hbase.client.*; import org.apache.hadoop.hbase.util.Bytes; import org.junit.Before; import org.junit.Test;
import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List;
public class HBaseTest {
//初始化Configuration对象 private Configuration conf = null; //初始化连接 private Connection coon = null;
@Before
public void init() throws IOException { //获取Configuration对象 conf = HBaseConfiguration.create(); //对于HBase客户端来说,只需知道HBase配置的zookeeper集群的地址即可 //Hbase的客户端向Hbase中读写数据时不需经过Hbase的主节点HMaster conf.set("hbase.zookeeper.quorum", "hadoop0:2181,hadoop1:2181,hadoop2:2181");
//获取连接 coon = ConnectionFactory.createConnection(conf); } }
@Test
public void createTable() throws IOException {
//获取表管理器对象 Admin admin = coon.getAdmin();
//创建表的描述对象,指定表的名字 HTableDescriptor tableDescriptor = new HTableDescriptor(TableName.valueOf("t_user_info".getBytes()));
//构造第一个列族描述对象,并指定列族名 HColumnDescriptor hcd1 = new HColumnDescriptor("base_info"); //构造第二个列族描述对象,并指定列族名 HColumnDescriptor hcd2 = new HColumnDescriptor("extra_info");
//为列族(hcd2)设置版本数量 (最小1,最大3) hcd2.setVersions(1, 3);
//将列族描述对象添加到表描述对象中 tableDescriptor.addFamily(hcd1).addFamily(hcd2);
//利用表描述对象来创建表 admin.createTable(tableDescriptor);
//关闭 admin.close(); coon.close();
} 运行create Table()方法进行测试,进入HBase shell交互式界面,执行list命令查看数据库
@Test
public void testPut() throws IOException {
//创建Table对象,通过Table对象来添加数据
Table table = coon.getTable(TableName.valueOf("t_user_info"));
//创建一个集合,用于存放Put对象 ArrayList
//构建Put 对象,指定行键 Put put01 = new Put(Bytes.toBytes("user001")); put01.addColumn(Bytes.toBytes("base_info"), Bytes.toBytes("username"), Bytes.toBytes("zhangsan")); put01.addColumn(Bytes.toBytes("base_info"),Bytes.toBytes("password"), Bytes.toBytes("123456"));
Put put02 = new Put(Bytes.toBytes("user002")); put02.addColumn(Bytes.toBytes("base_info"),Bytes.toBytes("username"), Bytes.toBytes("lisi")); put02.addColumn(Bytes.toBytes("extra_info"),Bytes.toBytes("married"), Bytes.toBytes("false"));
//把所有的put对象添加到一个集合中 puts.add(put01); puts.add(put02);
//提交所有插入数据的记录 table.put(puts);
//关闭 table.close(); coon.close(); }
运行testPut()方法进行测试,然后在hbase shell交互式机界面执行scan命令,查看数据表中的数据
@Test
public void testGet() throws IOException {
//获取一个Table对象 Table table = coon.getTable(TableName.valueOf("t_user_info"));
//创建Get查询参数对象,指定要获取的是哪一行数据 Get get = new Get("user001".getBytes());
//返回查询结果数据 Result result = table.get(get);
//获取结果中所有的数据(cell) List
for (Cell c:cells){ //获取行键 System.out.println("行键:"+Bytes.toString(CellUtil.cloneRow(c))); //获取列族 System.out.println("列族:"+Bytes.toString(CellUtil.cloneFamily(c))); //获取列 System.out.println("列:"+Bytes.toString(CellUtil.cloneQualifier(c))); //获取值 System.out.println("值:"+Bytes.toString(CellUtil.cloneValue(c))); }
//关闭 table.close(); coon.close(); }
@Test
public void testScan() throws IOException { //获取Table对象 Table table = coon.getTable(TableName.valueOf("t_user_info")); //创建Scan对象 Scan scan = new Scan(); //获取查询的数据 ResultScanner scanner = table.getScanner(scan); //获取ResultScanner 中的数据,以迭代方式返回 Iterator //遍历迭代器 while (iter.hasNext()){ //获取当前每一行的结果数据 Result result = iter.next(); //获取当前每一行中所有的Cell对象 List //迭代所有的Cell for (Cell c : cells) { //获取行键 byte[] rowArray = c.getRowArray(); //获取列族 byte[] familyArray = c.getFamilyArray(); //获取列族下列的名字 byte[] qualifierArray = c.getQualifierArray(); //获取列字段的值 byte[] valueArray = c.getValueArray(); //打印 rowArray,familyArray,qualifierArray,valueArray System.out.println("行键:"+new String(rowArray,c.getRowOffset(),c.getRowLength())); System.out.print("列族:"+new String(familyArray,c.getFamilyOffset(),c.getFamilyLength())); System.out.print(":"+"列:"+new String(qualifierArray,c.getQualifierOffset(),c.getQualifierLength())); System.out.println(" "+"值:"+new String(valueArray,c.getValueOffset(),c.getValueLength())); } System.out.println("------------------------------------"); } //关闭 table.close(); coon.close(); }
@Test
public void testDel() throws IOException {
//获取Table对象 Table table = coon.getTable(TableName.valueOf("t_user_info"));
//获取Delete对象,并指定一个行键 rowkey Delete delete = new Delete("user001".getBytes()); delete.addColumn("base_info".getBytes(),"password".getBytes());
//执行删除操作 table.delete(delete);
//关闭 table.close(); coon.close(); }
@Test
public void testDrop() throws IOException {
//获取一个表的管理 Admin admin = coon.getAdmin();
//删除表时先disable,将表设置为不可用,然后delete admin.disableTable(TableName.valueOf("t_user_info")); admin.deleteTable(TableName.valueOf("t_user_info"));
//关闭 admin.close(); coon.close();
}
|