本文共 8810 字,大约阅读时间需要 29 分钟。
package com.wzy.hbase;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.Test;import java.io.IOException;public class HbaseTest { private static final String ZK_CONNECT_KEY="hbase.zookeeper.quorum"; private static final String ZK_CONNECT_VALUE="172.10.0.11:2181,172.10.0.12:2181,172.10.0.21:2181,172.10.0.22:2181,172.10.0.23:2181"; private static Connection conn=null; private static Admin admin=null; /** * 获得连接 * */ public static Connection getConn(){ //创建一个可以用来管理hbase配置信息的conf对象 Configuration conf=HBaseConfiguration.create(); //设置当前的程序去寻找hbase在哪里 conf.set(ZK_CONNECT_KEY,ZK_CONNECT_VALUE); conf.set("zookeeper.znode.parent","/hbase"); //创建连接对象 try { conn= ConnectionFactory.createConnection(conf); } catch (IOException e) { e.printStackTrace(); } return conn; } /** * 获得管理员对象 * */ public static Admin getAdmin(){ try { admin=conn.getAdmin(); } catch (IOException e) { e.printStackTrace(); } return admin; } /** * 通过表名和列簇创建表 (表必须包含表名称和列簇) * */ public void createTable(String tableName,String[] family) throws IOException { TableName tbName= TableName.valueOf(tableName); //创建表前,先判断表是否存在 if(admin.tableExists(tbName)){ //表存在 System.out.println(tbName+"表已经存在"); }else{ //表不存在 //通过表名称创建列簇 HTableDescriptor htd=new HTableDescriptor(tbName); //向列簇中添加列的信息 for(String str:family){ HColumnDescriptor hcd=new HColumnDescriptor(str); //向表中填充列簇 htd.addFamily(hcd); } //创建表 admin.createTable(htd); //判断表是否创建成功 if(admin.tableExists(tbName)){ System.out.println(tbName+"表创建成功"); }else{ System.out.println(tbName+"表创建失败"); } } } /** * 查询所有的表 * */ public void getAllTables() throws IOException { //获取列簇的描述信息 HTableDescriptor[] htds=admin.listTables(); //遍历列簇描述信息 for(HTableDescriptor htd:htds){ //转化为名 String tbName=htd.getNameAsString(); //获取列的描述信息 HColumnDescriptor[] hcds=htd.getColumnFamilies(); System.out.println("表名称"+tbName); //遍历列簇 for(HColumnDescriptor hcd:hcds){ //获取列簇的名字 String columnFamilyName=hcd.getNameAsString(); System.out.println("\t"+"列簇的名字:"+columnFamilyName); } } } /** * 查询表的列簇属性 * */ public void descTable(String tableName) throws IOException { //转化表名称 TableName tbName=TableName.valueOf(tableName); //判断表是否存在 if(admin.tableExists(tbName)){ //表存在 //获取列簇的描述信息 HTableDescriptor htd=admin.getTableDescriptor(tbName); //获取列簇中列的信息 HColumnDescriptor[] hcds=htd.getColumnFamilies(); //遍历列 for(HColumnDescriptor columnFamily:hcds){ System.out.println(columnFamily); } }else{ //表不存在 System.out.println(tbName+"表不存在"); } } /** * 删除表,先disabled停用表 * */ public void disableTable(String tabName) throws IOException { TableName tbName=TableName.valueOf(tabName); //判断表是否存在 if(admin.tableExists(tbName)){ //存在,再判断表是否停用 if(admin.isTableEnabled(tbName)){ admin.disableTable(tbName); //停用表 }else{ System.out.println(tbName+"不是活动状态"); } }else{ System.out.println(tbName+"表不存在"); } } /** * 删除表 * */ public void dropTable(String tableName) throws IOException { //转化表名称 TableName tbName=TableName.valueOf(tableName); //判断表是否存在 if(admin.tableExists(tbName)){ //判断表是否停用 boolean tabStatus=admin.isTableEnabled(tbName); if(tabStatus){ //使表变成不可用状态 admin.disableTable(tbName); } //删除表 admin.deleteTable(tbName); //删除后,再次判断表是否存在 if(admin.tableExists(tbName)){ System.out.println("删除失败"); }else{ System.out.println("删除成功"); } }else{ System.out.println(tbName+"表不存在"); } } /** * 修改表,通过表名称 * */ public void updateTable(String tableName) throws IOException { //转化为表名称 TableName tbName=TableName.valueOf(tableName); //判断要修改的表是否存在 if(admin.tableExists(tbName)){ //表存在,判断表是否启用 //表的可用状态 boolean tabEnabled=admin.isTableEnabled(tbName); if(tabEnabled){ //使表变为不可用 admin.disableTable(tbName); } //根据表名称得到表 HTableDescriptor htd=admin.getTableDescriptor(tbName); //创建列簇结构对象,添加列 HColumnDescriptor columnFamily1=new HColumnDescriptor("cf1".getBytes()); HColumnDescriptor columnFamily2=new HColumnDescriptor("cf2".getBytes()); htd.addFamily(columnFamily1); htd.addFamily(columnFamily2); //修改列簇 admin.modifyTable(tbName,htd); }else{ System.out.println(tbName+"表不存在"); } } /** * 添加数据 * */ public void putData(String tableName,String rowKey,String familyName,String columnName,String value) throws IOException { //转化为表名 TableName tbName=TableName.valueOf(tableName); //添加数据之前,判断表是否存在,不存在的话就先创建表 if(admin.tableExists(tbName)){ }else{ //根据表名称创建表结构 HTableDescriptor htd=new HTableDescriptor(tbName); //定义列簇的名字 HColumnDescriptor columnFamilyName=new HColumnDescriptor(familyName); htd.addFamily(columnFamilyName); admin.createTable(htd); } Table table=conn.getTable(tbName); Put put=new Put(rowKey.getBytes()); put.addColumn(familyName.getBytes(),columnName.getBytes(),value.getBytes()); table.put(put); } /** * sacn全表数据 * */ public ResultScanner getResultScan(String tableName) throws IOException { ResultScanner result; TableName tbName=TableName.valueOf(tableName); //判断表是否存在 if(admin.tableExists(tbName)){ Table table=conn.getTable(tbName); Scan scan=new Scan(); result=table.getScanner(scan); for(Result rs:result){ for(KeyValue kv:rs.list()){ System.out.println(Bytes.toString(kv.getRow())); System.out.println(Bytes.toString(kv.getFamily())); System.out.println(Bytes.toString(kv.getQualifier())); System.out.println(Bytes.toString(kv.getValue())); System.out.println(kv.getTimestamp()); } } }else{ result=null; } System.out.println(result.toString()); return result; } /** * 根据rowkey查询数据 * */ public Result getResult(String tableName,String rowKey) throws IOException { Result result; TableName tbName=TableName.valueOf(tableName); if(admin.tableExists(tbName)){ Table table=conn.getTable(tbName); Get get=new Get(rowKey.getBytes()); result=table.get(get); }else{ result=null; } return result; } /** * 删除数据 * */ public void deleteColumn(String tableName,String rowKey) throws IOException { TableName tbName=TableName.valueOf(tableName); if(admin.tableExists(tbName)){ Table table=conn.getTable(tbName); Delete delete=new Delete(rowKey.getBytes()); table.delete(delete); }else{ System.out.println(tbName+"表不存在"); } } @Test public void test() throws IOException { System.out.println("开始测试"); getConn(); getAdmin(); HbaseTest hdemo=new HbaseTest(); //创建表 //hdemo.createTable("student",new String[]{"base_info","address_info"}); //测试查询所有表 //hdemo.getAllTables(); //查询表的列簇属性 //hdemo.descTable("student"); //删除表 //hdemo.dropTable("student"); //修改tableName的所有列簇,将列簇修改为cf1和cf2 //hdemo.updateTable("student"); //向表中插入数据 //String tableName,String rowKey,String familyName,String columnName,String value //hdemo.putData("student","rowKey01","cf1","username","张三"); //查询所有数据 hdemo.getResultScan("student"); }}
转载地址:http://mluii.baihongyu.com/