Hbase基本操作
HBASE基本操作
1.熟悉hbase操作部署
2.掌握hbase shell基本操作
3.熟悉用java API来操作HBase分布式数据库
实验原理及内容 实验步骤
(1)启动hadoop |
(2)输入jps检查是否启动成功 (3)进入hbase目录下启动hbase
通过create创建表 使用list查看建表详情
删除一条数据 删除一行所有数据
<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>
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(); } |
更多推荐
所有评论(0)