hbase开发:使用java操作hbase_结合实例论述总结的特点有哪些

hbase开发:使用java操作hbase_结合实例论述总结的特点有哪些HBase总结-Java API 与HBase交互实例

大家好,又见面了,我是你们的朋友全栈君。

package com.unilife.utils.persistence;

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.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;  
    static {  
        conf = HBaseConfiguration.create();  
        conf.set("hbase.zookeeper.quorum", "master");  
    }  
  
    /*  
     * 创建表  
     *   
     * @tableName 表名  
     *   
     * @family 列族列表  
     */  
    public static void creatTable(String tableName, String[] family)  
            throws Exception {  
        HBaseAdmin admin = new HBaseAdmin(conf);  
        HTableDescriptor desc = new HTableDescriptor(tableName);  
        for (int i = 0; i < family.length; i++) {  
            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");  
  
    }  
}  

 

转载于:https://my.oschina.net/u/1458864/blog/2236865

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107266.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【损失函数系列】softmax loss损失函数详解

    【损失函数系列】softmax loss损失函数详解1.损失函数:损失函数(lossfunction)是用来评测模型的预测值f(x)与真实值Y的相似程度,损失函数越小,就代表模型的鲁棒性越好,损失函数指导模型学习。根据损失函数来做反向传播修改模型参数。机器学习的目的就是学习一组参数,使得预测值与真值无限接近。2.softmaxloss:它是损失函数的一种,是softmax和cross-entropyloss组合而成的损失函数。先看softmax,其函数形式如下:其中zj就是某个神经网络全连…

    2022年6月26日
    73
  • 计算机本科211调剂到双非值得吗,经验分享:从双非到211,调剂是场快准狠的战役…

    计算机本科211调剂到双非值得吗,经验分享:从双非到211,调剂是场快准狠的战役…经验分享:从双非到211,调剂是场快准狠的战役摘要:最近在论坛中,看到很多18的学弟学妹们焦急询问调剂的相关事宜,作为一个过来人,我是有一些经验的,今天和大家分享我调剂的过程,希望对大家有所帮助。作者佚名次阅读2018-02-19摘要:最近在论坛中,看到很多18的学弟学妹们焦急询问调剂的相关事宜,作为一个过来人,我是有一些经验的,今天和大家分享我调剂的过程,希望对大家有所帮助。【个人情况】先介绍…

    2022年5月6日
    71
  • CreateMutex() 、ReleaseMutex()

    CreateMutex() 、ReleaseMutex()功能:CreateMutex()用于有独占要求的程序(在其进程运行期间不允许其他使用此端口设备的程序运行,或不允许同名程序运行)。比如运行金山词霸时,一次只能运行一个实例,当运行第二个实例时,实际上是激活第一个实例,将其带到最顶层。原型:1HANDLECreateMutex(2LPSECURITY_ATTRIBUTESlpMutexAttribut…

    2022年6月26日
    36
  • 俞敏洪老师在新东方20期新教师培训会议上的讲话

    俞敏洪老师在新东方20期新教师培训会议上的讲话亲爱的各位老师,    大家晚上好!  每次见到新东方教师我都特别开心,不仅仅是因为你们是新东方的教师,而是因为你们是比我更加年轻的一代。如果说中国的未来在哪里,就在你们身上;如果说新东方的未来在哪里,也在你们身上;也许未来的总裁或者董事长也在你们中间,所以我要对你们在座的每一位表示足够的尊重。  在座的各位都是比较年轻的教师,大部分人可能是第一次来北京,因为都是新老师。如

    2025年11月4日
    2
  • 冯诺依曼结构的基本原理_冯诺依曼机工作原理

    冯诺依曼结构的基本原理_冯诺依曼机工作原理2.冯诺依曼计算机的工作原理*存储系统构建与快速访问存储程序:将程序存放在计算机的存储器中*指令系统、控制器设计等程序控制:按指令地址访问存储器并取出指令,经译码依次产生指令执行所需的控制信号

    2022年8月5日
    3
  • java8静态变量放在哪个区_jdk8.0 内存划分

    java8静态变量放在哪个区_jdk8.0 内存划分java1.8之前内存区域分为方法区、堆内存、虚拟机栈、本地方法栈、程序计数器。下图所示:方法区(MethodArea)与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。虽然Java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做Non-Heap(非堆),目的应该是与Java堆区分开来。很多人都更愿意把方…

    2022年6月12日
    145

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号