`
kim_miao
  • 浏览: 190873 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Hbase常用shell及API

阅读更多
  在项目中使用到了HBASE,我也只是用到了其中一点API,更深层的东西了解不多,还需要以后继续学习和研究.
1.Hbase Shell常用命令
(1)创建表:create '表名称', 'family','列名称1','列名称2'
以student表为例,创建以下表结构:
create 'student','name','fistname','lastname'

(2)查看表结构: describe '表名'
查看student表:
	describe 'student'

         (3)表中增加记录:put '表名','rowkey','family:column','值' 
往student表中新增一条记录:
put 'student','111','name:firstname','kim'   

(4)查看某记录:get '表名','rowkey'
查看刚才插入的一条记录:
get 'student','111'

(5)查看所有记录: scan '表名'
如:scan 'student',数据如下:
ROW                                COLUMN+CELL                                                                                                                                            
  111                                                column=name:firstname, timestamp=1323844528158, value=kim    


(6)查看多个version的数据:
get 'student','111',{COLUMN=>'name:firstname',VERSIONS=>10},数据如下:
COLUMN                                   CELL                                                                                                                             

        name:firstname                                     timestamp=1323845067789, value=kim4                                                                    	
        name:firstname                                     timestamp=1323845064974, value=kim3                                                                       
	 name:firstname                                     timestamp=1323845062682, value=kim2    
 

(7)删除一张表:
先disable '表名',然后再drop '表名'即可.


2.Hbase Client相关API使用

  别的不多说,这是一个访问HBASE数据类.代码如下:

public class HbaseManagerImpl implements HbaseManager {

    private static final Logger logger        = LoggerFactory
                                                  .getLogger(HbaseManagerImpl.class);

    private final static String SEPARATE_CHAR = ":";
    private HTablePool          hTablePool    = null;


    public HbaseManagerImpl() {

        try {

            Configration configration = ConfigrationFactory.getConfigration();
            Configuration hbaseConfiguration = HBaseConfiguration.create();
            hTablePool = new HTablePool(hbaseConfiguration, 100);

        } catch (Exception e) {
            logger.error("HbaseManager启动失败", e);
        }

    }
      /**
     * 根据表名,rowKey,family及时间戳[startTs,endTs)查询相关数据.
     * 
     */
    public Map<String, Map<Long, String>> queryMultiVersions(String tableName, String rowKey,
                                                             String family, long startTS, long endTS) {
        //返回结果
        Map<String, Map<Long, String>> resultMap = new HashMap<String, Map<Long, String>>();

        if (startTS > endTS) {
            logger.warn("rowKey[" + rowKey + "],开始时间戳大于结束时间戳");
            return resultMap;
        }

        HTableInterface hTable = null;

        try {
            hTable = hTablePool.getTable(Bytes.toBytes(tableName));

            Get get = new Get(Bytes.toBytes(rowKey));
            get.setMaxVersions();
            get.setTimeRange(startTS, endTS);

            Result result = hTable.get(get);

            NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> map = result
                .getMap();

            if (map == null) {
                return resultMap;
            }

            //取得指定family下的数据
            NavigableMap<byte[], NavigableMap<Long, byte[]>> familyMap = map.get(Bytes
                .toBytes(family));
            if (familyMap == null) {
                return resultMap;
            }

            Set<byte[]> familyMapSet = familyMap.keySet();

            for (Iterator<byte[]> familyIt = familyMapSet.iterator(); familyIt.hasNext();) {
                byte[] keyColumn = (byte[]) familyIt.next();
                NavigableMap<Long, byte[]> columnMap = familyMap.get(keyColumn);

                Map<Long, String> mapColumn = new HashMap<Long, String>();

                Set<Long> columnMapSet = columnMap.keySet();
                for (Iterator<Long> columnIt = columnMapSet.iterator(); columnIt.hasNext();) {
                    Long columnKey = (Long) columnIt.next();
                    String columnValue = new String(columnMap.get(columnKey));
                    mapColumn.put(columnKey, columnValue);
                }

                resultMap.put(new String(keyColumn), mapColumn);
            }

        } catch (Exception e) {
            logger.error("查询HBASE出错,rowKey[" + rowKey + "]", e);
           
        } finally {
            if (hTable != null) {
                hTablePool.putTable(hTable);
            }
        }
        return resultMap;
    }
    
    /**
     * HBASE中存入数据.
     */
    public boolean save(String tableName, String family, String rowkey, String column,
                        String value, long timestamp) {

        boolean result = false;
        HTableInterface hTable = null;


        try {
            hTable = hTablePool.getTable(Bytes.toBytes(tableName));
            final Put put = new Put(Bytes.toBytes(rowkey));

            byte[] familyBytes = Bytes.toBytes(family);
            byte[] qualifier = Bytes.toBytes(column);
            byte[] valueBytes = value.getBytes();
            put.add(familyBytes, qualifier, timestamp, valueBytes);
            hTable.put(put);
            result = true;
        } catch (Exception e) {
            logger.error("保存HBASE出错,rowKey[" + rowkey + "],timestamp[" + timestamp + "],value["
                         + value + "]", e);
          
        } finally {
            if (hTable != null) {
                hTablePool.putTable(hTable);
            }
        }

        return result;
    }

     /**
     * 删除指定表名的rowKey下某时间戳的数据。
     */   
    public boolean delete(String tableName, String rowKey, long timestamp) {
        boolean result = false;
        HTableInterface hTable = null;
        try {
            hTable = hTablePool.getTable(Bytes.toBytes(tableName));

            if (hTable == null) {
                return result;
            }

            byte[] rowKeys = Bytes.toBytes(rowKey);
            Delete delete = new Delete(rowKeys, timestamp, null);
            hTable.delete(delete);
            result = true;
        } catch (Exception e) {
            logger.error("delete(),rowKey[" + rowKey + "],ts[" + timestamp + "].", e);
            
        } finally {
            if (hTable != null) {
                hTablePool.putTable(hTable);
            }
        }

        return result;
    }
   
}



0
0
分享到:
评论

相关推荐

    hbase常用JAVA API

    HBase是一种分布式、高性能、...以上就是HBase常用Java API的基本操作。在实际应用中,还需要考虑并发控制、性能优化、错误处理等高级话题。通过熟练掌握这些API,你可以灵活地在Java应用程序中实现对HBase的数据操作。

    Hbase shell及常用命令

    HBase shell及常用命令 HBase Shell是HBase数据库的命令行工具,用户可以使用HBase Shell与HBase进行交互。HBase Shell是一个封装了Java客户端API的JRuby应用软件,在HBase的HMaster主机上通过命令行输入hbase ...

    大数据技术原理及应用课实验3 熟悉常用的HBase操作 林子雨实验

    【大数据技术原理及应用实验3:熟悉常用的HBase操作】 HBase是一种分布式、列式存储的NoSQL数据库,它是构建在Hadoop文件系统(HDFS)之上的,用于处理大规模数据集的应用。在Hadoop生态体系中,HBase提供实时读写...

    实验三:熟悉常用的HBase操作

    实验的目标是让你理解HBase在Hadoop架构中的地位,以及掌握通过Shell命令和Java API进行基本操作的方法。 首先,让我们来看看实验的平台配置。实验要求的操作系统是Linux,这通常是大数据处理的首选平台,因为它...

    hbase shell命令详解

    HBase是Apache Hadoop生态系统中的一个分布式、高性能的NoSQL数据库。它主要设计用来处理海量数据,适合实时读写操作。...在实际工作中,根据具体需求,结合HBase的API和Shell,可以实现各种复杂的数据操作和管理任务。

    大数据实验三-HBase编程实践

    通过本次实验,我对HBase的安装配置有了深入的理解,并掌握了如何使用Shell命令和Java API来进行表的操作。HBase的强大之处在于它能够处理大规模的数据,并且提供了高效的数据读写能力。在未来的工作中,我会更加...

    实验4熟悉常用的HBase操作.docx

    熟练使用 HBase 操作常用的 Shell 命令 HBase Shell 是 HBase 的命令行界面,用户可以通过 HBase Shell 来执行各种操作,例如列出所有表的相关信息、打印指定表的所有记录数据、向已创建好的表添加和删除指定的列族...

    hbase-client

    Java API是HBase最常用的客户端接口,它允许开发人员在Java应用中直接操作HBase。Java API包括HBaseAdmin类用于管理表和列族,HTableInterface和它的实现HTable用于与表进行交互,Put和Get类分别用于写入和读取数据...

    实验三:熟悉常用的HBase操作.docx.zip

    在HBase中,这些操作可能包括使用HBase Shell、Java API或者其他的客户端工具来管理表、行、列族和时间戳等元素。 【标签解析】: 由于提供的标签为空,我们无法直接获取特定的关键词,但根据标题和描述,我们可以...

    Hbase+Spring boot实战分布式文件存储

    并对HBase进行实战操作,讲解基本的shell命令及java api。重点讲解如何通过过滤器筛选数据... 3-1 HBase写流程 3-2 HBase读流程 3-3 HBase模块协作 3-4 HBase实战:Shell命令实战 3-5 HBase实 战:Java Api实现HBase...

    数据存储实验3-熟悉常用的HBase操作.doc(实验报告)

    本实验报告旨在熟悉常用的HBase操作,包括使用HBase Shell命令和Java API对HBase进行操作。实验平台基于Linux操作系统,使用Hadoop 2.6.0或以上版本、HBase 1.1.2或以上版本和JDK 1.6或以上版本。 一、实验目的 1....

    Hbase 官方中文文档

    HBase官方中文文档概述了Apache HBase TM的基本概念、配置方法、升级策略、shell使用、数据模型、架构设计、安全机制、API接口、性能调优以及故障排除等多方面的知识。HBase是一个开源的非关系型分布式数据库(NoSQL...

    HBase技术介绍.docx

    #### 二、HBase的核心特性及原理 ##### 1. **基于Hadoop生态系统** - **HDFS(Hadoop Distributed File System)**: 作为HBase的基础存储层,提供高可用性和持久化的数据存储能力。 - **MapReduce**: 支持对HBase...

    apache hbase reference guide

    - **Bundled HBase MapReduce Jobs**(打包的HBase MapReduce任务):预定义了一些常用的任务模板,简化了开发流程。 - **HBase as a MapReduce Job DataSource and Data Sink**(HBase作为MapReduce作业的数据源和...

    大数据实验 实验三:熟悉常用的HBase操作

    在这个实验中,我们将深入理解HBase在Hadoop生态系统中的角色,并通过Shell命令和Java API熟悉其常用操作。 一、HBase在Hadoop体系结构中的角色 HBase是Hadoop生态系统中的一个关键组件,它提供了一个实时读写、高...

    hbase 教程 简单易懂 初学者必备

    HBase Shell提供了命令行接口,也可以通过Java API进行编程操作。 9. **监控与优化** 使用HBase自带的监控界面或通过Ambari等工具,可以监控HBase集群的状态,包括Region分布、内存使用、延迟等,以便进行性能优化...

    HBase技术介绍

    Java Native API是最常用且效率最高的方式,适合MapReduce作业进行批量处理。HBase Shell是命令行工具,适合进行基本管理和操作。Thrift Gateway通过Thrift协议支持多种语言,如C++、PHP和Python,适用于异构系统。...

    hbase-2.2.6-bin.tar.zip

    HBase的客户端API提供了Java、Shell等多种接口供开发者使用。此外,HBase还支持通过HBase Shell进行命令行操作,方便进行日常管理。 在性能优化方面,可以通过调整Region大小、预分区表、使用BlockCache和MemStore...

    大数据平台技术—实验2(2023-2024-1) (2).doc

    2. 掌握 HBase 操作常用 Shell 命令 3. 掌握 HBase 数据表的创建、添加数据、查看数据、删除数据、删除表、查询历史数据等操作 二、实验环境: Linux 操作系统环境,VirtualBox 虚拟机,Hadoop、HBase 等程序 三...

Global site tag (gtag.js) - Google Analytics