博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hbase(5)---API示例
阅读量:4086 次
发布时间:2019-05-25

本文共 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/

你可能感兴趣的文章
我对无人机重心高度的理解
查看>>
现在明白为什么无名博客里好几篇文章在讲传感器的滞后
查看>>
实际我看Pixhawk定高模式其实也是飞得很稳,飘得也不厉害
查看>>
Pixhawk解锁常见错误
查看>>
C++的模板化等等的确实比C用起来方便多了
查看>>
ROS是不是可以理解成一个虚拟机,就是操作系统之上的操作系统
查看>>
用STL algorithm轻松解决几道算法面试题
查看>>
ACfly之所以不怕炸机因为它觉得某个传感器数据不安全就立马不用了
查看>>
我发觉,不管是弄ROS OPENCV T265二次开发 SDK开发 caffe PX4 都是用的C++
查看>>
ROS的安装(包含文字和视频教程,我的ROS安装教程以这篇为准)
查看>>
国内有个码云,gitee
查看>>
原来我之前一直用的APM固件....现在很多东西明白了。
查看>>
realsense-ros里里程计相关代码
查看>>
似乎写个ROS功能包并不难,你会订阅话题发布话题,加点逻辑处理,就可以写一些基础的ROS功能包了。
查看>>
if __name__ == ‘__main__‘:就是Python里的main函数,脚本从这里开始执行,如果没有main函数则从上到下顺序执行。
查看>>
PX4官方用户和开发手册的首页面是会给你选择英文和中文的
查看>>
网络协议栈我是不是可以这么理解,就是把你要发送的数据自动处理成TCPIP格式的消息发出去,这种底层的转换不需要你弄了。
查看>>
除了LwIP还有uIP
查看>>
《跟工程师学嵌入式开发》这本书最后的终极项目我反而觉得有说头
查看>>
博士的申请考核制
查看>>