HBase是Hadoop的一个子项目,HBase采用了Google BigTable的稀疏的,面向列的数据库实现方式的理论,建立在hadoop的hdfs上,一方面里用了hdfs的高可靠性和可伸缩行,另外一方面里用了BigTable的高效数据组织形式.可以说HBase为海量数据的real-time相应提供了很好的一个开源解决方案.据说在某运营商中使用类似于BigTable(个人猜测应该就是HBase)的技术可以在两秒时间内从2TB数据中查找到某条话费记录.而这是原来该运营商使用Oracle数据库所无法解决的问题.
对于HBase使用的类似与BigTable的技术我们这里就不仔细描述,可以参考google的论文以及网上的一些相关资料.另外,HBase的配置在HBase的官方文档中有很详细的描述.可以参见相关文档.
HBase提供了一个类似于mysql等关系型数据库的shell.通过该shell我们可以对HBase的内的相关表以及列族进行控制和处理.HBase shell的help命令比较详细的列出了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.disableTable("scores");
admin.deleteTable("scores");
}
System.out.println("create table");
HTableDescriptor tableDescripter = newHTableDescriptor("scores".getBytes());
tableDescripter.addFamily(newHColumnDescriptor("grade:"));
tableDescripter.addFamily(newHColumnDescriptor("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(newIntWritable(1)));
tomUpdate.put("course:math", Writables.getBytes(newIntWritable(87)));
tomUpdate.put("course:art", Writables.getBytes(newIntWritable(97)));
table.commit(tomUpdate);
System.out.println("add Jerry's data");
BatchUpdate jerryUpdate = new BatchUpdate("Jerry");
jerryUpdate.put("grade:", Writables.getBytes(newIntWritable(2)));
jerryUpdate.put("course:math", Writables.getBytes(newIntWritable(100)));
jerryUpdate.put("course:art", Writables.getBytes(newIntWritable(80)));
table.commit(jerryUpdate);
for (RowResult row : table.getScanner(new String[] {"course:" })) {
System.out.format("ROW\t%s\n", newString(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
相关推荐
### HBase入门与使用 HBase作为Apache Hadoop生态系统中的一个关键组件,提供了一种分布式、版本化的非关系型数据库,特别适用于大规模数据处理。它借鉴了Google Bigtable的设计理念,能够实现在廉价硬件上存储PB...
HBase入门和使用知识点总结: 1. HBase基本介绍: HBase是建立在Hadoop文件系统(HDFS)之上的一种开源、分布式、可扩展的非关系型数据库。它是一种列式存储系统,模仿Google的Bigtable模型,适用于海量数据的实时...
- **推荐理由**:本书被推荐为最佳的HBase入门书籍之一,适合希望深入了解HBase并掌握其核心功能和技术细节的读者。 #### 二、书籍内容结构与特色 1. **前言**:简要介绍了本书的目标读者群、编写目的以及如何使用...
根据提供的文件信息,“hbase入门到精通.txt”,我们可以推断出文档主要涵盖了HBase的相关知识。下面将基于这个假设来生成一系列与HBase相关的知识点。 ### HBase简介 HBase是一个分布式、多维、排序的映射表,该...
《第1章 HBase入门》 HBase,全称为Hadoop Distributed File System,是一种构建在Hadoop文件系统(HDFS)之上的分布式列式数据库,是NoSQL数据库家族中的重要成员。本章将引领读者逐步深入HBase的世界,了解其核心...
### HBase 入门知识点详解 #### 一、HBase 简介 - **Hadoop**:Hadoop 是一种分布式计算框架,主要用于处理大型数据集。它包括两个核心组件:HDFS(Hadoop Distributed File System)用于分布式存储,而MapReduce...
《大数据云计算技术系列:Hadoop之Hbase从入门到精通》 HBase,全称Hadoop Database,是一款基于Hadoop生态系统的分布式列式存储系统,旨在处理海量结构化数据。它借鉴了Google Bigtable的设计思想,但开源并适应了...
### HBase从入门到精通——关键技术点解析 #### 一、HBase技术概览 **HBase**(Hadoop Database)是一种分布式、可扩展的NoSQL数据库系统,它基于Google Bigtable论文的思想构建而成,并且作为Apache Hadoop生态...
本文接着上期介绍的”简单了解Hbase及快速入手之入门教程_01“,着重介绍了hbase的伪分布式部署以及hbase的过滤器。适合刚入门或者刚接触的小伙伴参考。
这是一个大牛的学习笔记,讲解详细,思路清晰,按步就班,是学习hadoop hbase的入门资料,值得入门人员拥用!
### Hadoop之Hbase从入门到精通 #### HBase技术介绍与概述 HBase是一种分布式、高可靠性且高性能的列式存储系统,它基于Hadoop生态体系构建,并且能够支持大规模的数据存储需求。HBase的设计灵感来源于Google的...
│ Day15[Hbase 基本使用及存储设计].pdf │ ├─02_视频 │ Day1501_Hbase的介绍及其发展.mp4 │ Day1502_Hbase中的特殊概念.mp4 │ Day1503_Hbase与MYSQL的存储比较.mp4 │ Day1504_Hbase部署环境准备.mp4 │ Day...
在深入探讨HBase之前,先理解一下什么是HBase。HBase是Apache Hadoop生态系统中的一个分布式、面向列的NoSQL数据库。它提供了实时读写访问,适用于大规模数据存储,尤其适合处理半结构化或非结构化的数据。HBase构建...
总结,HBase入门涉及理解其数据模型、RowKey设计原则、写入流程及接口使用,以及如何通过优化RowKey设计和使用特定策略来避免写入热点,确保系统的高效运行。在实际应用中,需要根据业务需求灵活运用这些知识,以...
《Hadoop之HBase从入门到精通》是一个深入学习Hadoop和HBase的全面指南,旨在帮助初学者和有经验的开发者快速掌握这两个强大的大数据处理工具。Hadoop是Apache软件基金会开发的一个开源分布式计算框架,它允许在廉价...
第一章 HBase入门 1. 简介 2. 集群搭建 3. HBase数据模型 4. 常用shell操作 5. shell管理操作 6. Hbase Java编程 7. HBase高可用 8. HBase架构 第二章 陌陌海量存储案例 1. 案例介绍 2. 打招呼消息数据集介绍 3. ...
**HBase入门实战** 1. **创建表**: 使用HBase Shell或者编程API创建表,指定列族和表属性。 2. **插入数据**: 将数据插入到表中,可以通过Put操作指定行键、列族、列限定符和值。 3. **查询数据**: 使用Get操作根据...
个人整理Hbase知识点,外加本人一些理解,整理为xmind形式,供有需要的朋友下载。