"直接上代码,具体参考代码里面的注释 package com.bobo.hbase; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.CellS .."

大数据学习笔记(9)-- hbase 的 java 客户端的基本使用

直接上代码,具体参考代码里面的注释

package com.bobo.hbase;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellScanner;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;
import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.client.TableDescriptor;
import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
import org.apache.hadoop.hbase.regionserver.BloomType;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.util.Arrays;

/**
 * @author bobo
 * @Description:
 * @date 2019-01-15 17:08
 */
public class HbaseMain {

    private Connection conn;

    private TableName userInfo =  TableName.valueOf("user_info1");

    /**
     * 初始化客户端
     */
    @Before
    public void init() throws IOException {
        Configuration conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum","hdp-master:2181,hdp-node:2181,hdp-node2:2181");
        conn = ConnectionFactory.createConnection(conf);
    }

    /**
     * 创建表
     *
     * @throws IOException
     */
    @Test
    public void createTable() throws IOException {
        Admin admin = conn.getAdmin();
        TableDescriptor build = TableDescriptorBuilder.newBuilder(userInfo)
                .setColumnFamily(ColumnFamilyDescriptorBuilder.of("base_info"))
                .setColumnFamily(ColumnFamilyDescriptorBuilder.of("extra_info"))
                .build();
        admin.createTable(build);
        admin.close();
        conn.close();
    }

    /**
     * 修改表
     *
     * @throws IOException
     */
    @Test
    public void alterTable() throws IOException {
        Admin admin = conn.getAdmin();
        ColumnFamilyDescriptor baseInfo = ColumnFamilyDescriptorBuilder.newBuilder(ColumnFamilyDescriptorBuilder.of("base_info"))
                .setBloomFilterType(BloomType.ROWCOL)
                .build();
        ColumnFamilyDescriptor extraInfo = ColumnFamilyDescriptorBuilder.newBuilder(ColumnFamilyDescriptorBuilder.of("extra_info"))
                .setBloomFilterType(BloomType.ROWCOL)
                .build();
        TableDescriptor descriptor = TableDescriptorBuilder.newBuilder(userInfo)
                .setColumnFamily(baseInfo)
                .setColumnFamily(extraInfo)
                .build();
        admin.modifyTable(descriptor);
        admin.close();
        conn.close();
    }

    /**
     * 删除表
     *
     * @throws IOException
     */
    @Test
    public void delTable() throws IOException {
        Admin admin = conn.getAdmin();
        admin.disableTable(userInfo);
        admin.deleteTable(userInfo);
        admin.close();
        conn.close();
    }

    /**
     * 添加表数据 / 修改表数据
     *
     * @throws IOException
     */
    @Test
    public void putData() throws IOException {
        Table table = conn.getTable(userInfo);
        Put put = new Put(Bytes.toBytes("001"));
        put.addColumn(Bytes.toBytes("base_info"), Bytes.toBytes("username"), Bytes.toBytes("zhangsan"));
        put.addColumn(Bytes.toBytes("base_info"), Bytes.toBytes("age"), Bytes.toBytes("18"));
        put.addColumn(Bytes.toBytes("base_info"), Bytes.toBytes("sex"), Bytes.toBytes("male"));
        put.addColumn(Bytes.toBytes("extra_info"), Bytes.toBytes("addr"), Bytes.toBytes("beijing"));
        table.put(put);
        table.close();
        conn.close();
    }

    /**
     * 删除表数据
     */
    @Test
    public void delData() throws IOException {
        Table table = conn.getTable(userInfo);
        Delete delete = new Delete(Bytes.toBytes("001"));
        table.delete(delete);
        table.close();
        conn.close();
    }

    /**
     * 获取表数据
     *
     * @throws IOException
     */
    @Test
    public void getData() throws IOException {
        Table table = conn.getTable(userInfo);
        Get get = new Get(Bytes.toBytes("001"));
        Result result = table.get(get);
        byte[] value1 = result.value();
        CellScanner cellScanner = result.cellScanner();
        while (cellScanner.advance()){
            Cell cell = cellScanner.current();
            // 行
            byte[] rowArray = cell.getRowArray();
            //value
            byte[] valueArray = cell.getValueArray();
            // 列簇名数组
            byte[] familyArray = cell.getFamilyArray();
            // 列名数组
            byte[] qualifierArray = cell.getQualifierArray();
            String family = new String(familyArray,"utf-8");
            String qualifier = new String(qualifierArray,"utf-8");
            String row = new String(rowArray,"utf-8");
            String value = new String(valueArray,"utf-8");
            System.out.println(row+":"+family+":"+qualifier+":"+value);
        }
        table.close();
        conn.close();
    }

}

关于具体代码可以参考

  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:PipeSoloSymWide 等,欢迎大家加入,贡献开源。

    2224 引用 • 3680 回帖 • 615 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    56 引用 • 92 回帖
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    48 引用 • 117 回帖 • 796 关注
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    13 引用 • 6 回帖 • 12 关注
感谢    关注    收藏    赞同    反对    举报    分享
回帖    
请输入回帖内容...