hbase

Hbase是什么

HBase的原型是Google的 BigTable论文,受到了该论文思想的启发,目前作为Hadoop的子项目来开发维护,用于支持结构化的数据存储。
官网:http://hbase.apache.org
HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。
Hbase的目标是存储并处理大型的数据
HBase是 Google Bigtable的开源实现,但是也有很多不同之处。比如: Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MAPREDUCE来处理 Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据; Google Bigtable利用Chubby作为协同服务
,HBase利用Zookeeper作为对应。

Hbase的特点

1.海量存储

Hbase存储的一般是pb级别的数据

2.列式存储

Hbase是根据列族来存储数据的。

3.极易扩展

扩展RegionSever的机器提升Hbase的上层处理能力
扩展datanode节点提升存储能力

4.高并发

高并发低延迟

5.稀疏

主要是针对列的灵活,在列数据为空的情况下是不会占用存储空间的

HBase的架构

HBase架构图
在这里插入图片描述
Hbase是由Client,Zookpeer,Master,HRegionServer,hdfs等组件组成

1.zookpper

HBase通过用zookpper来做master的高可用,对RegionServer的监控,元数据的入口,集群配置的维护

通过Zoopkeeper来保证集群中只有1个master在运行,如果master异常,会通过竞争机制产生新的master 提供服务
通过Zoopkeeper存储元数据的统一入口地址

2.Hmaster

为RegionServer分配Region
维护整个集群的负载均衡
维护集群的元数据信息
发现失效的Region,并将失效的Region分配到正常的RegionServer 上
当RegionSever失效的时候,协调对应 Hlog 的拆分

3.HregionServer

管理master为其分配的Region
处理来自客户端的读写请求
负责和底层HDFS的交互,存储数据到HDFS
负责Region变大以后的拆分
负责Storefile的合并工作

HBase中的角色

1.Hmaster

1.监控RegionServer
2.处理RegionServer 故障转移
3.处理元数据的变更
4.处理region的分配或转移
5.在空闲时间进行数据的负载均衡
6.通过Zookeeper 发布自己的位置给客户端

2.RegionServer

1.负责存储HBase的实际数据
2.处理分配给它的Region
3.刷新缓存到HDFS
4.维护Hlog
5.执行压缩
6.负责处理Region分片

HBase的安装

单机安装

1.下载HBase
2.将安装包上传到JVM
3.解压安装包
4.配置文件
1)hbase-env.sh
export JAVA_HOME=java安装路径
把没用的注释掉
export HBASE_MANAGES_ZK=true;
2)hbase-site.xml

<configuration>
<property>
<name>hbase.rootdir</name>
<value>file:///homeuser/softwarease-1.3.1asedata</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/homeuser/softwarease-1.3.1/zookeeper</value>
</property>
</configuration>

伪分布式安装模式(在单机模式上安装)

1.修改hbase-env.sh
export HBASE_MANAGES_ZK=false
2.修改hbase-site.xml
<configuration>
//配置hbase上的数据存放的位置
<property>
        <name>hbase.rootdir</name>
        <value>hdfs://linux8zhb:9000/hbasedata</value>
</property>
//配置开启集群模式(默认false)
<property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
</property>
//配置hbase的端口号
<property>
        <name>hbase.master.port</name>
        <value>16000</value>
</property>
//配置连接本地zookeeper
<property>
        <name>hbase.zookeeper.quorum</name>
        <value>linux8zhb:2181</value>
</property>
//配置zookeeper数据存放的位置
<property>
        <name>hbase.zookeeper.property.dataDir</name>
        <value>/home/hduser/software/hbase-1.3.1/zookeeper</value>
</property>
</configuration>

完全分布式

1.修改hbase-env.sh

配置java环境变量

export HBASE_MANAGES_ZK=false
2.修改hbase-site.xml
<property>
        <name>hbase.rootdir</name>
        <value>hdfs://zhblinux5:9000/hbasedata</value>
</property>
<property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
</property>
<property>
        <name>hbase.master.port</name>
        <value>16000</value>
</property>
<property>
        <name>hbase.zookeeper.quorum</name>
        <value>zhblinux5:2181,zhblinux6:2181,zhblinux7:2181</value>
</property>
<property>
        <name>hbase.zookeeper.property.dataDir</name>
        <value>/home/hduser/software/zookeeper-3.4.10/zk_hbase</value>
</property>

3.建立软链接
建立hadoop的core-site.xml和hdfs-site.xml的软链接
建到hbase的conf文件下
ln -s 要建立软链接的文件位置 要建在哪个目录下

4.启动hadoop集群
启动zookeeper集群
启动hbase
5.校验
在网页上打开linux8:16010

hbase的shell操作

进入hbase shell命令界面

bin/hbase shell

查看所有namespace

list_namespace

创建namespace

create_namespace 名字

查看namespace详情

describe_namespace 名字

删除namespace

drop_namespace 名字

查看库中表

list_namespace_table ‘库名’
list

查看库状态

status ‘default’

查看哪个用户登录的shell

whoami

创建表

create ‘default:t1’,{NAME => ‘cf1’,VERSIONS => 3}
在default库中创建t1表,表中有一个列族cf1,值可以存放3个版本

查看表(列族)结构

desc ‘表名’

创建表简写

create ‘t2’,‘cf2’,‘cf3’
在default库中创建一个t2表,其中有两个列族cf2,cf3,默认可存放版本为1

显示表中有多少行

count ‘t1’

查看表是否存在

exists ‘t1’

查看表是否可用

is_enable ‘t1’
如果返回true就是可用
is_disable ‘t1’
如果返回true就是不可以

禁用表

disable ‘t1’

增加列族

alter ‘t1’,{NAME => ‘cf3’}

删除列族、

alter ‘t1’,‘delete’ => ‘cf2’

删除表

disable ‘t1’

drop ‘t1’

truncate ‘t1’

向表里放数据

put ‘t1’,‘1001’,‘cf2:name’,‘zhangsan’

查看表中的数据

scan ‘库名:表名’

查询某一个列的值

scan ‘t1’,{COLUMNS =>‘cf1:id’}

修改值

put ‘t1’,‘1001’,‘cf2:name’,’;lisi’

查询这个属性的之前的版本

scan ‘t1’,{VERSIONS => 3}

查询某一行号到某一行号的值

scan ‘t1’,{STARTROW => ‘1001’,STOPROW => ‘1001’}
查询结果左闭右开

取行号为1001的值

get ‘t1’,‘1001’

取行号为1001且列值为name的

get ‘t1’,‘1001’,‘cf1:name’

删除列

delete ‘t1’,‘1001’,‘cf1:id’

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值