Java开发Hbase示例

Java开发Hbase示例

使用Hbase操作数据

    package com.sunteng.clickidc.test;

    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;

    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.hbase.*;
    import org.apache.hadoop.hbase.client.*;
    import org.apache.hadoop.hbase.io.compress.Compression.Algorithm;
    import org.apache.hadoop.hbase.util.Bytes;

    /*
    * 不需要实现数据库连接池,内置
    * MAVEN依赖错误,使用另外的客户端包
    * http://blog.sina.com.cn/s/blog_6a67b5c50100zbrx.html
    *
    *       <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-shaded-client -->
            <dependency>
                <groupId>org.apache.hbase</groupId>
                <artifactId>hbase-shaded-client</artifactId>
                <version>1.2.2</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-log4j12</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

    * */
    public class HbaseExample {

        /*
         * 不强制性创建表
         *
         * @tableName 表名
         * @family 列族列表
         * @config 配置信息
         */
        public static void creatTable(String tableName, String[] family, Configuration config) throws Exception {
            try (Connection connection = ConnectionFactory.createConnection(config);
                 Admin admin = connection.getAdmin()) {
                HTableDescriptor desc = new HTableDescriptor(TableName.valueOf(tableName));
                for (int i = 0; i < family.length; i++) {
                    desc.addFamily(new HColumnDescriptor(family[i]));
                }
                if (admin.tableExists(desc.getTableName())) {
                    System.out.println("table Exists!");
                    throw new Exception("table Exists!");
                } else {
                    admin.createTable(desc);
                    System.out.println("create table Success!");
                }
            }
        }

        /*
         * 强制性创建表
         *
         * @tableName 表名
         * @family 列族列表
         * @config 配置信息
         */
        public static void creatTableForce(String tableName, String[] family, Configuration config) throws Exception {
            try (Connection connection = ConnectionFactory.createConnection(config);
                 Admin admin = connection.getAdmin()) {
                HTableDescriptor desc = new HTableDescriptor(TableName.valueOf(tableName));
                for (int i = 0; i < family.length; i++) {
                    desc.addFamily(new HColumnDescriptor(family[i]));
                }
                if (admin.tableExists(desc.getTableName())) {
                    admin.disableTable(desc.getTableName());
                    admin.deleteTable(desc.getTableName());
                }
                admin.createTable(desc);
                System.out.println("create table Success!");

            }
        }

        /*
         *  删表
         *  @tableName 表名
         *  @config 配置信息
         *
         */
        public static void deleteTable(String tableName, Configuration config) throws Exception {
            try (Connection connection = ConnectionFactory.createConnection(config);
                 Admin admin = connection.getAdmin()) {
                TableName tn = TableName.valueOf(tableName);
                if (admin.tableExists(tn)) {
                    admin.disableTable(tn);
                    admin.deleteTable(tn);
                }
            }
        }

        /*
        * 查看已有表
        *
        * @config 配置信息
        *
        */
        public static HTableDescriptor[] listTables(Configuration config) throws IOException {
            try (Connection connection = ConnectionFactory.createConnection(config);
                 Admin admin = connection.getAdmin()) {
                HTableDescriptor hTableDescriptors[] = admin.listTables();
                return hTableDescriptors;
            }
        }

        /*
        * 插入数据
        *
        * @tableName 表名
        * @config 配置信息
        * @rowkey 行key
        * @colFamily 列族
        * @col 子列
        * @val 值
        *
        * */
        public static void instertRow(String tableName, Configuration config, String rowkey, String colFamily, String col, String val) throws Exception {
            try (Connection connection = ConnectionFactory.createConnection(config)) {
                Table table = connection.getTable(TableName.valueOf(tableName));
                Put put = new Put(Bytes.toBytes(rowkey));
                put.addColumn(Bytes.toBytes(colFamily), Bytes.toBytes(col), Bytes.toBytes(val));
                table.put(put);

                //批量插入
               /* List<Put> putList = new ArrayList<Put>();
                puts.add(put);
                table.put(putList);*/
                table.close();
                System.out.printf("adding success!!Table:%s,Row:%s,Column=%s:%s,Value=%s\n", tableName, rowkey, colFamily, col, val);
            }
        }

        /*
        * 删除数据
        *
        * @tableName 表名
        * @config 配置信息
        * @rowkey 行key
        * @colFamily 列族
        * @col 子列
        *
        * */
        public static void deleRow(String tableName, Configuration config, String rowkey, String colFamily, String col) throws Exception {
            try (Connection connection = ConnectionFactory.createConnection(config)) {
                Table table = connection.getTable(TableName.valueOf(tableName));
                Delete delete = new Delete(Bytes.toBytes(rowkey));
                //删除指定列族
                if (colFamily != null && col == null)
                    delete.addFamily(Bytes.toBytes(colFamily));
                //删除指定列
                if (colFamily != null && col != null)
                    delete.addColumn(Bytes.toBytes(colFamily), Bytes.toBytes(col));
                table.delete(delete);
                //批量删除
               /* List<Delete> deleteList = new ArrayList<Delete>();
                deleteList.add(delete);
                table.delete(deleteList);*/
                table.close();
            }
        }

        public static void deleRow(String tableName, Configuration config, String rowkey, String colFamily) throws Exception {
            deleRow(tableName, config, rowkey, colFamily, null);
        }

        public static void deleRow(String tableName, Configuration config, String rowkey) throws Exception {
            deleRow(tableName, config, rowkey, null, null);
        }

        /*
        * 根据rowkey查找数据
        *
        * @tableName 表名
        * @config 配置信息
        * @rowkey 行key
        * @colFamily 列族
        * @col 子列
        *
        * */
        public static Result getData(String tableName, Configuration config, String rowkey, String colFamily, String col) throws Exception {
            try (Connection connection = ConnectionFactory.createConnection(config)) {
                Table table = connection.getTable(TableName.valueOf(tableName));
                Get get = new Get(Bytes.toBytes(rowkey));
                if (colFamily != null && col == null)
                    get.addFamily(Bytes.toBytes(colFamily));
                if (colFamily != null && col != null)
                    get.addColumn(Bytes.toBytes(colFamily), Bytes.toBytes(col));
                Result result = table.get(get);
                table.close();
                return result;
            }
        }

        public static Result getData(String tableName, Configuration config, String rowkey, String colFamily) throws Exception {
            return getData(tableName, config, rowkey, colFamily, null);
        }

        public static Result getData(String tableName, Configuration config, String rowkey) throws Exception {
            return getData(tableName, config, rowkey, null, null);
        }

        /*
        * 批量查找数据
        * @table 表名
        * @config配置文件
        * @startRow 开始的行key
        * @stopRow 停止的行key
        *
        * hbase会将自己的元素按照key的ASCII码排序
        * 找出5193开头的元素
        *
        *   5193:1
        *   5193:2
        *   5194:1
        *   51939:1
        *   51942:1
        *
        *  scan.setStartRow("5193:#");
        *  scan.setStopRow("5193::");
        *
        *  原因:ASCII排序中:"#" < "0-9" < ":"
        *  取出来的将是5193:后面跟着数字的元素
        * */
        public static List<Result> scanData(String tableName, Configuration config, String startRow, String stopRow, int limit) throws Exception {
            try (Connection connection = ConnectionFactory.createConnection(config)) {
                Table table = connection.getTable(TableName.valueOf(tableName));
                Scan scan = new Scan();
                if (startRow != null && stopRow != null) {
                    scan.setStartRow(Bytes.toBytes(startRow));
                    scan.setStopRow(Bytes.toBytes(stopRow));
                }
                scan.setBatch(limit);
                List<Result> result = new ArrayList<Result>();
                ResultScanner resultScanner = table.getScanner(scan);
                for (Result r : resultScanner) {
                    result.add(r);
                }
                table.close();
                return result;
            }
        }

        public static List<Result> scanData(String tableName, Configuration config, int limit) throws Exception {
            return scanData(tableName, config, null, null, limit);
        }

        /*
        * 打印表
        * @tables 打印的表描述对象
        *
        * */
        public static void printTables(HTableDescriptor[] tables) {
            for (HTableDescriptor t : tables) {
                HColumnDescriptor[] columns = t.getColumnFamilies();
                System.out.printf("tables:%s,columns-family:\n", t.getTableName());
                for (HColumnDescriptor column : columns) {
                    System.out.printf("\t%s\n", column.getNameAsString());
                }
            }
        }

        /*
         * 格式化输出
         * @result 结果
         *
         * */

        public static void showCell(Result result) {
            Cell[] cells = result.rawCells();
            for (Cell cell : cells) {
                System.out.println("RowName:" + new String(CellUtil.cloneRow(cell)) + " ");
                System.out.println("Timetamp:" + cell.getTimestamp() + " ");
                System.out.println("column Family:" + new String(CellUtil.cloneFamily(cell)) + " ");
                System.out.println("row Name:" + new String(CellUtil.cloneQualifier(cell)) + " ");
                System.out.println("value:" + new String(CellUtil.cloneValue(cell)) + " ");
                System.out.println("---------------");
            }
        }

        public static void main(String... args) {
            Configuration config = HBaseConfiguration.create();
            config.set("hbase.zookeeper.property.clientPort", "2181");
            config.set("hbase.zookeeper.quorum", "192.168.11.73");
            config.set("hbase.master", "192.168.11.73:60000");
            String tablename = "visitor";
            String[] column_family = {"value"};
            try {
                //创建表
    //          creatTableForce(tablename, column_family, config);

                //列出表信息
                HTableDescriptor[] tables = listTables(config);
                printTables(tables);

                //插入行
                for (int i = 1; i < 5; i++)
                    instertRow(tablename, config, "row1", column_family[0], i + "", "value");

                //获取单行值
                Result result = getData(tablename, config, "row1", column_family[0]);
                showCell(result);

                //扫描表,获取前20行
                List<Result> results = scanData(tablename, config, 20);
                for (Result r : results) {
                    showCell(r);
                }

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

原文地址:https://www.cnblogs.com/nima/p/11751419.html

时间: 2024-10-13 13:37:16

Java开发Hbase示例的相关文章

Java 操作Hbase 完整例子

开发工具:Eclipse,三步1.新建一个项目2.把hbase安装下的lib的文件都拷贝进来3.把lib目录下jar文件都引入4.lib下的client-facing-thirdparty 目录下的jar也都引入看图 package com.yue; import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.hbase.;import org.apache.hadoop.hbase.client.; import j

阿里巴巴Java开发手册1.4.0

转自官网 前言 <阿里巴巴Java开发手册>是阿里巴巴集团技术团队的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断完善,系统化地整理成册,回馈给广大开发者.现代软件行业的高速发展对开发者的综合素质要求越来越高,因为不仅是编程知识点,其它维度的知识点也会影响到软件的最终交付质量.比如:数据库的表结构和索引设计缺陷可能带来软件上的架构缺陷或性能风险:工程结构混乱导致后续维护艰难:没有鉴权的漏洞代码易被黑客攻击等等.所以本手册以Java开发者为中心视角,划分为编程规约.异常日志.单元测

阿里巴巴 Java 开发手册 1.4.0

一.编程规约(一) 命名风格1. [强制]代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束.反例: _name / __name / $name / name_ / name$ / name__2. [强制]代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式.说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义.注意,即使纯拼音命名方式也要避免采用.正例: alibaba / taobao / youku / hangzhou 等国际通用的名称,可视同

阿里巴巴Java开发手册(华山版)

title: Java开发规范 date: 2018-10-08 14:01:59 tags: Java categories: Java --- 前言 本文章是将网上PDF版本的Java开发规范转换成的Markdown版本 Java 开发手册 版本号 作者 日期 备注 1.4.0 阿里巴巴集团技术团队 2018. 5. 20 增加设计规约(详尽版) 一.编程规约 (一) 命名风格 [强制]代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号 结束. 反例:_name __name

底层战详解使用Java开发Spark程序(DT大数据梦工厂)

Scala开发Spark很多,为什么还要用Java开发原因:1.一般Spark作为数据处理引擎,一般会跟IT其它系统配合,现在业界里面处于霸主地位的是Java,有利于团队的组建,易于移交:2.Scala学习角度讲,比Java难.找Scala的高手比Java难,项目的维护和二次开发比较困难:3.很多人员有Java的基础,确保对Scala不是很熟悉的人可以编写课程中的案例预测:2016年Spark取代Map Reduce,拯救HadoopHadoop+Spark = A winning combat

Lombok: Java开发的利器

Lombok是一个旨在减少代码开发工作的Java库.本文介绍了如何用它来完成getter/setter方法,构造方法,以及重写equals(),hashCode()和toString()方法.在Java中,一个很简单的类却往往写得特别复杂.如果你没听说过Lombok的话,那它肯定会让你满意的. Lombok可以帮助Java开发人员完成以下这些事情: 1. 不用再写setter/getter方法了 public class Animal { @Getter @Setter private Stri

Unit01: JAVA开发环境案例

Top JAVA Fundamental DAY01 JDK及Eclipse目录结构操作 JDK的安装及配置 控制台版的JAVA HelloWorld 使用Eclipse开发Java应用程序 1 JDK及Eclipse目录结构操作 1.1 问题 为熟练掌握 Linux 下的目录操作,本案例需要完成如下操作: 在Linux系统下,浏览jdk的目录结构. 在Linux系统下,浏览eclipse的目录结构. 1.2 方案 完成此案例,需要用到一些常用的 Linux命令.这些命令如下所示: pwd :显

java操作hbase例子

hbase安装方法请参考:hbase-0.94安装方法详解 hbase常用的shell命令请参考:hbase常用的shell命令例子 java操作hbase,在eclipse中创建一个java项目,将hbase安装文件根目录的jar包和lib目录下jar包导入项目,然后就可以编写java代码操作hbase了.下面代码给出来一个简单的示例 /** * @date 2015-07-23 21:28:10 * @author sgl */ package com.songguoliang.hbase;

Hadoop-06-使用Eclipse开发HBase程序

使用Eclipse开发HBase程序的配置步骤 1.新建一个普通的java project. 2.在项目的 属性--java build path--libraries--Add External Jars,添加hadoop安装目录下的hbase-0.90.5.jar和hbase-0.90.5-tests.jar,以及hbase安装目录下的lib目录下的所有jar文件. 3.在项目根目录下新建conf目录,然后拷贝hbase安装目录下的conf目录下的hbase-site.xml到该文件夹下.