• 2.HBase相关学习


    1.HBase shell操作

    hbase shell

    查看版本

    version

    查看服务状态

    status

    查看有哪些表

    list

     

    创建表

    create 'students','info'
    list

     

    查看表结构

    describe 'students'

    插入数据

    put 'students','1001','info:name','jack'
    put 'students','1001','info:sex','male'
    put 'students','1001','info:age','18'
    put 'students','1002','info:name','lucy'
    put 'students','1002','info:age','19’

     

    单条查询

    #整行查询
    get 'students','1001'
    #指定列族:列
    get 'students','1001','info:name'

    扫描数据

    scan 'students'
    #左闭右开区间
    scan 'students',{STARTROW => '1001', STOPROW=>'1002'}
    scan 'students',{STARTROW => '1001'}

    更新字段

    get 'students','1001'
    put 'students','1001','info:name','lilei'
    put 'students','1001','info:age','20'
    get 'students','1001'

    count

    count 'students'

    变更表结构

    describe 'students'
    alter 'students',{NAME=>'info',VERSIONS=>3}
    describe 'students'

    删除数据

    #展出指定列
    delete 'students','1002','info:age'
    #删除整行
    deleteall 'students','1001'

    清空表

    #表下线
    disable 'students'
    #清空
    truncate 'students'

    必须先下线再清空

    删除表

    disable 'students'
    drop 'students'

    2.HBase api编程

    pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.gonghbase</groupId>
        <artifactId>hbase-tutorial-1103</artifactId>
        <version>1.0-SNAPSHOT</version>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>7</source>
                        <target>7</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
        <properties>
            <hbase.version>2.0.2</hbase.version>
            <junit.version>4.12</junit.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.apache.hbase</groupId>
                <artifactId>hbase-client</artifactId>
                <version>${hbase.version}</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>
        </dependencies>
    </project>

    自动import不太好,建议import-changes

    创建包和类

    package com.dajiangtai.hbase.java;
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.hbase.*;
    import org.apache.hadoop.hbase.client.*;
    import org.apache.hadoop.hbase.io.compress.Compression;
    import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding;
    import org.apache.hadoop.hbase.regionserver.BloomType;
    import org.apache.hadoop.hbase.util.Bytes;
    import org.junit.Test;
    
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    public class HBaseDemo {
        public static Configuration conf;
    
        static {
            //使用HBaseConfiguration 的单例方法实例化
            conf = HBaseConfiguration.create();
            conf.set("hbase.zookeeper.quorum", "node01");
            conf.set("hbase.zookeeper.property.clientPort", "2181");
            conf.set("zookeeper.znode.parent", "/hbase-unsecure");
        }
    
        //创建表
        @Test
        public void testCreateTable() throws IOException {
            // Connection实现了java中的java.lang.AutoCloseable接口。所有实现了这个接口的类都可以在try-with-resources结构中使用。
    
            //创建Connection是一项繁重的操作。Connection线程安全的,因此客户端可以一次创建一个连接,并与其他线程共享。
            //另一方面,HBaseAdmin和HBaseAdmin实例是轻量级的,并且不是线程安全的。
            // 通常,每个客户端应用程序实例化单个Connection,每个线程都将获得其自己的Table实例。不建议对Table and Admin进行缓存或池化。
    
            try (Connection connection = ConnectionFactory.createConnection(conf);
                 HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();) {
                TableName tableName = TableName.valueOf("students");
                if (admin.tableExists(tableName)) {
                    System.out.println("table " + tableName.getNameAsString() + " exists");
                } else {
                    ColumnFamilyDescriptor cfDesc = ColumnFamilyDescriptorBuilder
                            .newBuilder(Bytes.toBytes("F"))
                            .setCompressionType(Compression.Algorithm.SNAPPY)
                            .setCompactionCompressionType(Compression.Algorithm.SNAPPY)
                            .setDataBlockEncoding(DataBlockEncoding.PREFIX)
                            .setBloomFilterType(BloomType.ROW)
                            .build();
    
                    TableDescriptor tableDesc = TableDescriptorBuilder.newBuilder(tableName)
                            .setColumnFamily(cfDesc)
                            .build();
    
                    admin.createTable(tableDesc);
                }
            }
        }
    
        //向表中插入数据
        @Test
        public void testPut() throws IOException {
            TableName tableName = TableName.valueOf("students");
            try (Connection connection = ConnectionFactory.createConnection(conf);
                 Table table = connection.getTable(tableName);) {
    
                List<Put> puts = new ArrayList<>();
                for (int i = 0; i < 10; i++) {
                    Put put = new Put(Bytes.toBytes(i+""));
    
                    put.addColumn(Bytes.toBytes("F"), Bytes.toBytes("name"), Bytes.toBytes("name" + i));
                    put.addColumn(Bytes.toBytes("F"), Bytes.toBytes("age"), Bytes.toBytes(20 + i+""));
                    put.addColumn(Bytes.toBytes("F"), Bytes.toBytes("address"), Bytes.toBytes("djt" + i));
    
                    puts.add(put);
                }
    
                table.put(puts);
            }
    
        }
    
        //获取指定行
        @Test
        public void testGet() throws IOException {
            TableName tableName = TableName.valueOf("students");
            try (Connection connection = ConnectionFactory.createConnection(conf);
                 Table table = connection.getTable(tableName);) {
                String rowkey = "2";
                Get get = new Get(Bytes.toBytes(rowkey));
                Result result = table.get(get);
                for (Cell cell : result.rawCells()) {
                    System.out.println("rowkey = " + Bytes.toString(result.getRow()));
                    System.out.println("列族 = " + Bytes.toString(CellUtil.cloneFamily(cell)));
                    System.out.println("列限定符 = " + Bytes.toString(CellUtil.cloneQualifier(cell)));
                    System.out.println("值 = " + Bytes.toString(CellUtil.cloneValue(cell)));
                    System.out.println("时间戳 = " + cell.getTimestamp());
                }
            }
    
        }
    
        //获取指定行,指定列
        @Test
        public void testGet1() throws IOException {
            TableName tableName = TableName.valueOf("students");
            try (Connection connection = ConnectionFactory.createConnection(conf);
                 Table table = connection.getTable(tableName);) {
                String rowkey = "2";
                Get get = new Get(Bytes.toBytes(rowkey));
                get.addColumn(Bytes.toBytes("F"), Bytes.toBytes("name"));
                get.addColumn(Bytes.toBytes("F"), Bytes.toBytes("age"));
                Result result = table.get(get);
                for (Cell cell : result.rawCells()) {
                    System.out.println("rowkey = " + Bytes.toString(result.getRow()));
                    System.out.println("列族 = " + Bytes.toString(CellUtil.cloneFamily(cell)));
                    System.out.println("列限定符 = " + Bytes.toString(CellUtil.cloneQualifier(cell)));
                    System.out.println("值 = " + Bytes.toString(CellUtil.cloneValue(cell)));
                    System.out.println("时间戳 = " + cell.getTimestamp());
                }
            }
        }
    
        //scan全表
        @Test
        public void testScan() throws IOException {
            TableName tableName = TableName.valueOf("students");
            try (Connection connection = ConnectionFactory.createConnection(conf);
                 Table table = connection.getTable(tableName);) {
    
                Scan scan = new Scan();
    
                ResultScanner resultScanner = table.getScanner(scan);
    
                for (Result result : resultScanner) {
                    for (Cell cell : result.rawCells()) {
                        System.out.println("rowkey = " + Bytes.toString(result.getRow()));
                        System.out.println("列族 = " + Bytes.toString(CellUtil.cloneFamily(cell)));
                        System.out.println("列限定符 = " + Bytes.toString(CellUtil.cloneQualifier(cell)));
                        System.out.println("值 = " + Bytes.toString(CellUtil.cloneValue(cell)));
                        System.out.println("时间戳 = " + cell.getTimestamp());
                    }
                }
    
            }
        }
    
        @Test
        public void testScan1() throws IOException {
            TableName tableName = TableName.valueOf("students");
            try (Connection connection = ConnectionFactory.createConnection(conf);
                 Table table = connection.getTable(tableName);) {
    
                Scan scan = new Scan();
    
                scan.addColumn(Bytes.toBytes("F"), Bytes.toBytes("name"));
                scan.addColumn(Bytes.toBytes("F"), Bytes.toBytes("age"));
    
                scan.setCacheBlocks(true);
                scan.setCaching(100);
                scan.withStartRow(Bytes.toBytes(5 + ""));
                scan.withStopRow(Bytes.toBytes(8 + ""));
    
                ResultScanner resultScanner = table.getScanner(scan);
    
                for (Result result : resultScanner) {
                    for (Cell cell : result.rawCells()) {
                        System.out.println("rowkey = " + Bytes.toString(result.getRow()));
                        System.out.println("列族 = " + Bytes.toString(CellUtil.cloneFamily(cell)));
                        System.out.println("列限定符 = " + Bytes.toString(CellUtil.cloneQualifier(cell)));
                        System.out.println("值 = " + Bytes.toString(CellUtil.cloneValue(cell)));
                        System.out.println("时间戳 = " + cell.getTimestamp());
                    }
                }
            }
        }
    
        //删除数据
        @Test
        public void testDelete() throws IOException {
            TableName tableName = TableName.valueOf("students");
            try (Connection connection = ConnectionFactory.createConnection(conf);
                 Table table = connection.getTable(tableName);) {
    
                List<Delete> deletes = new ArrayList<>();
                for (int i = 0; i < 10; i++) {
                    Delete delete = new Delete(Bytes.toBytes(i + ""));
                    deletes.add(delete);
                }
    
                table.delete(deletes);
            }
        }
    
        //删除表
        @Test
        public void testDeleteTable() throws IOException {
            try (Connection connection = ConnectionFactory.createConnection(conf);
                 HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();) {
                TableName tableName = TableName.valueOf("students");
                if (admin.tableExists(tableName)) {
                    //先disable再delete
                    admin.disableTable(tableName);
                    admin.deleteTable(tableName);
                    System.out.println("table " + tableName.getNameAsString() + " delete success");
                } else {
                    System.out.println("table " + tableName.getNameAsString() + " is not exists");
                }
            }
        }
    
        public static void main(String[] args) {
            System.out.println("hello hbase!");
    
        }
    }

    创建表

    向表中插入数据

    获取指定行的数据

    获取指定行,指定列数据

    全表扫描

    删除数据和删除表就不做演示了

  • 相关阅读:
    如何加快github下载代码的速度
    还原 对于 服务器“ZHULIN-DB-DEV”失败。 (Microsoft.SqlServer.SmoExtended)
    sqlserver 常用语句
    sql 中 rank() over,dense_rank(),row_number() 的区别
    sqlserver 算两个日期间的月份数
    理解http的幂等性
    学习的第一推动力(很好)
    clean-room 洁净室软件工程
    如何组建测试团队
    vscode go 调试 launch.json
  • 原文地址:https://www.cnblogs.com/braveym/p/13113950.html
Copyright © 2020-2023  润新知