HBase

HBase,第1张

HBase Hbase介绍
Hbase是一种数据库:Hadoop分布式数据库。总体上来说,它是一个随机访问存储和检索数据的平台。Hbase作用不适合处理实时数据,它适合处理海量数据,这与Hbase的极易扩展性息息相关。

Hbase是Google Bigtable的开源实现,但是也有很多不同之处。比如:Google Bigtable利用GFS作为其文件存储系统,Hbase利用Hadoop HDFS作为其文件存储系统;Google运行MAPREDUCE来处理Bigtable中的海量数据,Hbase同样利用Hadoop MapReduce来处理Hbase中的海量数据;Google Bigtable利用Chubby作为协同服务,Hbase利用Zookeeper作为对应。
Hbase背景
关系型数据库(RDBMS), mysql/oracle/sqlserver/db2,在这几十年里取得了巨大的成功。联机式事务处理(OLTP)系统使用RDBMS,来实时记录交易信息

还一个系统(OLAP)用来分析查询所存储的数据,一般来说都是按天、周、月生成销售报表,
按地域从不同的角度分析信息。

OLAP和OLTP的区别

Hbase单机节点安装

准备

# 解压Hbase到指定目录:
[root@tianqinglong101 software]# tar -zxvf hbase-1.3.1-bin.tar.gz -C /opt/apps
[root@tianqinglong101 software]# cd apps
[root@tianqinglong101 apps]# cd  hbase-1.3.1
# 配置环境变量
[root@tianqinglong101 hbase-1.3.1]# vi /etc/profile
export Hbase_HOME=/opt/apps/hbase-1.3.1
export PATH=$HABSE_HOME/bin
:wq
[root@tianqinglong101 hbase-1.3.1]# source /etc/profile
[root@tianqinglong101 hbase-1.3.1]# cd conf
[root@tianqinglong101 conf]# vi hbase-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
export Hbase_MANAGES_ZK=true  #ture是用自己的zookeeper
[root@tianqinglong101 conf]# vi hbase-site.xml

	     
		hbase.rootdir     
		file:///opt/apps/hbase-1.3.1/tmp   
	
	   
		hbase.zookeeper.property.dataDir
	     opt/apps/hbase-1.3.1/zkData
	

:wq

#启动hbase服务
[root@tianqinglong101 conf]# start-hbase.sh
[root@tianqinglong101 conf]# stop-hbase.sh # 停止
[root@tianqinglong101 conf]# hbase shell
hbase(main):001:0 >
Hbase伪分布式安装
# 修改 hbase-site.xml

	     
		hbase.rootdir     
		hdfs://tianqinglong101:9000/hbase   
	

	   
		hbase.cluster.distributed
		true
	

	   
		hbase.zookeeper.property.dataDir
	    opt/apps/hbase-1.3.1/zkData
	

#启动测试
[root@tianqinglong101 conf]# start-hbase.sh
#测试webui
http://tianqinglong101:16010/master-status
zookeeper安装
[root@tianqinglong101 hbase-1.3.1]# rm -rf *.txt zkData/ tmp/ 
[root@tianqinglong101 hbase-1.3.1]# cd ..
[root@tianqinglong101 apps]# cd ..
[root@tianqinglong101 opt]# cd software/
# 解压
[root@tianqinglong101 software]# tar -zxvf zookeeper-3.4.5.tar.gz -C /opt/apps/
# 配置环境变量
[root@tianqinglong101 zookeeper-3.4.5]# vi etc/profile
export ZOOKEEPER_HOME=/opt/apps/zookeeper-3.4.5
export PATH=$ZOOKEEPER_HOME/bin
[root@tianqinglong101 zookeeper-3.4.5]# source etc/profile
[root@tianqinglong101 zookeeper-3.4.5]# echo "1" > myid
[root@tianqinglong101 zookeeper-3.4.5]# cd conf/
[root@tianqinglong101 conf]# mv zoo_sample.cfg zoo.cfg
[root@tianqinglong101 conf]# vi zoo.cfg
dataDir=/opt/apps/zookeeper-3.4.5
server.1=tianqinglong101:2888:3888
server.2=tianqinglong102:2888:3888
server.3=tianqinglong103:2888:3888
:wq

#分发
[root@tianqinglong101 zookeeper-3.4.5]# cd ..
[root@tianqinglong101 apps]# scp -r zookeeper-3.4.5/ tianqinglong102:/opt/apps/
[root@tianqinglong101 apps]# scp -r zookeeper-3.4.5/ tianqinglong103:/opt/apps/
[root@tianqinglong101 apps]# scp /etc/pofile tianqinglong102:/etc/pofile 
[root@tianqinglong101 ~]# zkServer.sh start  scp /etc/pofile tianqinglong103:/etc/pofile 

## 修改每一个myid 
tianqinglong102   2    source  /etc/pofile
tianqinglong103   3    source  /etc/pofile


#启动zookeeper(每台都启动)
[root@tianqinglong101 ~]# zkServer.sh start 
[root@tianqinglong101 ~]# zkServer.sh status # 查看
Hbase全分布式式安装
# 修改hbase-env.sh
[root@tianqinglong101 conf]# vi hbase-env.sh
export Hbase_MANAGES_ZK=false
# 配置hbase-site.xml
[root@tianqinglong101 conf]# vi hbase-site.xml

	     
		hbase.rootdir     
		hdfs://tianqinglong101:9000/hbase   
	

	   
		hbase.cluster.distributed
		true
	

   
	
		hbase.master.port
		16000
	

	   
		hbase.zookeeper.quorum
	     tianqinglong101:2181,tianqinglong102:2181,tianqinglong103:2181
	

	   
		hbase.zookeeper.property.dataDir
	     /opt/module/zookeeper-3.4.10/zkData
	

# regionservers
[root@tianqinglong101 conf]#  vi regionservers
tianqinglong101
tianqinglong102
tianqinglong103 注意映射(/etc/hosts)

# 配置从机
[root@tianqinglong101 conf]# vi backup-masters
tianqinglong102
:wq

# 时间同步
[root@tianqinglong101 conf]# ntpdate ntp1.aliyun.com

# 分发
[root@tianqinglong101 app]# scp -r hbase-1.3.1/ tianqinglong102:/opt/apps/
[root@tianqinglong101 app]# scp -r hbase-1.3.1/ tianqinglong103:/opt/apps/

#启动并且测试
[root@tianqinglong101 conf]# start-dfs.sh
[root@tianqinglong101 conf]# start-hbase.sh
[root@tianqinglong101 conf]# hbase shell
Hbase特性

Hbase与RDBMS

NoSql与RDBMS区别

Hbase 表模型

Hbase表与mysql表对比

Hbase工作机制

从图中可以看出Hbase是由Client、Zookeeper、Master、HRegionServer、HDFS等几个组件组成,下面来介绍一下几个组件的相关功能:

client :客户端。访问hbase的组件都可以是客户端。she11、java.python
zookeeper :
监控hmaster,保证一个集群中有且仅有一台hmaster.
存储所有region的寻址入口
实时监控regionserver的状态,感知regionserver上下线,并实时的通知hmaster
存储hbase的部分的元数据信息

hmaster :整个hbase的主机
为regionserver分配region。
负责regionserver的负载均衡。
负责region的重新分配
hdfs上的垃圾回收
处理schema的更新请求

regionserver :整个hbase的从机节点之一
维护hmaster分配给他的region。
负责处理c1ient对这些region的读写请求,并和hdfs进行交互
负责具体的region的切分

hlog :日志
对hbase所有的 *** 作进行记录,当我们有插入 *** 作的时候,先将 *** 作写入到日志,然后再写元数据库。

region :表的一部分
hbhase中分布式存储和负载均衡的最小单元

store : 列簇

memstore :
内存缓冲区,用于将数据批量刷新的hdfs,默认为128M

HFile
这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。StoreFile是以Hfile的形式存储在HDFS的。
Hbase命令 通用命令
help

help 'status' #查询指定命令的帮助文档

Commands: status version whoami  table_help
命名空间命令(Namespace)
list_namespace 		 # 展示hbase中所有的namespace
list_namespace_table # 展示hbase下所有的表

create_namespace     # 创建命名空间
create_namespace  'ns1'
create_namespace  'ns2',{'name'=>'lixi'}

describe_namespace 	# 查询指定的namespace的详细信息
describe_namespace 'ns1'
describe_namespace 'ns2'

alter_namespace     # 修改 (很少用)
alter_namespace 'ns1',{METHOD=>'set','name'='rock'}

drop_namespace      # 删除
drop_namespace  'ns2'
常用DDL命令
create # 建表 不写就是默认
create '[default:]student','Sname','Ssex','Sage','Sdept','course'
create 'teacher',{NAME=>'username',VERSIONS=>5}
create 'ns1:teacher',{NAME=>'f1',VERSIONS=>5}

list # 查看所有的表

describe # 查询表结构
describe 'teacher'

alter # 修改表
alter 'ns1:t1',{NAME=>'f2'}   #增加一个列簇
alter 'ns1:t1','delete'=>'f2' #删除一个列簇

# 删除表
disable 'ns1:t1'  #先让表失效
drop 'ns1:t1'   #才能删除
DML命令
put # 插入数据/修改(如果有)
put 't1','001','f1:name','lixi'
put 't1','001','f1:sex','man'

scan # 扫描表中的信息
scan 't1'

# 查询指定版本数据 (历史版本) 
scan 't1',{RAW=>true,VERSION=>10}

# 查询指定列
scan 't1',{COLUMNS=>'f1:name'}

#分页查询
scan 't1',{COLUMNS=>['f1'],LIMIT=>3,STARTROW=>'001'} #查了4行

#get 查询 一般查询指定列簇的信息
get 't1','001','f1:name'
get 't1','001'

incr 插入一条数据,但是它的数据类型就不是string
incr 't1','005','f1:age'  # 默认从1开始 再执行递增

delete # 删除
delete 't1','005','f1:age'   # 删一个kv键值对
deleteall 't1','005' 		 # 删一行

# 判断表是否存在
exists 't1';

count 't1' #看有几行

#清空表
truncate 't1'
复习一波
# 1.创建表
hbase(main):002:0> create 'student','info'

# 2.插入数据到表
hbase(main):003:0> put 'student','1001','info:sex','male'
hbase(main):004:0> put 'student','1001','info:age','18'
hbase(main):005:0> put 'student','1002','info:name','Janna'
hbase(main):006:0> put 'student','1002','info:sex','female'
hbase(main):007:0> put 'student','1002','info:age','20'

# 3.扫描查看表数据
hbase(main):008:0> scan 'student'
hbase(main):009:0> scan 'student',{STARTROW => '1001', STOPROW  => '1001'}
hbase(main):010:0> scan 'student',{STARTROW => '1001'}

# 4.查看表结构
hbase(main):011:0> describe ‘student’

# 5.更新指定字段的数据
hbase(main):012:0> put 'student','1001','info:name','Nick'
hbase(main):013:0> put 'student','1001','info:age','100'

# 6.查看“指定行”或“指定列族:列”的数据
hbase(main):014:0> get 'student','1001'
hbase(main):015:0> get 'student','1001','info:name'

# 7.统计表数据行数
hbase(main):021:0> count 'student'

# 8.删除数据
# 删除某rowkey的全部数据:
hbase(main):016:0> deleteall 'student','1001'
# 删除某rowkey的某一列数据:
hbase(main):017:0> delete 'student','1002','info:sex'

# 9.清空表数据
hbase(main):018:0> truncate 'student'
# 提示:清空表的 *** 作顺序为先disable,然后再truncate。

# 10.删除表
# 首先需要先让该表为disable状态:
hbase(main):019:0> disable 'student'
# 然后才能drop这个表:
hbase(main):020:0> drop 'student'
# 提示:如果直接drop表,会报错:ERROR: Table student is enabled. Disable it first.

# 11.变更表信息
# 将info列族中的数据存放3个版本:
hbase(main):022:0> alter 'student',{NAME=>'info',VERSIONS=>3}
hbase(main):022:0> get 'student','1001',{COLUMN=>'info:name',VERSIONS=>3}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5679243.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存