• Hbase基本操作


    1.熟悉hbase操作部署

    2.掌握hbase  shell基本操作

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

    实验原理及内容

    实验步骤

    1. 启动hbase

    (1)启动hadoop


     

    2)输入jps检查是否启动成功

    (3)进入hbase目录下启动hbase

    1. 进入HBase shell交互界面

    1. hbase shell操作

    1. 创建表

    通过create创建表

    使用list查看建表详情

    1. 插入操作

    1. 扫描操作

    1. 查看操作

    1. 更新操作

    1. 获取指定字段操作

    1. 统计操作

    1. 删除操作

    删除一条数据

    删除一行所有数据

    1. 清空表中数据

    1. 删除表

    1. HBase的java API操作

    1. 创建工程并导入依赖

        

        

            junit

            junit

            4.12

        

        

            org.apache.hbase

            hbase-client

            2.4.6

        

        

            org.apache.hbase

            hbase-common

            2.4.6

        

    1. 创建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);

    }

    }

    1. 创建数据表

    @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命令查看数据库

    1. 插入数据

    @Test

    public void testPut() throws IOException {

        //创建Table对象,通过Table对象来添加数据

        Table table = coon.getTable(TableName.valueOf("t_user_info"));

        //创建一个集合,用于存放Put对象

        ArrayList 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命令,查看数据表中的数据

    1. 查看指定字段的数据

    @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 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();

    }

    1. 扫描数据

    @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 iter = scanner.iterator();

        //遍历迭代器

        while (iter.hasNext()){

            //获取当前每一行的结果数据

            Result result = iter.next();

            //获取当前每一行中所有的Cell对象

            List 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();

    }

    1. 删除指定列的数据

    @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();

    }

    1. 删除表

    @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();

    }

  • 相关阅读:
    关于大图片加载的速度太慢导致界面卡顿的问题
    入栏需看——学习记忆
    hadoop 3.3大数据集群搭建系列1-安装hadoop
    C#学习笔记--复杂数据类型、函数和结构体
    【云原生】第二篇--容器管理工具 Docker生态架构及部署
    【Mysql系列】mysql中删除数据的几种方法
    杭州市建筑工程师职称评审申报指南
    关于python pytorch 与CUDA版本相关问题
    WebSocket协议:5分钟从入门到精通
    思腾云计算
  • 原文地址:https://blog.csdn.net/qq_61604164/article/details/125872529