实验 目的 要求 |
目的: 1、HBase的基本应用 要求:
|
实 验 环 境
实 验 环 境
|
软件版本: 选用HBase的1.2.3版本,软件包名hbase-1.2.3-bin.tar.gz
集群规划: * HBase有主节点和Region节点2类服务节点,高可用完全分布模式中需要满足主节点有备用的基本要求,所以需要两台或以上的主机作为主节点,而完全分布模式中需要满足Region有备份和数据处理能够分布并行的基本要求,所以要求两台或以上的主机作为Region节点,具体规划如下:
|
主机名 | IP地址 | 服务描述 |
Cluster-01 | 192.168.10.111 | HBase主控节点 |
Cluster-02 | 192.168.10.112 | HBase备用主控节点 |
Cluster-03 | 192.168.10.113 | HBase Region服务 |
Cluster-04 | 192.168.10.114 | HBase Region服务 |
Cluster-05 | 192.168.10.115 | HBase Region服务 |
练习内容
步骤一:HBase集群的启动
注:1、该项的所有操作步骤使用专门用于集群的用户admin进行;
2、启动HBase集群之前首先确保Zookeeper集群已被开启状态(五台虚拟主机)。Zookeeper的启动需要分别在每个计算 机的节点上手动启动。如果家目录下执行启动报错,则需要进入Zookeeper/bin目录执行启动命令;
3、启动HBase集群之前首先确保Hadoop集群已被开启状态(五台虚拟主机)Hadoop和HBase只需要在主节点执行启动命令;
1、启动Zookeeper集群:
命令:
$zkServer.sh status //查看Zookeeper状态
$zkServer.sh start //启动Zookeeper
2、在主节点使用此命令,查看java进程信息,若有名为“NameNode”、“ResourceManager”、“DataNode”和“NodeManager”这几个进程,则表示Hadoop集群的主节点及数据节点启动成功。
命令:
$jps //查看进程状态
$start-all.sh //启动Hadoop
$yarn-daemon.sh start resourcemanager //备用主节点执行
主节点及备用主节点:
通信节点:
3、确定Hadoop集群已启动状态,然后再主节点使用此命令,启动HBase集群;
命令:
$start-hbase.sh
4、如果每项启动出错,那么一次检查相应的配置文件和环境变量。
$source ~/.bash_profile
$echo $ZOOKEEPER_HOME
$echo $PATH
$echo $HADOOP_HOME
$echo $PATH
$echo $HBASE_HOME
$echo $PATH
5、使用命令“ssh 目标主机名或IP地址”远程登录到集群中所有Region节点主机,在Region节点使用命令“jps”查看java进程信息,若有名为“HRegionServer”的进程,则表示HBase集群的Region节点启动成功。
步骤二:HBase基本命令练习(DDL/DML)
示例:某位学生成绩表scores
name | grad | course | |
math | art | ||
Tom | 5 | 97 | 87 |
Jim | 4 | 89 | 80 |
1、在Cluster-01主机上使用admin用户进入HBase命令界面;
命令:
#su -admin
$hbase shell
2、新建表空间
命令:
> create_namespace ‘testDB’
>list_namespace
>drop_namespace ‘testDB’ //表空间为空才能删除
备注:于建表,和RDBMS类似,HBase也有namespace的概念,可以指定表空间创建表,也可以直接创建表,进入default表空间。HBase系统默认定义了两个缺省的namespace:hbase:系统内建表,包括namespaceImeta表default:用户建表时未指定namespace的表都创建在此
3、建立一个表和列族(默认表空间)
命令:
>create ‘scores’,‘grade’, ‘course’
>list
>describe ‘scores’
练习:
create ‘testDB:scores’,‘grade’,‘course’
4、按设计的表结构插入值
命令:
>put ‘scores’,’Tom’,’grade:’,’5’
>put ‘scores’,’Tom’,’course:math’,’97’
>put ‘scores’,’Tom’,’course:art’,’87’
>put ‘scores’,’Jim’,’grade:’,’4’
>put ‘scores’,’Jim’,’course:math’,’89’
>put ‘scores’,’Jim’,’course:art’,’80’
>put ‘scores’,’Jim’,’course:’,’90’
>put ‘scores’,’Jim’,’course:’,’91’
代码解析:
Hbase>put ‘t1’,’r1’,’c1’,’value’,’ts1’
t1指表名,r1指行键名,c1指列名,value指单元格值,ts1指时间戳,一般都省略掉了。
5、根据键值查询数据
命令:
>get ’scores’,’Jim’
>get ‘scores’,’Jim’,’grade’
HBase的shell操作,一个大概顺序就是操作关键词后跟表明,行名,列名这样的一个顺序,如果有其他条件在用花括号加上。
练习:
>get ’scores’,’Tom’
6、扫描所有数据
命令:
>scan ‘scores’
扫描指定列:
>scan ‘scores’,{COLUMNS => [‘grade’]}
练习:
>scan ‘scores’,[‘grade’]
7、统计行数
命令:
>count ‘scores’
8、删除指定数据
命令:
>get ‘scores’,’Jim’
>delete ‘scores’,’Jim’,’course:art’
>get ‘scores’.’Jim’
如果需要进行全表删除操作,就是用truncate命令,其实没有直接的全表删除命令,这命令也是disable,drop,create三个命令组合出来的。
9、删除整行
命令:
>get ‘scores’,’Jim’
>deleteall ‘scores’,’Jim’
>get ‘scores’,’Jim’
练习:
>get ‘scores’,’Tom’
>deleteall ‘scores’,’ Tom’
>get ‘scores’,’ Tom’
10、将整张表清空
命令:
>truncate ‘scores’
11、表的删除操作
a)先进行disable和enable
命令:
>disable ‘scores’
>enable ‘scores;
很多操作需要先暂停表的可用性,比如删除表操作,disable_all和enable_all能够操作更多的表
b)表的删除
命令:
>disable ‘scores’
>drop ‘scores’
>scan ‘scores’
步骤三:HBase练习作业(DDL/DML)
name | grad | Course | ||
yingyu | shuxun | daolun | ||
Yewei | 1 | 99 | 92 | 98 |
Maxiao | 1 | 94 | 97 | 99 |
Zhaoying | 1 | 95 | 96 | 89 |
yuanyang | 1 | 93 | 95 | 97 |
命令:
>create 'scores','grade','course'
>list
>put 'scores','yewei','grade:','1'
>put 'scores','yewei','course:yingyu','99'
>put 'scores','yewei','course:shuxue','92'
>put 'scores','yewei','course:dailong','98'
>put 'scores','maxiao','grade:','1'
>put 'scores','maxiao','course:yingyu','94'
vput 'scores','maxiao','course:shuxue','97'
>put 'scores','maxiao','course:dailong','99'
>put 'scores','zhaoying','grade:','1'
>put 'scores','zhaoying','course:yingyu','95'
>put 'scores','zhaoying','course:shuxue','96'
>put 'scores','zhaoying','course:dailong','89'
>put 'scores','yuanyang','grade:','1'
>put 'scores','yuanyang','course:yingyu','93'
>put 'scores','yuanyang','course:shuxue','95'
>put 'scores','yuanyang','course:dailong','97'
查看插入的信息:
命令:
>scan ‘scores’
出现的问题与解决方案
排错一:
出现问题:Zookeeper启动不正常;
原 因:查看Zookeeper日志,发现错误信息:
ClientCnxn$SendThread@966] - Opening socket connection to server slave1. Will not attempt to authenticate using SASL
通过百度搜索发现集群环境中环境变量为启动。
解决方案:启动每台主机的环境变量,在admin用户下使用命令
“source ~/.bash_profile”然后再查看环境变量。
$echo $ZOOKEEPER_HOME
$echo $PATH
$echo $HADOOP_HOME
$echo $PATH
$echo $HBASE_HOME
$echo $PATH
知识拓展
1、HBase是什么?
Apache HBase是运行在Hadoop集群上的数据库。为了实现更好的可扩展性(scalability),HBase放松了对ACID(数据库的原子性,一致性,隔离性和持久性)的要求。因此HBase并不是一个传统的关系型数据库。另外,与关系型数据库不同的是,存储在HBase中的数据也不需要遵守某种严格的集合格式,这使得HBase是用来存储结构不严格的数据的理想工具。
HBase在大数据应用的架构中应用非常广泛。但是基于其与关系型数据库迥异的设计模式,实现这些应用也与基于关系型数据库来实现非常不同。下文将会对比HBase和关系型数据库,并浅析HBase的特性。
2、关系型数据库与HBase的对比。
2.1、先了解一下关系型数据库的优势和缺点。
- 关系型数据库提供了标准的数据持久性模型
- SQL语言是事实上的数据操作标准语言
- 关系型数据库内置了并发数据操作的管理机制
- 关系型数据库提供全面的数据操作工具
2.2、HBase的高效,分布式,可扩展性。
由于HBase在设计上不支持关系和Join这样的概念,需要一起查询的数据就被存在一起。因此也就避免了关系型数据库的一些局限性。下图表现了HBase和关系型数据库在数据存储模型上的不同。
由于HBase将所有需要一起查询到数据存储在一起这一特性,HBase集群就自然能够根据key来组织数据。在水平分割的时候,key值的范围就可以被用来分割数据。每一个服务器存储全部数据的一个子集。同时分布式的数据还可以被同时访问。这大大增强了HBase的可扩展性。HBase实际上是Google Big Table的一个实现。Big Table是Google提出的一个用来存储大规模数据的一个分布式系统。
HBase是基于Column family data store的理念设计的:每一行根据一个row key索引。也就是我们用来查询的主键。同时每一行中有若干column family。每一个column family中有若干相关的column。如下图所示。
HBase是一种Hadoop数据库,经常被描述为一种稀疏的,分布式的,持久化的,多维有序映射,它基于行键、列键和时间戳建立索引,是一个可以随机访问的存储和检索数据的平台。HBase不限制存储的数据的种类,允许动态的、灵活的数据模型,不用SQL语言,也不强调数据之间的关系。HBase被设计成在一个服务器集群上运行,可以相应地横向扩展。
3、HBase的基本操作。
a)Java友好提供了全面的java客户端库;
b)HBase中所有数据都是作为原始数据,使用数组的形式存储;
c)行健是唯一标识符,类似数据库的主键;
d)表中确定一个单元的坐标是[rowkey,cloumn fanmily,column qualifier];
e)5个基本命令来访问HBase;Get(读)、Put(写)、Delete(删除)、Scan(扫描)、Increment(递增);
f)HFile是存储文件,对应列族,一个列族可以有多少HFile文件,但是一个HFile不能存多个列族的数据;
g)写的操作会写入预写式日志(WAL)和称为MemStore的内存写入缓冲区,当两者都确认写入后才认为写的动作成功完成;
h)不建议禁用WAL,禁用后RegionServer故障时会导致数据丢失;
4、使用浏览器访问https://192.168.100.111:16010查看主节点HBase