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

转载:hbase入门 一些简单的查询语句

阅读更多

这里我们用一个学生成绩表作为例子,对HBase的基本操作和基本概念进行讲解:

下面是学生的成绩表:
name grad      course:math   course:art
Tom    1                87                    97

Jerry   2            100                  80

        这里grad对于表来说是一个列,course对于表来说是一个列族,这个列族由两个列组成:math和art,当然我们可以根据我们的需要在course中建立更多的列族,如computer,physics等相应的列添加入course列族.

        有了上面的想法和需求,我们就可以在HBase中建立相应的数据表啦!

1, 建立一个表格 scores 具有两个列族grad 和courese

hbase(main):002:0> create 'scores', 'grade', 'course'

0 row(s) in 4.1610 seconds

2,查看当先HBase中具有哪些表

hbase(main):003:0> list

scores

1 row(s) in 0.0210 seconds

3,查看表的构造

hbase(main):004:0> describe 'scores'

{NAME => 'scores', IS_ROOT => 'false', IS_META => 'false', FAMILIES => [{NAME => 'course', BLOOMFILTER => 'false', IN_MEMORY => 'false', LENGTH => '2147483647', BLOCKCACHE => 'false', VERSIONS => '3', TTL => '-1', COMPRESSION => 'NONE'}, {NAME => 'grade', BLOOMFILTER => 'false', IN_MEMORY => 'false', LENGTH => '2147483647', BLOCKCACHE => 'false', VERSIONS => '3', TTL => '-1', COMPRESSION => 'NONE'}]}

1 row(s) in 0.0130 seconds

4, 加入一行数据,行名称为 Tom 列族grad的列名为”” 值位1

hbase(main):005:0> put 'scores', 'Tom', 'grade:', '1'

0 row(s) in 0.0070 seconds

5,给Tom这一行的数据的列族添加一列 <math,87>

hbase(main):006:0> put 'scores', 'Tom', 'course:math', '87'

0 row(s) in 0.0040 seconds

6,给Tom这一行的数据的列族添加一列 <art,97>

hbase(main):007:0> put 'scores', 'Tom', 'course:art', '97'

0 row(s) in 0.0030 seconds

7, 加入一行数据,行名称为 Jerry 列族grad的列名为”” 值位2

hbase(main):008:0> put 'scores', 'Jerry', 'grade:', '2'

0 row(s) in 0.0040 seconds

8,给Jerry这一行的数据的列族添加一列 <math,100>

hbase(main):009:0> put 'scores', 'Jerry', 'course:math', '100'

0 row(s) in 0.0030 seconds

9,给Jerry这一行的数据的列族添加一列 <art,80>

hbase(main):010:0> put 'scores', 'Jerry', 'course:art', '80'

0 row(s) in 0.0050 seconds

10,查看scores表中Tom的相关数据

hbase(main):011:0> get 'scores', 'Tom'

COLUMN                       CELL

course:art                  timestamp=1224726394286, value=97

course:math                 timestamp=1224726377027, value=87

grade:                      timestamp=1224726360727, value=1

3 row(s) in 0.0070 seconds

11,查看scores表中所有数据

hbase(main):012:0> scan 'scores'

ROW                          COLUMN+CELL

Tom                         column=course:art, timestamp=1224726394286, value=97

Tom                         column=course:math, timestamp=1224726377027, value=87

Tom                         column=grade:, timestamp=1224726360727, value=1

Jerry                        column=course:art, timestamp=1224726424967, value=80

Jerry                        column=course:math, timestamp=1224726416145, value=100

Jerry                        column=grade:, timestamp=1224726404965, value=2

6 row(s) in 0.0410 seconds

12,查看scores表中所有数据courses列族的所有数据

hbase(main):013:0> scan 'scores', ['course:']

ROW                          COLUMN+CELL

Tom                         column=course:art, timestamp=1224726394286, value=97

Tom                         column=course:math, timestamp=1224726377027, value=87

Jerry                        column=course:art, timestamp=1224726424967, value=80

Jerry                        column=course:math, timestamp=1224726416145, value=100

4 row(s) in 0.0200 seconds

        上面就是HBase的基本shell操作的一个例子,可以看出,hbase的shell还是比较简单易用的,从中也可以看出HBase shell缺少很多传统sql中的一些类似于like等相关操作,当然,HBase作为BigTable的一个开源实现,而BigTable是作为 google业务的支持模型,很多sql语句中的一些东西可能还真的不需要.

        当然,通过程序我们也可以对HBase进行相关的操作.下面的程序就完成了上面shell操作的内容:

import java.io.IOException;

import java.io.ByteArrayOutputStream;

import java.io.DataOutputStream;

import java.io.ByteArrayInputStream;

import java.io.DataInputStream;

import java.util.Map;

import org.apache.hadoop.io.Writable;

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.hbase.HBaseConfiguration;

import org.apache.hadoop.hbase.HTableDescriptor;

import org.apache.hadoop.hbase.HColumnDescriptor;

import org.apache.hadoop.hbase.client.HBaseAdmin;

import org.apache.hadoop.hbase.client.HTable;

import org.apache.hadoop.hbase.io.BatchUpdate;

import org.apache.hadoop.hbase.io.RowResult;

import org.apache.hadoop.hbase.io.Cell;

import org.apache.hadoop.hbase.util.Writables;



public class HBaseBasic {



    public static void main(String[] args) throws Exception {

        HBaseConfiguration config = new HBaseConfiguration();

        HBaseAdmin admin = new HBaseAdmin(config);



        if (admin.tableExists("scores")) {

            System.out.println("drop table");

            admin.disable Table("scores");

            admin.deleteTable("scores");

        }



        System.out.println("create table");

        HTableDescriptor tableDescripter = new HTableDescriptor("scores".getBytes());

        tableDescripter.addFamily(new HColumnDescriptor("grade:"));

        tableDescripter.addFamily(new HColumnDescriptor("course:"));

        admin.createTable(tableDescripter);



        HTable table = new HTable(config, "scores");



        System.out.println("add Tom's data ");

        BatchUpdate tomUpdate = new BatchUpdate("Tom");

        tomUpdate.put("grade:", Writables.getBytes(new IntWritable(1)));

        tomUpdate.put("course:math", Writables.getBytes(new IntWritable(87)));

        tomUpdate.put("course:art", Writables.getBytes(new IntWritable(97)));

        table.commit(tomUpdate);



        System.out.println("add Jerry's data");

        BatchUpdate jerryUpdate = new BatchUpdate("Jerry");

        jerryUpdate.put("grade:", Writables.getBytes(new IntWritable(2)));

        jerryUpdate.put("course:math", Writables.getBytes(new IntWritable(100)));

        jerryUpdate.put("course:art", Writables.getBytes(new IntWritable(80)));

        table.commit(jerryUpdate);



        for (RowResult row : table.getScanner(new String[] { "course:" })) {

            System.out.format("ROW\t%s\n", new String(row.getRow()));

            for (Map.Entry<byte[], Cell> entry : row.entrySet()) {

                String column = new String(entry.getKey());

                Cell cell = entry.getValue();

                IntWritable value = new IntWritable();

                Writables.copyWritable(cell.getValue(), value);

                System.out.format("  COLUMN\t%s\t%d\n", column, value.get());

            }

        }

    }

}

        输出如下:

drop table

09/07/11 08:51:59 INFO client.HBaseAdmin: Disabled scores

09/07/11 08:51:59 INFO client.HBaseAdmin: Deleted scores

create table

add Tom's data

add Jerry's data

ROW     Tom

  COLUMN        course:art      97

  COLUMN        course:math     87

ROW     Jerry

  COLUMN        course:art      80

  COLUMN        course:math     100

原文出自:http://labs.chinamobile.com/mblog/4110_22332

分享到:
评论

相关推荐

    HBase学习利器:HBase实战

    - **第2章:入门指南**:通过一个简单的例子来展示如何安装配置HBase环境,以及如何使用命令行工具进行基本操作,如创建表、插入数据和查询数据。 - **第3章:分布式HBase、HDFS和MapReduce**:深入探讨HBase如何...

    hbase-common-1.4.3-API文档-中文版.zip

    赠送jar包:hbase-common-1.4.3.jar; 赠送原API文档:hbase-common-1.4.3-javadoc.jar; 赠送源代码:hbase-common-1.4.3-sources.jar; 赠送Maven依赖信息文件:hbase-common-1.4.3.pom; 包含翻译后的API文档:...

    论文:HBase: A NoSQL database

    HBase通常用于处理大量的非结构化或半结构化数据,适用于实时查询、日志处理、文档存储和其他需要高吞吐量和低延迟的应用场景。 #### HBase的关键特点 1. **分布式的列族存储**:HBase使用列族的概念来组织数据,...

    HBase安装与配置资源下载:hbase-1.2.6

    HBase的使用包括创建表、插入数据、查询数据、更新数据等操作,可以使用HBase Shell或编程接口(如Java API)进行。学习HBase,还需理解Region划分策略、Compaction压缩机制、Coprocessor协处理器等高级概念,以更好...

    指导手册06:HBase安装部署 hbase配置文件

    指导手册06:HBase安装部署 hbase配置文件

    HBase:HBase_in_Alibaba_Search(绝顶).pdf

    7. 问答环节:通过问答环节,可以了解到HBase在阿里搜索推荐应用中遇到的一些具体问题,以及相关技术人员是如何解决这些问题的。例如,如何处理大规模数据,如何优化查询性能,如何保证系统的高可用性和稳定性等。 ...

    hbase-annotations-1.1.2-API文档-中文版.zip

    赠送jar包:hbase-annotations-1.1.2.jar; 赠送原API文档:hbase-annotations-1.1.2-javadoc.jar; 赠送源代码:hbase-annotations-1.1.2-sources.jar; 赠送Maven依赖信息文件:hbase-annotations-1.1.2.pom; ...

    hbase入门和使用

    HBase入门和使用知识点总结: 1. HBase基本介绍: HBase是建立在Hadoop文件系统(HDFS)之上的一种开源、分布式、可扩展的非关系型数据库。它是一种列式存储系统,模仿Google的Bigtable模型,适用于海量数据的实时...

    HBase入门与使用

    4. **查询与扫描**:HBase支持简单的查询和范围扫描,但复杂查询可能需要自定义索引或在应用层实现。 #### HBase应用场景 HBase适用于以下几种典型场景: 1. **大数据存储**:对于数据量快速增长且需要长期保存的...

    Hbase权威指南(HBase: The Definitive Guide)

    - **灵活的数据模型**:HBase允许用户在不需要预先定义数据结构的情况下插入和查询数据,这对于处理半结构化或非结构化数据非常有用。 #### 五、HBase的应用场景 - **大规模数据存储**:适合于需要存储和检索大量...

    分布式存储系统hadoop:hbase安装

    分布式存储系统hadoop:hbase安装经验,非常不错的hadoop之hbase,入门环境搭建。

    读书笔记:HBase权威指南.zip

    读书笔记:HBase权威指南

    读书笔记:HBase 权威指南.zip

    读书笔记:HBase 权威指南

    大数据处理:HBASE.ppt

    【大数据处理:HBASE.ppt】的文档主要探讨了从关系型数据库(RDBMS)向分布式非关系型数据库HBase的转换,以及HBase在大数据处理中的表设计、操作方式和最佳实践。 1. **从RDBMS到HBase的表设计转变** - RDBMS基于...

    FlinkSQL实战:HBase的结合应用

    HBase作为Google发表BigTable论文的开源实现版本,是一种分布式列式存储的数据库,构建在HDFS之上的NoSQL数据库,非常适合大规模实时查询,因此HBase在实时计算领域使用非常广泛。可以实时写HBase,也可以利用...

    HBase专场:HBase在时序数据库中的应用(悠你).pdf

    在本文档中,专家悠你123深入探讨了HBase在时序数据库中的应用,以下是从文档标题、描述和部分内容中提取的详细知识点。 HBase是一种分布式、可扩展的存储系统,它基于Google的Bigtable模型,专为Hadoop设计,提供...

    读书笔记:hbase权威指南学习代码.zip

    读书笔记:hbase权威指南学习代码

    hbase-procedure-1.4.3-API文档-中文版.zip

    赠送jar包:hbase-procedure-1.4.3.jar; 赠送原API文档:hbase-procedure-1.4.3-javadoc.jar; 赠送源代码:hbase-procedure-1.4.3-sources.jar; 赠送Maven依赖信息文件:hbase-procedure-1.4.3.pom; 包含翻译后...

    hbase-metrics-1.4.3-API文档-中文版.zip

    赠送jar包:hbase-metrics-1.4.3.jar; 赠送原API文档:hbase-metrics-1.4.3-javadoc.jar; 赠送源代码:hbase-metrics-1.4.3-sources.jar; 赠送Maven依赖信息文件:hbase-metrics-1.4.3.pom; 包含翻译后的API文档...

    hbase-server-1.1.3-API文档-中文版.zip

    赠送jar包:hbase-server-1.1.3.jar; 赠送原API文档:hbase-server-1.1.3-javadoc.jar; 赠送源代码:hbase-server-1.1.3-sources.jar; 赠送Maven依赖信息文件:hbase-server-1.1.3.pom; 包含翻译后的API文档:...

Global site tag (gtag.js) - Google Analytics