`
liyonghui160com
  • 浏览: 776030 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用新的Java API(>=0.96.0)操作HBase数据库

阅读更多

 

package com.my.hbase;

import java.io.IOException;
import java.util.*;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.Cell;


public class HbaseUtils {

    private static Configuration conf = null;
    private static HConnection conn = null;
    private final static int BATCH_SIZE = 1000;

    static {
        try {
            conf = HBaseConfiguration.create();
            conn = HConnectionManager.createConnection(conf);
            conf.set("hbase.zookeeper.quorum","master");
            conf.set("hbase.zookeeper.property.clientPort", "2181");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }


    // 创建数据库表
    public void createTable(String tableName, String[] columnFamilys)
            throws Exception {
        // 新建一个数据库管理员
        HBaseAdmin hAdmin = new HBaseAdmin(conf);

        if (hAdmin.tableExists(tableName)) {
            System.out.println("表已经存在");
            System.exit(0);
        } else {
            // 新建一个 scores 表的描述
            HTableDescriptor tableDesc = new HTableDescriptor(TableName.valueOf(tableName));
            // 在描述里添加列族
            for (String columnFamily : columnFamilys) {
                tableDesc.addFamily(new HColumnDescriptor(columnFamily));
            }
            // 根据配置好的描述建表
            hAdmin.createTable(tableDesc);
            System.out.println("创建表成功");
        }
        hAdmin.close();
    }


    // 删除数据库表
    public void deleteTable(String tableName) {
        // 新建一个数据库管理员
        try {
            HBaseAdmin hAdmin = new HBaseAdmin(conf);
            if (hAdmin.tableExists(tableName)) {
                // 关闭一个表
                hAdmin.disableTable(tableName);
                // 删除一个表
                hAdmin.deleteTable(tableName);
                System.out.println("删除表成功");
            } else {
                System.out.println("删除的表不存在");
                System.exit(0);
            }
            hAdmin.close();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {

        }
    }


    // 添加一条数据
    public void addRow(String tableName, String row,
                              String columnFamily, String column, String value) throws Exception {

        HTableInterface table =conn.getTable(tableName);
        Put put = new Put(Bytes.toBytes(row));
        // 参数出分别:列族、列、值
        put.add(Bytes.toBytes(columnFamily), Bytes.toBytes(column),
                Bytes.toBytes(value));
        table.put(put);
        table.close();
    }

    // 批量添加数据
    private void write(String hbaseTableName,String rowPrefix, String columnFamily,
                       String qualifier, Collection<String> contents) {
        HTableInterface table = null;
        try {
            table = conn.getTable(hbaseTableName);
            List<Put> putList = new ArrayList<Put>();
            int idx = 0;
            //row自行定义
            for (String line : contents) {
                String rowKey = rowPrefix + idx;
                if (contents.size() == 1)
                    rowKey = rowPrefix;
                idx++;
                Put put = new Put(rowKey.getBytes());
                put.add(columnFamily.getBytes(), qualifier.getBytes(),
                        line.getBytes());
                putList.add(put);
                if (putList.size() >= BATCH_SIZE) {
                    table.put(putList);
                    table.flushCommits();
                    putList.clear();
                }
            }
            table.put(putList);
            table.flushCommits();
        } catch (Throwable e) {
            e.printStackTrace();
        } finally {
            if (table != null) {
                try {
                    table.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }



    // 删除一条数据
    public void delRow(String tableName, String row) throws Exception {
        HTableInterface table =conn.getTable(tableName);
        Delete del = new Delete(Bytes.toBytes(row));
        table.delete(del);
        table.close();
    }


    // 删除多条数据
    public void delMultiRows(String tableName, String[] rows)
            throws Exception {
        HTableInterface table =conn.getTable(tableName);
        List<Delete> list = new ArrayList<Delete>();

        for (String row : rows) {
            Delete del = new Delete(Bytes.toBytes(row));
            list.add(del);
        }

        table.delete(list);
        table.close();
    }


    // get row
    public Map<String, String> getRow(String tableName, String row) throws Exception {
        HTableInterface table =conn.getTable(tableName);
        Get get = new Get(Bytes.toBytes(row));
        Result result = table.get(get);
        Map<String, String> returnResult = new HashMap<String, String>();
        // 输出结果
        for (Cell rowKV : result.rawCells()) {
            returnResult.put(new String(CellUtil.cloneRow(rowKV)), new String(CellUtil.cloneValue(rowKV)));
        }
        table.close();
        return returnResult;
    }


    // get all records
    public Map<String, String> getAllRows(String tableName) throws Exception {
        HTableInterface table =conn.getTable(tableName);
        Scan scan = new Scan();
        ResultScanner results = table.getScanner(scan);
        Map<String, String> returnResult = new HashMap<String, String>();
        // 输出结果
        for (Result result : results) {
            for (Cell rowKV : result.rawCells()) {
                returnResult.put(new String(CellUtil.cloneRow(rowKV)), new String(CellUtil.cloneValue(rowKV)));
            }
        }
        table.close();
        return returnResult;
    }

    private String getFirst(Map<String, String> dataMap) {
        if (dataMap == null || dataMap.size() == 0)
            return null;
        else {
            for (String s : dataMap.values()) {
                return s;
            }
        }
        return null;
    }


    // main
    public static void main(String[] args) {
        try {

            HbaseUtils hbaseUtils=new HbaseUtils();
            String tableName = "users2";

            // 第一步:创建数据库表:“users2”
            String[] columnFamilys = { "info", "course" };
            hbaseUtils.createTable(tableName, columnFamilys);

            // 第二步:向数据表的添加数据
            // 添加第一行数据
            hbaseUtils.addRow(tableName, "tht", "info", "sex", "boy");
            hbaseUtils.addRow(tableName, "tht", "course", "china", "97");
            hbaseUtils.addRow(tableName, "tht", "course", "math", "128");
            hbaseUtils.addRow(tableName, "tht", "course", "english", "85");
            // 添加第二行数据
            hbaseUtils.addRow(tableName, "xiaoxue", "info", "age", "19");
            hbaseUtils.addRow(tableName, "xiaoxue", "info", "sex", "boy");
            hbaseUtils.addRow(tableName, "xiaoxue", "course", "china", "90");
            hbaseUtils.addRow(tableName, "xiaoxue", "course", "math", "120");
            hbaseUtils .addRow(tableName, "xiaoxue", "course", "english", "90");
            // 添加第三行数据
            hbaseUtils.addRow(tableName, "qingqing", "info", "age", "18");
            hbaseUtils.addRow(tableName, "qingqing", "info", "sex", "girl");
            hbaseUtils.addRow(tableName, "qingqing", "course", "china", "100");
            hbaseUtils.addRow(tableName, "qingqing", "course", "math", "100");
            hbaseUtils.addRow(tableName, "qingqing", "course", "english","99");
            // 第三步:获取一条全部版本数据
            System.out.println("获取一条数据");
            hbaseUtils.getRow(tableName, "tht");
            // 第三步:获取一条有效数据
            hbaseUtils.getFirst(hbaseUtils.getRow(tableName, "tht"));
            // 第四步:获取所有数据
            System.out.println("获取所有数据");
            hbaseUtils.getAllRows(tableName);
            // 第五步:删除一条数据
            System.out.println("删除一条数据");
            hbaseUtils.delRow(tableName, "tht");
            hbaseUtils.getAllRows(tableName);
            // 第六步:删除多条数据
            System.out.println("删除多条数据");
            String[] rows = { "xiaoxue", "qingqing" };
            hbaseUtils.delMultiRows(tableName, rows);
            hbaseUtils.getAllRows(tableName);
            // 第八步:删除数据库
            System.out.println("删除数据库");
            hbaseUtils.deleteTable(tableName);

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

 

分享到:
评论

相关推荐

    Hbase笔记 —— 利用JavaAPI的方式操作Hbase数据库(往hbase的表中批量插入数据).pdf

    在本文档中,我们将深入探讨如何使用Java API与HBase数据库进行交互,特别是关于如何创建表、修改表结构以及批量插入数据。HBase是Apache的一个分布式、可扩展的大数据存储系统,它基于谷歌的Bigtable设计,适用于...

    使用Java API连接虚拟机HBase并进行数据库操作,Java源代码

    在本文中,我们将深入探讨如何使用Java API连接到运行在虚拟机上的HBase数据库,并进行相关的数据操作。HBase是一个分布式的、版本化的、基于列族的NoSQL数据库,它构建于Hadoop之上,适用于处理大规模的数据存储和...

    java访问Hbase数据库Demo

    Java访问Hbase数据库是大数据处理中的常见操作,尤其在分布式存储和实时数据分析场景下。HBase,一个基于Google Bigtable模型的开源非关系型数据库,是Apache Hadoop生态系统的一部分,提供高并发、低延迟的数据存储...

    hbase 数据库

    HBase,全称为Apache HBase,是一款开源的分布式数据库,基于Google的Bigtable设计思想,是Apache Hadoop生态系统的一部分。HBase提供高可靠性、高性能、列式存储、可伸缩性和实时读写能力,适用于大数据处理场景。...

    如何使用Java API操作Hbase(基于0.96新的api)

    在Java中操作HBase,尤其是基于0.96版本的新API,涉及到许多核心概念和方法。HBase是一个分布式的、可扩展的列式数据库,它建立在Hadoop之上,适用于实时读写大数据。本篇文章将深入探讨如何使用Java API与HBase进行...

    java 连接远程hbase 数据库

    以下是一些关于如何使用Java连接远程HBase数据库的重要知识点: 1. **引入依赖**: 标签中的"java habse"暗示我们需要Java的HBase客户端库。描述中提到的"所有jar"通常指的是这些库。在Java项目中,这些依赖可以通过...

    Hbase调用JavaAPI实现批量导入操作

    这篇博客“Hbase调用Java API实现批量导入操作”聚焦于如何利用Java编程语言高效地向HBase中批量导入数据。在这个过程中,我们将探讨以下几个关键知识点: 1. **HBase架构**: HBase是基于列族的存储模型,数据被...

    HBase数据库设计.doc

    【HBase数据库设计】 HBase是一种基于列存储的分布式数据库,它是Apache Hadoop生态系统的一部分,设计用于处理海量数据。HBase的主要特征包括: 1. **分布式存储**:HBase构建在Hadoop的HDFS(Hadoop Distributed...

    java代码使用thrift2操作hbase示例

    在本文中,我们将深入探讨如何使用Java通过Thrift2接口操作HBase数据库。HBase是一个分布式、可扩展的大数据存储系统,它构建于Hadoop之上,支持实时读写。Thrift是一个轻量级的框架,用于跨语言服务开发,允许不同...

    java api 访问hbase demo(Maven)

    在Java API中访问HBase是大数据处理中常见的一项任务,HBase作为一个分布式、列式存储的NoSQL数据库,常用于海量数据的实时读写。在这个Java API访问HBase的Maven项目中,我们将探讨如何配置项目,引入依赖,以及...

    hbase数据库

    4. 无SQL语言支持:HBase没有自己的SQL语言,但是提供了Java API供开发者操作数据。 5. 多版本支持:HBase存储每个数据行的多个版本,允许在不同的时间点进行数据快照。 6. 分布式多层次映射表结构:HBase的数据模型...

    java操作Hbase之从Hbase中读取数据写入hdfs中源码

    在Java中操作HBase,我们需要使用HBase的Java客户端API。首先,确保引入了所有必要的jar包,这些包通常包括hbase-client、hbase-common、hadoop-client等。这些依赖可以使用Maven或Gradle等构建工具管理,或者直接在...

    Java操作Hbase进行建表、删表以及对数据进行增删改查

    Java 操作 Hbase 进行建表、删表以及对...本文介绍了使用 Java 操作 Hbase 进行建表、删表以及对数据进行增删改查的操作。这些操作都是基于 Hbase 的 API 实现的。同时,也介绍了使用 Filter 对象进行条件查询的方法。

    javaApi_sparkhiveAPI_hbaseAPI.zip

    - **Region Server**:HBase将数据分布在多个Region Server上,Java API允许开发者管理这些服务器并执行跨服务器的操作。 - **Scan和Get操作**:通过API,可以执行扫描(Scans)来获取多行数据,或者使用Get方法...

    java调用hbase实现数据库的增删改查

    java调用hbase数据库,完成对hbase常用api的封装和对hbase数据库的增删改查等操作,经测试绝对可用。

    java链接及操作hbase实例代码

    这个名为“Hbasetest”的压缩包文件很可能包含了上述操作的完整示例代码,你可以通过查看和运行代码来加深对Java操作HBase的理解。务必注意,根据你的HBase集群配置,可能需要调整代码中的连接参数,以确保正确连接...

    thrift操作Hbase数据库

    在本项目中,我们将关注如何使用C#语言通过Thrift2来操作Hbase数据库,实现数据的增、删、改、查(CRUD)功能。 1. **Thrift2与Hbase的交互** Thrift2提供了一种灵活的方式与Hbase进行交互。首先,我们需要在Hbase...

    hbase java api 访问 增加修改删除(一)

    在本文中,我们将深入探讨如何使用HBase的Java API进行数据的增加、修改和删除操作。HBase是一个基于Google Bigtable设计的开源分布式数据库,它属于Apache Hadoop生态系统的一部分,适用于处理大规模数据存储。通过...

    在集群中java 通过调用API操作HBase 0.98

    本篇文章将深入探讨如何在集群环境中使用Java API来操作HBase 0.98版本,主要包括创建表格、删除表格等基本操作。 首先,为了在Java中调用HBase的API,我们需要添加HBase的依赖库到项目中。对于HBase 0.98,你需要...

    C#使用Thrift2操作HBase数据库

    标题“C#使用Thrift2操作HBase数据库”表明我们将讨论如何在C#环境下利用Thrift2库与HBase进行交互,执行基本的数据操作,如添加(Insert)、删除(Delete)、更新(Update)和查询(Select)。 首先,我们需要理解...

Global site tag (gtag.js) - Google Analytics