码迷,mamicode.com
首页 > 其他好文 > 详细

2.HBase相关学习

时间:2020-06-13 17:33:15      阅读:47      评论:0      收藏:0      [点我收藏+]

标签:删除表   close   hot   val   project   dep   void   时间   compact   

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!");

    }
}

 

 

创建表

技术图片

 

 

向表中插入数据

技术图片

 

 

技术图片

 

 

获取指定行的数据

技术图片

 

获取指定行,指定列数据

技术图片

 

 

全表扫描

技术图片

 

 

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

技术图片

 

2.HBase相关学习

标签:删除表   close   hot   val   project   dep   void   时间   compact   

原文地址:https://www.cnblogs.com/braveym/p/13113950.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!