侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

【HBase五】Java API操作HBase

Java  /  管理员 发布于 5年前   418

import java.io.IOException;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.hbase.HBaseConfiguration;import org.apache.hadoop.hbase.HColumnDescriptor;import org.apache.hadoop.hbase.HTableDescriptor;import org.apache.hadoop.hbase.KeyValue;import org.apache.hadoop.hbase.client.Delete;import org.apache.hadoop.hbase.client.Get;import org.apache.hadoop.hbase.client.HBaseAdmin;import org.apache.hadoop.hbase.client.HTable;import org.apache.hadoop.hbase.client.HTablePool;import org.apache.hadoop.hbase.client.Put;import org.apache.hadoop.hbase.client.Result;import org.apache.hadoop.hbase.client.ResultScanner;import org.apache.hadoop.hbase.client.Scan;import org.apache.hadoop.hbase.util.Bytes;public class Hbase {    // 声明静态配置    static Configuration conf = null;    ///初始化HBase的配置文件    static {        conf = HBaseConfiguration.create();        conf.set("hbase.zookeeper.quorum", "localhost");    }    /*     * 创建表     *      * @tableName 表名     *      * @family 列族列表     */    public static void creatTable(String tableName, String[] family)            throws Exception {        HBaseAdmin admin = new HBaseAdmin(conf);        ///表使用HTableDescriptor描述        HTableDescriptor desc = new HTableDescriptor(tableName);        for (int i = 0; i < family.length; i++) {            ///列族使用HColumnDescriptor描述            desc.addFamily(new HColumnDescriptor(family[i]));        }        if (admin.tableExists(tableName)) {            System.out.println("table Exists!");            System.exit(0);        } else {            ///创建表            admin.createTable(desc);            System.out.println("create table Success!");        }    }    /*     * 为表添加数据(适合知道有多少列族的固定表)     *      * @rowKey rowKey     *      * @tableName 表名     *      * @column1 第一个列族列表     *      * @value1 第一个列的值的列表     *      * @column2 第二个列族列表     *      * @value2 第二个列的值的列表     */    public static void addData(String rowKey, String tableName,                               String[] column1, String[] value1, String[] column2, String[] value2)            throws IOException {        Put put = new Put(Bytes.toBytes(rowKey));// 设置rowkey        HTable table = new HTable(conf, Bytes.toBytes(tableName));// HTabel负责跟记录相关的操作如增删改查等//        // 获取表        HColumnDescriptor[] columnFamilies = table.getTableDescriptor() // 获取所有的列族                .getColumnFamilies();        for (int i = 0; i < columnFamilies.length; i++) {            String familyName = columnFamilies[i].getNameAsString(); // 获取列族名            if (familyName.equals("article")) { // article列族put数据                for (int j = 0; j < column1.length; j++) {                    put.add(Bytes.toBytes(familyName),                            Bytes.toBytes(column1[j]), Bytes.toBytes(value1[j]));                }            }            if (familyName.equals("author")) { // author列族put数据                for (int j = 0; j < column2.length; j++) {                    put.add(Bytes.toBytes(familyName),                            Bytes.toBytes(column2[j]), Bytes.toBytes(value2[j]));                }            }        }        table.put(put);        System.out.println("add data Success!");    }    /*     * 根据rwokey查询     *      * @rowKey rowKey     *      * @tableName 表名     */    public static Result getResult(String tableName, String rowKey)            throws IOException {        Get get = new Get(Bytes.toBytes(rowKey));        HTable table = new HTable(conf, Bytes.toBytes(tableName));// 获取表        Result result = table.get(get);        for (KeyValue kv : result.list()) {            System.out.println("family:" + Bytes.toString(kv.getFamily()));            System.out                    .println("qualifier:" + Bytes.toString(kv.getQualifier()));            System.out.println("value:" + Bytes.toString(kv.getValue()));            System.out.println("Timestamp:" + kv.getTimestamp());            System.out.println("-------------------------------------------");        }        return result;    }    /*     * 遍历查询hbase表     *      * @tableName 表名     */    public static void getResultScann(String tableName) throws IOException {        Scan scan = new Scan();        ResultScanner rs = null;        HTable table = new HTable(conf, Bytes.toBytes(tableName));        try {            rs = table.getScanner(scan);            for (Result r : rs) {                for (KeyValue kv : r.list()) {                    System.out.println("row:" + Bytes.toString(kv.getRow()));                    System.out.println("family:"                            + Bytes.toString(kv.getFamily()));                    System.out.println("qualifier:"                            + Bytes.toString(kv.getQualifier()));                    System.out                            .println("value:" + Bytes.toString(kv.getValue()));                    System.out.println("timestamp:" + kv.getTimestamp());                    System.out                            .println("-------------------------------------------");                }            }        } finally {            rs.close();        }    }    /*     * 遍历查询hbase表     *      * @tableName 表名     */    public static void getResultScann(String tableName, String start_rowkey,                                      String stop_rowkey) throws IOException {        Scan scan = new Scan();        scan.setStartRow(Bytes.toBytes(start_rowkey));        scan.setStopRow(Bytes.toBytes(stop_rowkey));        ResultScanner rs = null;        HTable table = new HTable(conf, Bytes.toBytes(tableName));        try {            rs = table.getScanner(scan);            for (Result r : rs) {                for (KeyValue kv : r.list()) {                    System.out.println("row:" + Bytes.toString(kv.getRow()));                    System.out.println("family:"                            + Bytes.toString(kv.getFamily()));                    System.out.println("qualifier:"                            + Bytes.toString(kv.getQualifier()));                    System.out                            .println("value:" + Bytes.toString(kv.getValue()));                    System.out.println("timestamp:" + kv.getTimestamp());                    System.out                            .println("-------------------------------------------");                }            }        } finally {            rs.close();        }    }    /*     * 查询表中的某一列     *      * @tableName 表名     *      * @rowKey rowKey     */    public static void getResultByColumn(String tableName, String rowKey,                                         String familyName, String columnName) throws IOException {        HTable table = new HTable(conf, Bytes.toBytes(tableName));        Get get = new Get(Bytes.toBytes(rowKey));        get.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName)); // 获取指定列族和列修饰符对应的列        Result result = table.get(get);        for (KeyValue kv : result.list()) {            System.out.println("family:" + Bytes.toString(kv.getFamily()));            System.out                    .println("qualifier:" + Bytes.toString(kv.getQualifier()));            System.out.println("value:" + Bytes.toString(kv.getValue()));            System.out.println("Timestamp:" + kv.getTimestamp());            System.out.println("-------------------------------------------");        }    }    /*     * 更新表中的某一列     *      * @tableName 表名     *      * @rowKey rowKey     *      * @familyName 列族名     *      * @columnName 列名     *      * @value 更新后的值     */    public static void updateTable(String tableName, String rowKey,                                   String familyName, String columnName, String value)            throws IOException {        HTable table = new HTable(conf, Bytes.toBytes(tableName));        Put put = new Put(Bytes.toBytes(rowKey));        put.add(Bytes.toBytes(familyName), Bytes.toBytes(columnName),                Bytes.toBytes(value));        table.put(put);        System.out.println("update table Success!");    }    /*     * 查询某列数据的多个版本     *      * @tableName 表名     *      * @rowKey rowKey     *      * @familyName 列族名     *      * @columnName 列名     */    public static void getResultByVersion(String tableName, String rowKey,                                          String familyName, String columnName) throws IOException {        HTable table = new HTable(conf, Bytes.toBytes(tableName));        Get get = new Get(Bytes.toBytes(rowKey));        get.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName));        get.setMaxVersions(5);        Result result = table.get(get);        for (KeyValue kv : result.list()) {            System.out.println("family:" + Bytes.toString(kv.getFamily()));            System.out                    .println("qualifier:" + Bytes.toString(kv.getQualifier()));            System.out.println("value:" + Bytes.toString(kv.getValue()));            System.out.println("Timestamp:" + kv.getTimestamp());            System.out.println("-------------------------------------------");        }        /*         * List<?> results = table.get(get).list(); Iterator<?> it =         * results.iterator(); while (it.hasNext()) {         * System.out.println(it.next().toString()); }         */    }    /*     * 删除指定的列     *      * @tableName 表名     *      * @rowKey rowKey     *      * @familyName 列族名     *      * @columnName 列名     */    public static void deleteColumn(String tableName, String rowKey,                                    String falilyName, String columnName) throws IOException {        HTable table = new HTable(conf, Bytes.toBytes(tableName));        Delete deleteColumn = new Delete(Bytes.toBytes(rowKey));        deleteColumn.deleteColumns(Bytes.toBytes(falilyName),                Bytes.toBytes(columnName));        table.delete(deleteColumn);        System.out.println(falilyName + ":" + columnName + "is deleted!");    }    /*     * 删除指定的列     *      * @tableName 表名     *      * @rowKey rowKey     */    public static void deleteAllColumn(String tableName, String rowKey)            throws IOException {        HTable table = new HTable(conf, Bytes.toBytes(tableName));        Delete deleteAll = new Delete(Bytes.toBytes(rowKey));        table.delete(deleteAll);        System.out.println("all columns are deleted!");    }    /*     * 删除表     *      * @tableName 表名     */    public static void deleteTable(String tableName) throws IOException {        HBaseAdmin admin = new HBaseAdmin(conf);        admin.disableTable(tableName);        admin.deleteTable(tableName);        System.out.println(tableName + "is deleted!");    }    public static void main(String[] args) throws Exception {        // 创建表        String tableName = "blog2";        String[] family = {"article", "author"};        // creatTable(tableName, family);        // 为表添加数据        String[] column1 = {"title", "content", "tag"};        String[] value1 = {                "Head First HBase",                "HBase is the Hadoop database. Use it when you need random, realtime read/write access to your Big Data.",                "Hadoop,HBase,NoSQL"};        String[] column2 = {"name", "nickname"};        String[] value2 = {"nicholas", "lee"};        addData("rowkey1", "blog2", column1, value1, column2, value2);        addData("rowkey2", "blog2", column1, value1, column2, value2);        addData("rowkey3", "blog2", column1, value1, column2, value2);        // 遍历查询        getResultScann("blog2", "rowkey4", "rowkey5");        // 根据row key范围遍历查询        getResultScann("blog2", "rowkey4", "rowkey5");        // 查询        getResult("blog2", "rowkey1");        // 查询某一列的值        getResultByColumn("blog2", "rowkey1", "author", "name");        // 更新列        updateTable("blog2", "rowkey1", "author", "name", "bin");        // 查询某一列的值        getResultByColumn("blog2", "rowkey1", "author", "name");        // 查询某列的多版本        getResultByVersion("blog2", "rowkey1", "author", "name");        // 删除一列        deleteColumn("blog2", "rowkey1", "author", "nickname");        // 删除所有列        deleteAllColumn("blog2", "rowkey1");        // 删除表        deleteTable("blog2");    }}

 

 

参考:http://www.cnblogs.com/ggjucheng/p/3381328.html


  • 上一条:
    【Java命令三】jps
    下一条:
    【HBase十一】Java API操作HBase
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在java中实现的脱敏工具类代码示例分享(0个评论)
    • zookeeper安装流程步骤(0个评论)
    • 在java中你背的“八股文”可能已经过时了(2个评论)
    • 在php8.0+版本中使用属性来增加值代码示例(3个评论)
    • java 正则表达式基础,实例学习资料收集大全 原创(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-11
    • 2018-03
    • 2020-03
    • 2023-05
    • 2023-11
    • 2024-01
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客