本篇文章讲述用HBase Shell命令 和 HBase Java API 对HBase 服务器 进行操作。在此之前需要对HBase的总体上有个大概的了解。比如说HBase服务器内部由哪些主要部件构成?HBase的内部工作原理是什么?我想学习任何一项知识、技术的态度不能只是知道如何使用,对产品的内部构建一点都不去关心,那样出了问题,很难让你很快的找到答案,甚至我们希望最后能对该项技术的领悟出自己的心得,为我所用,借鉴该项技术其中的设计思想创造出自己的解决方案,更灵活的去应对多变的计算场景与架构设计。以我目前的对HBase的了解还不够深入,将来不断的学习,我会把我所知道的点滴分享到这个Blog上。
先来看一下读取一行记录HBase是如何进行工作的,首先HBase Client端会连接Zookeeper Qurom(从下面的代码也能看出来,例如:HBASE_CONFIG.set("hbase.zookeeper.quorum", "192.168.50.216")
)。通过Zookeeper组件Client能获知哪个Server管理-ROOT- Region。那么Client就去访问管理-ROOT-的Server,在META中记录了HBase中所有表信息,(你可以使用 scan '.META.' 命令列出你创建的所有表的详细信息),从而获取Region分布的信息。一旦Client获取了这一行的位置信息,比如这一行属于哪个Region,Client将会缓存这个信息并直接访问HRegionServer。久而久之Client缓存的信息渐渐增多,即使不访问.META.表也能知道去访问哪个HRegionServer。HBase中包含两种基本类型的文件,一种用于存储WAL的log,另一种用于存储具体的数据,这些数据都通过DFS
Client和分布式的文件系统HDFS进行交互实现存储。
如图所示:

查看大图请点击这里
再来看看HBase的一些内存实现原理:
* HMaster— HBase中仅有一个Master server。
* HRegionServer—负责多个HRegion使之能向client端提供服务,在HBase cluster中会存在多个HRegionServer。
* ServerManager—负责管理Region server信息,如每个Region server的HServerInfo(这个对象包含HServerAddress和startCode),已load Region个数,死亡的Region server列表
* RegionManager—负责将region分配到region server的具体工作,还监视root和meta 这2个系统级的region状态。
* RootScanner—定期扫描root region,以发现没有分配的meta region。
* MetaScanner—定期扫描meta region,以发现没有分配的user region。
HBase基本命令
下面我们再看看看HBase的一些基本操作命令,我列出了几个常用的HBase Shell命令,如下:
名称
|
命令表达式
|
创建表 |
create '表名称', '列名称1','列名称2','列名称N' |
添加记录 |
put '表名称', '行名称', '列名称:', '值' |
查看记录 |
get '表名称', '行名称' |
查看表中的记录总数 |
count '表名称' |
删除记录 |
delete '表名' ,'行名称' , '列名称' |
删除一张表 |
先要屏蔽该表,才能对该表进行删除,第一步 disable '表名称' 第二步 drop '表名称' |
查看所有记录 |
scan "表名称" |
查看某个表某个列中所有数据 |
scan "表名称" , ['列名称:'] |
更新记录 |
就是重写一遍进行覆盖 |
如果你是一个新手队HBase的一些命令还不算非常熟悉的话,你可以进入 hbase 的shell 模式中你可以输入 help 命令查看到你可以执行的命令和对该命令的说明,例如对scan这个命令,help中不仅仅提到有这个命令,还详细的说明了scan命令中可以使用的参数和作用,例如,根据列名称查询的方法和带LIMIT 、STARTROW的使用方法:
scan Scan a table; pass table name and optionally a dictionary of scanner specifications. Scanner specifications may include one or more of the following: LIMIT, STARTROW, STOPROW, TIMESTAMP, or COLUMNS. If no columns are specified, all columns will be
scanned. To scan all members of a column family, leave the qualifier empty as in 'col_family:'. Examples:
hbase> scan '.META.'
hbase> scan '.META.', {COLUMNS => 'info:regioninfo'}
hbase> scan 't1', {COLUMNS => ['c1', 'c2'], LIMIT => 10, STARTROW => 'xyz'}
使用Java API对HBase服务器进行操作
需要下列jar包
hbase-0.20.6.jar
hadoop-core-0.20.1.jar
commons-logging-1.1.1.jar
zookeeper-3.3.0.jar
log4j-1.2.91.jar
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.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
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.io.BatchUpdate;
@SuppressWarnings("deprecation")
public class HBaseTestCase {
static HBaseConfiguration cfg = null;
static {
Configuration HBASE_CONFIG = new Configuration();
HBASE_CONFIG.set("hbase.zookeeper.quorum", "192.168.50.216");
HBASE_CONFIG.set("hbase.zookeeper.property.clientPort", "2181");
cfg = new HBaseConfiguration(HBASE_CONFIG);
}
/**
* 创建一张表
*/
public static void creatTable(String tablename) throws Exception {
HBaseAdmin admin = new HBaseAdmin(cfg);
if (admin.tableExists(tablename)) {
System.out.println("table Exists!!!");
}
else{
HTableDescriptor tableDesc = new HTableDescriptor(tablename);
tableDesc.addFamily(new HColumnDescriptor("name:"));
admin.createTable(tableDesc);
System.out.println("create table ok .");
}
}
/**
* 添加一条数据
*/
public static void addData (String tablename) throws Exception{
HTable table = new HTable(cfg, tablename);
BatchUpdate update = new BatchUpdate("Huangyi");
update.put("name:java", "http://www.javabloger.com".getBytes());
table.commit(update);
System.out.println("add data ok .");
}
/**
* 显示所有数据
*/
public static void getAllData (String tablename) throws Exception{
HTable table = new HTable(cfg, tablename);
Scan s = new Scan();
ResultScanner ss = table.getScanner(s);
for(Result r:ss){
for(KeyValue kv:r.raw()){
System.out.print(new String(kv.getColumn()));
System.out.println(new String(kv.getValue() ));
}
}
}
public static void main (String [] agrs) {
try {
String tablename="tablename";
HBaseTestCase.creatTable(tablename);
HBaseTestCase.addData(tablename);
HBaseTestCase.getAllData(tablename);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
《HBase专题配套文件解析》 HBase,全称Apache HBase,是构建在Hadoop分布式文件系统(HDFS)之上、面向列的开源数据库,主要用于处理大规模数据。HBase的设计理念是支持实时读写,适合大数据场景下的快速随机访问...
【标题】:“HBase专题测试文件” 【描述】:这篇内容是与HBase相关的测试资料,配合某博主的博客文章进行深入学习。博客链接指向了CSDN平台的一篇文章,详细介绍了HBase的相关知识和实战操作,这可能是对HBase进行...
本文档概述了广西大数据应用专题开发技术方案的第三个标包,主要介绍了大数据设计架构、分布式模块设计、插件化程序开发、多样化数据采集系统、Docker 容器部署、ArcGIS 二次开发等技术方案。 titre:广西大数据...
本文档是关于智慧城市大数据应用专题开发技术方案的详细技术方案,主要介绍了智慧城市大数据应用的架构设计、技术选型、系统部署、数据处理方式等方面的技术细节。 该方案的主要技术架构基于 Hadoop+Hive+Spark,...
分布式数据库如Cassandra、HBase等,它们解决了单机数据库在容量和性能上的瓶颈。分布式数据库通常采用分片策略,将数据分布在多个节点上,同时提供事务处理和一致性保证。 6. 分布式缓存 分布式缓存如Redis、...
除此之外,数据库知识也是重点,包括关系型数据库MySQL的事务处理、索引优化、查询优化,以及NoSQL数据库如MongoDB和HBase的使用场景和优缺点。数据结构与算法虽然不是Java特定的,但它们是衡量开发者解决问题能力的...
由于应急测绘需要处理大量的地理空间数据,分布式数据库能够帮助实现快速查询和统计周边地物、人口、法人等专题数据,满足不同尺度和不同用户需求的测绘应急专题数据资源服务。 传统的数据库系统在处理大量数据时...
"大数据应用专题开发技术方案" 大数据设计架构 在广东移动大数据关联分析服务项目中,采用了 HADOOP+MPP+RDB+流计算混搭技术架构,满足不同类型数据处理及访问需求。系统架构体系通过使用信令 XDR 数据、MR 数据、...
- HBase的元数据管理:HBase的RegionServer定位依赖Zookeeper。 - Kafka的集群管理:Kafka的Broker选举和消费者分区分配依赖Zookeeper。 - Dubbo的服务注册与发现:Dubbo通过Zookeeper实现服务的注册、查找和监控...
**Zookeeper面试专题及答案** 在Java开发领域,Apache ZooKeeper是一个至关重要的分布式协调服务,它为分布式应用程序提供了高可用性、一致性以及命名服务等关键功能。本篇内容将深入探讨Zookeeper的核心概念、功能...
【Hadoop与大数据技术大会2012PPT】是一个关于Hadoop和大数据技术的专题会议,该会议可能聚集了业界专家和学者,分享了他们在2012年关于这两个领域的最新研究、实践经验和未来发展趋势。这个压缩包包含了多个PDF文件...
2. NoSQL数据库种类繁多,如MongoDB、Cassandra、HBase等,每种都有其特定的应用场景和优势。 3. MySQL与MongoDB作为两种不同类型的数据库,主要区别在于数据表示、查询方式、事务处理、模式设计和性能。MySQL是...
Java前后开发面试题,大厂进阶之路,基于JavaGuide、Cyc大佬、牛客...包含计算机网络知识、JavaSE、JVM、Spring、Springboot、SpringCloud、Mybatis、多线程并发、netty、MySQL、MongoDB、Elasticsearch、Redis、HBASE
MongoDB面试专题及答案.pdf 本文档总结了 MongoDB 相关的知识点,涵盖了 NoSQL 数据库的定义、类型、特点、优点、应用场景、与 RDBMS 的差别、MongoDB 的特点、优势、限制等。 NoSQL 数据库 NoSQL 数据库是一种非...
HBase 知识体系最强总结 Hadoop知识体系最强宝典 Hadoop企业级调优手册 Flink知识体系保姆级总结 Flink面试八股文 最强最全面数仓建设规范指南(强烈推荐) 最强最全面的大数据SQL面试题和答案 数据结构与算法篇 数据...
### MongoDB面试专题知识点详解 #### 1. NoSQL数据库的概念及其与RDBMS的区别 - **NoSQL**:Non-relational databases(非关系型数据库),通常指那些**不使用传统的关系表格来组织数据**的数据库系统。NoSQL的...
Zookeeper 是一个分布式协调服务,源自 Apache Hadoop 项目,主要设计用于...Zookeeper 在分布式系统中的应用广泛,包括 HBase、Kafka、Hadoop 等项目,理解和掌握其核心概念和机制对于从事分布式开发的人员至关重要。
《Zookeeper面试专题》 Apache ZooKeeper 是一个分布式协调服务,它为分布式应用程序提供一致性服务。在面试中,Zookeeper 是一个经常被提及的话题,因为它在大数据、云计算和分布式系统中的核心作用。以下是对...