Hbase基本操作

1.熟悉hbase操作部署

2.掌握hbase shell基本操作

3.熟悉用java API来操作HBase分布式数据库

实验原理及内容 实验步骤 启动hbase (1)启动hadoop
(2)输入jps检查是否启动成功 (3)进入hbase目录下启动hbase 进入HBase shell交互界面 hbase shell操作 创建表 通过create创建表 使用list查看建表详情 插入操作 扫描操作 查看操作 更新操作 获取指定字段操作 统计操作 删除操作 删除一条数据 删除一行所有数据 清空表中数据 删除表 HBase的java API操作 创建工程并导入依赖 <dependencies> <!-- 单元测试依赖 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <!-- HBase客户端依赖 --> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifactId> <version>2.4.6</version> </dependency> <!-- HBase 核心依赖--> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-common</artifactId> <version>2.4.6</version> </dependency> </dependencies> 创建java类,连接集群 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> puts = new 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<Cell> cells = result.listCells(); 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<Result> iter = scanner.iterator(); //遍历迭代器 while (iter.hasNext()){ //获取当前每一行的结果数据 Result result = iter.next(); //获取当前每一行中所有的Cell对象 List<Cell> cells = result.listCells(); //迭代所有的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(); }
经验分享 程序员 微信小程序 职场和发展