zoukankan      html  css  js  c++  java
  • hbase的Java基本操作

    hbase的Java基本操作

    建表,建列簇操作

    private static Connection connection;
        private static Admin admin;
    
        public static void createTable(String tableName, String[] fields) throws IOException {
            if(admin.tableExists(TableName.valueOf(tableName)))
            {
                deleteTable(tableName);
            }
            //2.TableDescriptorBuilder.newBuilder构建表描述构建器
            TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName));
            for (int i=0;i<fields.length;i++)
            {
                //3.创建列簇构造描述器
                ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(fields[i]));
                //4.构建列簇描述
                ColumnFamilyDescriptor cfDes = columnFamilyDescriptorBuilder.build();
                //建立表与列簇的关联关系
                tableDescriptorBuilder.setColumnFamily(cfDes);
            }
            TableDescriptor tableDescriptor = tableDescriptorBuilder.build();
            admin.createTable(tableDescriptor);
        }
    public static void main(String[] args) throws IOException {
            //用HBaseConfiguration.create();创建HBase的配置
            Configuration configuration = HBaseConfiguration.create();
            //用ConnectionFactory.createConnection创建HBase()连接
            connection = ConnectionFactory.createConnection(configuration);
            // 创建表,要给予HBase获取Admin对象
            admin = connection.getAdmin();
            String tablename = "WATER_BILL";
            //1.创建表和列
            String[] filed = {"H1", "H2", "H3"};
            createTable(tablename, filed);
        }

    添加数据,指定表名,列簇列名,以及rowkey和对应的value

    //添加数据
        public static void addRecord(String tableName, String row, String[] fields, String[] values) throws IOException {
            Table table = connection.getTable(TableName.valueOf(tableName));
            String []column=new String[110];
            String columnFamily="";
            for(int i=0;i<fields.length;i++)
            {
                String []split=fields[i].split(":");
                column[i]=split[1];
                columnFamily=split[0];
            }
            Put put = new Put(Bytes.toBytes(row));
            for(int i=0;i<values.length;i++)
            {
                put.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(column[i]),Bytes.toBytes(values[i]));
            }
            //5.使用htable表执行put操作
            table.put(put);
            //关闭htable表对象
            table.close();
        }
    
    public static void main(String[] args) throws IOException {
            //用HBaseConfiguration.create();创建HBase的配置
            Configuration configuration = HBaseConfiguration.create();
            //用ConnectionFactory.createConnection创建HBase()连接
            connection = ConnectionFactory.createConnection(configuration);
            // 创建表,要给予HBase获取Admin对象
            admin = connection.getAdmin();
            String tablename = "WATER_BILL";
            //1.创建表和列
    //        String[] filed = {"H1", "H2", "H3"};
    //        createTable(tablename, filed);
    
            //2.向表tableName、行row(用S_Name表示)和字符串数组fields指定的单元格中添加对应的数据values。
            // 其中,fields中每个元素如果对应的列族下还有相应的列限定符的话,用“columnFamily:column”表示。
            // 例如,同时向“Math”、“Computer Science”、“English”三列添加成绩时,
            // 字符串数组fields为{“Score:Math”, ”Score:Computer Science”, ”Score:English”},数组values存储这三门课的成绩。
            String[] fields = {"H1:S_NO", "H1:S_Name", "H1:S_Sex", "H1:S_Age"};
            String[] values = {"2015001", "Zhangsan", "male", "23"};
            String row = "Zhangsan";
            addRecord(tablename, row, fields, values);
        }

    查看表中某rowkey的列簇下的所有值,或者单个列簇:列名的值

    public static void scanColumn(String tableName,String rowKey, String column) throws IOException {
            Table table = connection.getTable(TableName.valueOf(tableName));
            Get get = new Get(rowKey.getBytes());
            if(column.contains(":"))
            {
                //查询指定rowkey和列簇下的指定列名
                String[] split = column.split(":");
                get.addColumn(Bytes.toBytes(split[0]),Bytes.toBytes(split[1]));
                Result result = table.get(get);
                byte[] value = result.getValue(Bytes.toBytes(split[0]), Bytes.toBytes(split[1]));
                if(Bytes.toString(value)!=null)
                    System.out.println(Bytes.toString(value));
                else
                    System.out.println("null");
            }
            else
            {
                //查询指定rowkey和列簇下的所有数据
                get.addFamily(column.getBytes());
                Result result = table.get(get);
                Cell[] cells = result.rawCells();
                for (Cell cell:cells)
                {
                    //获取列簇名称
                    String cf = Bytes.toString(cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength());
                    //获取列的名称
                    String colunmName = Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength());
                    //获取值
                    String value = Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());
                    if(value!=null)
                        System.out.println(cf+":"+colunmName+"=>"+value);
                    else
                        System.out.println(cf+":"+colunmName+"=>"+"null");
                }
            }
            table.close();
        }
    
    public static void main(String[] args) throws IOException {
            //用HBaseConfiguration.create();创建HBase的配置
            Configuration configuration = HBaseConfiguration.create();
            //用ConnectionFactory.createConnection创建HBase()连接
            connection = ConnectionFactory.createConnection(configuration);
            // 创建表,要给予HBase获取Admin对象
            admin = connection.getAdmin();
            String tablename = "WATER_BILL";
            //1.创建表和列
    //        String[] filed = {"H1", "H2", "H3"};
    //        createTable(tablename, filed);
    
            //2.向表tableName、行row(用S_Name表示)和字符串数组fields指定的单元格中添加对应的数据values。
            // 其中,fields中每个元素如果对应的列族下还有相应的列限定符的话,用“columnFamily:column”表示。
            // 例如,同时向“Math”、“Computer Science”、“English”三列添加成绩时,
            // 字符串数组fields为{“Score:Math”, ”Score:Computer Science”, ”Score:English”},数组values存储这三门课的成绩。
    //        String[] fields = {"H1:S_NO", "H1:S_Name", "H1:S_Sex", "H1:S_Age"};
    //        String[] values = {"2015001", "Zhangsan", "male", "23"};
    //        String row = "Zhangsan";
    //        addRecord(tablename, row, fields, values);
    
    
            //3.浏览表tableName某一列的数据,如果某一行记录中该列数据不存在,则返回null。
            // 要求当参数column为某一列族名称时,如果底下有若干个列限定符,则要列出每个列限定符代表的列的数据;
            // 当参数column为某一列具体名称(例如“Score:Math”)时,只需要列出该列的数据。
            String column = "H1:S_Name";
            String rowkey = "Zhangsan";
            scanColumn(tablename, rowkey, column);
        }

    修改rowkey下的对应的单独的列簇:列名的值

    public static void modifyData(String tableName,String rowkey,String column,String value) throws IOException {
            Table table = connection.getTable(TableName.valueOf(tableName));
            //修改操作
            Put put = new Put(Bytes.toBytes(rowkey));
            String[] split = column.split(":");
            String columnFamily=split[0];
            String columnName=split[1];
            put.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(columnName),Bytes.toBytes(value));
            table.put(put);
            //查看修改后的数据
            Get get = new Get(rowkey.getBytes());
            get.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(columnName));
            Result result = table.get(get);
            byte[] value2 = result.getValue(Bytes.toBytes(columnFamily),Bytes.toBytes(columnName));
            if(Bytes.toString(value2)!=null)
                System.out.println(columnFamily+":"+columnName+"=>"+Bytes.toString(value2));
            else
                System.out.println("null");
            System.out.println("修改成功!!");
            table.close();
        }
    
    public static void main(String[] args) throws IOException {
            //用HBaseConfiguration.create();创建HBase的配置
            Configuration configuration = HBaseConfiguration.create();
            //用ConnectionFactory.createConnection创建HBase()连接
            connection = ConnectionFactory.createConnection(configuration);
            // 创建表,要给予HBase获取Admin对象
            admin = connection.getAdmin();
            String tablename = "WATER_BILL";
            //1.创建表和列
    //        String[] filed = {"H1", "H2", "H3"};
    //        createTable(tablename, filed);
    
            //2.向表tableName、行row(用S_Name表示)和字符串数组fields指定的单元格中添加对应的数据values。
            // 其中,fields中每个元素如果对应的列族下还有相应的列限定符的话,用“columnFamily:column”表示。
            // 例如,同时向“Math”、“Computer Science”、“English”三列添加成绩时,
            // 字符串数组fields为{“Score:Math”, ”Score:Computer Science”, ”Score:English”},数组values存储这三门课的成绩。
    //        String[] fields = {"H1:S_NO", "H1:S_Name", "H1:S_Sex", "H1:S_Age"};
    //        String[] values = {"2015001", "Zhangsan", "male", "23"};
    //        String row = "Zhangsan";
    //        addRecord(tablename, row, fields, values);
    
    
            //3.浏览表tableName某一列的数据,如果某一行记录中该列数据不存在,则返回null。
            // 要求当参数column为某一列族名称时,如果底下有若干个列限定符,则要列出每个列限定符代表的列的数据;
            // 当参数column为某一列具体名称(例如“Score:Math”)时,只需要列出该列的数据。
    //        String column = "H1:S_Name";
    //        String rowkey = "Zhangsan";
    //        scanColumn(tablename, rowkey, column);
    
            //4.modifyData(S修改表tableName,行row(可以用学生姓名S_Name表示),
            // 列column指定的单元格的数据tring tableName, String row, String column)
            String colum = "H1:S_Name";
            String rowkey = "Zhangsan";
            String value = "XiaoFengZai";
            modifyData(tablename, rowkey, colum, value);
        }

    删除指定的rowkey内容

    public static void deleteRow(String tableName, String row) throws IOException {
            Table table = connection.getTable(TableName.valueOf(tableName));
            //删除一条rowkey记录
            Delete delete = new Delete(Bytes.toBytes(row));
            table.delete(delete);
            table.close();
        }
    
        public static void main(String[] args) throws IOException {
            //用HBaseConfiguration.create();创建HBase的配置
            Configuration configuration = HBaseConfiguration.create();
            //用ConnectionFactory.createConnection创建HBase()连接
            connection = ConnectionFactory.createConnection(configuration);
            // 创建表,要给予HBase获取Admin对象
            admin = connection.getAdmin();
            String tablename = "WATER_BILL";
            //1.创建表和列
    //        String[] filed = {"H1", "H2", "H3"};
    //        createTable(tablename, filed);
    
            //2.向表tableName、行row(用S_Name表示)和字符串数组fields指定的单元格中添加对应的数据values。
            // 其中,fields中每个元素如果对应的列族下还有相应的列限定符的话,用“columnFamily:column”表示。
            // 例如,同时向“Math”、“Computer Science”、“English”三列添加成绩时,
            // 字符串数组fields为{“Score:Math”, ”Score:Computer Science”, ”Score:English”},数组values存储这三门课的成绩。
    //        String[] fields = {"H1:S_NO", "H1:S_Name", "H1:S_Sex", "H1:S_Age"};
    //        String[] values = {"2015001", "Zhangsan", "male", "23"};
    //        String row = "Zhangsan";
    //        addRecord(tablename, row, fields, values);
    
    
            //3.浏览表tableName某一列的数据,如果某一行记录中该列数据不存在,则返回null。
            // 要求当参数column为某一列族名称时,如果底下有若干个列限定符,则要列出每个列限定符代表的列的数据;
            // 当参数column为某一列具体名称(例如“Score:Math”)时,只需要列出该列的数据。
    //        String column = "H1:S_Name";
    //        String rowkey = "Zhangsan";
    //        scanColumn(tablename, rowkey, column);
    
            //4.modifyData(S修改表tableName,行row(可以用学生姓名S_Name表示),
            // 列column指定的单元格的数据tring tableName, String row, String column)
    //        String colum = "H1:S_Name";
    //        String rowkey = "Zhangsan";
    //        String value = "XiaoFengZai";
    //        modifyData(tablename, rowkey, colum, value);
    
    
            //5.删除指定的rowkey内容
            String rowkey="Zhangsan";
            deleteRow(tablename,rowkey);
    
            admin.close();
            connection.close();
        }

    删除指定的表

    public void deleteTable(String tablename)throws IOException
        {
            TableName tableName=TableName.valueOf("WATER_BILL");
            if(admin.tableExists(tableName))
            {
                admin.disableTable(tableName);
                admin.deleteTable(tableName);
            }
        }

     

  • 相关阅读:
    Ubuntu14.04安装ROS Indigo
    STM32F103移植uCOSIII始终卡在PendSV或Systick处解决办法
    STM32F103移植uCOSIII始终卡在PendSV或Systick处解决办法
    WIN7下PS/2等键盘失灵无法使用的解决办法--实测有效
    WIN7下PS/2等键盘失灵无法使用的解决办法--实测有效
    在altium designer9 等中使用protell99se的如0805,0603等PCB封装库
    在altium designer9 等中使用protell99se的如0805,0603等PCB封装库
    VB将输入文本框的数字分割并按十六进制发送
    Windows 10同步时间的方法
    maven安装cucumber的pom文件设置
  • 原文地址:https://www.cnblogs.com/xiaofengzai/p/13842821.html
Copyright © 2011-2022 走看看