Hbase 基本概念及安装
Hbase
基本概念
- Hadoop DataBase ,是一个高可靠性、高性能、面向列、可伸缩、实时读写的分布式数据库
- 利用Hadoop HDFS 做其分布式文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper做其分布式协调服务
- 主要用来存储非结构化和半结构化的松散数据(列存NoSQL DB)。
数据模型
- ROW KEY
- 决定一行数据
- 按字典序排序
- Row key 只能存储64kb的数据
- Column Family列族 & qualifier列
- HBase表中的每个列都归属于某个列族,列族必须作为表模式(schema)定义的一部分预先给出。如 create ‘test’, ‘course’;
- 列名以列族作为前缀,每个“列族”都可以有多个列成员(column);如course:math, course:english, 新的列族成员(列)可以随后按需、动态加入;
- 权限控制、存储以及调优都是在列族层面进行的;
HBase把同一列族里面的数据存储在同一目录下,由几个文件保存。
-
TimeStamp < 后续补充 >
-
Cell 单元格
- cell 单元格中数据没有类型,全是字节码形式存贮。
- 由{row key, column(= < family> + < qualifier >), version}唯一确定的单元
- HLog
HBase 架构
-
Client
-
ZK
- 保证在任何时候,集群中只有一个Master
- 存贮所有Region的寻址入口
- 实时监控Region Server 的上线和下线信息,并实时通知Master
- 存储HBase的Schame和table元数据
伪分布式安装
下载链接 hbase-0.98.12.1-hadoop2-bin.tar.gz
需要一台单独的主机,hbase要使用自带的zk
//解压
1. tar zxvf hbase-0.98.12.1-hadoop2-bin.tar.gz -C /usr/local/software/hbase
//更改配置文件
2. vim hbase_env.sh
export JAVA_HOME=/usr/local/software/java
3. vim hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<!-- 路径不存在,或为空 -->
<value>file:///home/var/hbase </value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/testuser/zookeeper</value>
</property>
</configuration>
//启动
4. start-hbase.sh
5. jps 查看
root:60010 页面访问
6. hbase-shell
注:
//不用加';'
ctrl + backspace 向前删除
backspace 向后删除
help 查看对应组的命令
create 'tb1','cf1','cf2' + enter
list //查看表
desc + 'tbName' //查看表信息
> Table tbl is ENABLED
> Table tbl is DISABLED (删除的状态)
> {NAME => 'cf1', BLOOMFILTER => 'ROW', VERSIONS(最大版本数) => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL(存储时间time to live) => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSION
S => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
//添加数据
hbase(main):016:0> put 'tbl','111','cf1:name','zhangsan'
0 row(s) in 0.3850 seconds
hbase(main):017:0> scan 'tbl'
ROW COLUMN+CELL
111 column=cf1:name, timestamp=1537127071413, value=zhangsan
1 row(s) in 0.0610 seconds
hbase(main):018:0> put 'tbl','111','cf1:age','20'
0 row(s) in 0.0230 seconds
//查看数据(一行)
hbase(main):019:0> scan 'tbl'//全盘扫描,建议用get
ROW COLUMN+CELL
111 column=cf1:age, timestamp=1537127107674, value=20
111 column=cf1:name, timestamp=1537127071413, value=zhangsan
1 row(s) in 0.0460 seconds
//删除表
drop
drop-all
//查看状态
is_enabled
//禁用启用
disable + 'tbName'
enable + 'tbName'
//quit 退出
// /home/var/hbase/data/default/tbl/2972431c8bbd0a1ececf4a4008d174f9/cf1
hbase hfile -p -f f7b824945e8a4faa978c6537987520e7
K: 111/cf1:age/1537127107674/Put/vlen=2/mvcc=0 V: 20
K: 111/cf1:name/1537127071413/Put/vlen=8/mvcc=0 V: zhangsan
Scanned kv count -> 2
(key占据空间大,需要优化)
完全分布式安装
主机名 | Master | Back-Master | regionServer | Zookeeper |
---|---|---|---|---|
node1 | * | * | ||
node2 | * | * | ||
node3 | * | * | ||
node4 | * | * |
时间同步
- date -s
- ntpdate + 时间服务器地址
yum install ntp -y
ntpdate cn.pool.ntp.org
date 查看系统时间
若上面的时间服务器不可用,也可以选择以下服务器同步时间
time.nist.gov
time.nuri.net
0.asia.pool.ntp.org
1.asia.pool.ntp.org
2.asia.pool.ntp.org
3.asia.pool.ntp.org
免秘钥
ls /root/.ssh/
- ssh-keygen -t rsa -P ‘’ -f ~/.ssh/id_rsa
- ssh-copy-id 主机名
1.vim hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<!-- hacluster为之前搭建的HDFS HA ,路径不存在,或为空 -->
<value>hdfs://hacluster/var/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<!-- zk 集群 -->
<value>node1,node2,node3</value>
</property>
</configuration>
2. vim hbase-env.sh
export JAVA_HOME=/usr/local/software/java
<!-- 不实用默认的zk -->
export HBASE_MANAGES_ZK=false
3. vim regionservers
node2
node3
node4
4. vim backup-masters
node4
5. vim hbase-env.sh
/pid
export HBASE_PID_DIR=/var/hadoop/pids
6. 将hdfs-site.xml cp 到 /conf 目录下
7. 分发配置文件到其他节点
8. 启动集群(确认Hadoop,Zk集群已经启动)
start-hbase.sh
问题汇总
创建失败时
- 删除hdfs持久化数据
hdfs dfs -rm /var/ - 删除zk持久化数据
zkClient
ls /
rmr /hbase - quit
hbase停止集群时,报错如下:
stopping hbasecat: /tmp/hbase-root-master.pid: No such file or directory
造成上述错误的原因是,默认情况下hbase的pid文件保存在/tmp目录下,/tmp目录下的文件很容易丢失,所以造成停止集群的时候出现上述错误。解决方式是在hbase-env.sh中修改pid文件的存放路径,配置项如下所示:
The directory where pid files are stored. /tmp by default.
export HBASE_PID_DIR=/var/hadoop/pids