Hbase总结
文章目录
- 总结内容
- 1.为什么要使用hbase
- 所有的缓存软件就当成一个map使用;
- 2.介绍hbase
- 3.实战
- 客户端的基本命令
- 搭建高可用
总结内容
- 为什么要使用hbase
- 介绍hbase
- 实战hbase单机和高可用版本
- 客户端命令
1.为什么要使用hbase
Redis:
- 同时有1w人访问;
- 查询使用的最频繁;
- 查询20次,查询的结果都是一样的(因为木有新的记录进去);你拿着查询的第一次结果,做一个缓存,用户后19次查询,就不用查询数据库了;
- 对于mysql只做了一次查询;查询的第一次数据已经放到缓存中,后19次直接从缓存中取数据;(mysql就少执行了19次sql语句)
- 缓存的数据如何更新:CUD操作(不是很频繁),直接清除缓存;更新缓存;(缓存工作于内存中)
缓存的条件 - 记录超级大,超级大,超级大,
- 记录经常查询,不经常更新;
- 命中率;
- 放缓存耗时20分钟;
缓存有三个级别;缓存就是一个容器,(List,Set,Map) - javase容器,Map;缺点:程序重启了,缓存的数据已经木有了(JVM的所有操作都是在内存中)
- 早期的Memcache:Memcache是一个独立于java的软件,java重启只要memcache不重启,缓存的数据依然有效;缺点:电脑重启,所有的软件都关闭,当然memcache也得关闭(软件的logo是一个狐狸头)
- 最牛逼的Redis:把数据放到内存中,同时也会在合适的时间放到硬盘中;电脑重启多次,磁盘的数据不会丢;
所有的缓存软件就当成一个map使用;
- Map和数据库中的表做一个对比
把学习的Hbase当成一个Map使用;
Hbase是大数据体系下面的,Redis是一个javaweb体系下面的;
2.介绍hbase
- Hbase:是谷歌三篇论文的bigtable的实现
- 官网
//hbase.apache.org/
- Hbase:hadoop的database;
- 非关系型数据库NoSql,Redis,memcache,mongodb,Hbase
- 在线手册
//hbase.apache.org/2.1/book.html
- 离线的手册:
目录介绍
Bin:可执行文件
Conf:配置文件
Docs:文档
Hbase-webapp:网页
Lib:jar包
readMe.txt:读我
如果发现一个目录下面有好多个html文件,我们只找index.html
3.实战
tab键可以提示+补全
- 随机选择一台服务器(node-3)
将hbase上传到node-3服务器上;
执行的命令:
所有的操作都是在/data/hbase目录下面;
解压压缩包
tar -xzf hbase-2.1.1-bin.tar.gz
去掉版本号
mv hbase-2.1.1 hbase
删除文档
rm -rf docs/
- 配置文件:(conf/hbase-env.sh)
配置文件(conf/hbase-site.xml)
<?xml version=”1.0”?>
<?xml-stylesheet type=”text/xsl” href=”configuration.xsl”?>
hbase.rootdir
file:///data/hbase/data
hbase.zookeeper.property.dataDir
/data/hbase/zookeeper
hbase.unsafe.stream.capability.enforce
false
启动服务器
bin/start-hbase.sh
停止服务器
bin/stop-hbase.sh
访问网页
http://node-3:16010- 目录结构
启动客户端:
bin/hbase shell
- 在hbase中敲的命令如下
客户端的基本命令
帮助命令;所有的命令
help
Help ‘命令’,只列出此命令的帮助手册
help 'create_namespace'
Namespace
列出所有的namespace
list_namespace
创建一个命名空间
create_namespace 'mydata'
描述namespace
describe_namespace 'mydata'
删除namespace
drop_namespace 'mydata'
创建表
psn:表名,cf:列族(随便起),cf:column family
create 'psn', 'cf'
在mydata下面创建表
create 'mydata:psn1', 'cf'
查询表;查看所有表
List
list ‘namespace:.*’;查看此namespace下面所有的表
List ‘mydata:.*’
先禁用表,再删除表
disable 'mydata:psn1
删除表;:左边的是namespace,不写默认是default;
drop 'mydata:psn1'
记录的CRUD
查询所有记录
scan 'mydata:psn1'
插入记录
put 表名,键, 列族:列名,值(列名可以省,但是只能有一个)
put 'mydata:psn1', 'key01','cf','test'
又增加了一个列;
增加第二列,只要键相同就可以;
cf:列族,:后面的是列族下面的列
put 'mydata:psn1', 'key01','cf:age','20'
修改值:得是键一样,列族+列得一样
put 'mydata:psn1', 'key02','cf:name','100'
如果想增加新记录,只要键的值不一样就可以;
删除记录
delete 表名 键,列族+列名
delete 'mydata:psn1','key01','cf:age'
get取一条记录
Get 表名 , 键,取出键对应的所有列
get 'mydata:psn1','key01'
取出指定的列,
get 表名 , 键,{指定要查询的哪一列},column:一定得注意是大写
get 'mydata:psn1','key01',{COLUMN => 'cf:age'}
获取总条数:
count表名
count 'mydata:psn1'
删除全部记录
deleteall 表名,键
deleteall 'mydata:psn1','key01'
截断表(truncate)
truncate 表名
truncate 'mydata:psn1'
对比Hbase和Mysql
Hbase | Mysql |
---|---|
namespace | 数据库 |
表 | 表 |
列族(一群列) | 列是固定的 |
记录 | 记录 |
本次小结先到这里,高可用有空会在文章末尾补充。
·
·
·
" class="reference-link">搭建高可用
首先把hbase拷贝到四台虚拟机上
拷贝到其他虚拟机上:
scp -r hbase/ node7-4:/data/hbase/
scp -r hbase/ node7-3:/data/hbase/
scp -r hbase/ node7-2:/data/hbase/
注意自己的主机名和目录,请勿盲目复制。
四台虚拟机要免密钥
先启动zookeeper
启动hadoop;hbase要四台虚拟机所有的文件都放到hdfs上
配置文件:(conf/regionservers )(配置的是小弟)
node7-1
node7-3
node7-4
配置文件:(conf/backup-masters )(配置的是小弟)
node7-1
node7-3
配置文件:(conf/hbase-site.xml )(配置的是小弟)(以下配置文件注意自己的主机名和端口号)
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hbase.rootdir</name>
<!--
file://表示的是本地目录
hdfs://表示的是hdfs的目录;
hdfs://namenode.example.org:8020/hbase(一定是active的namenode)
-->
<value>hdfs://node7-1:8020/data/hbase</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
<description>
检查兼容性,如果设置为false,数据有可能丢失(这是一个警告)
Controls whether HBase will check for stream capabilities (hflush/hsync).
Disable this if you intend to run on LocalFileSystem, denoted by a rootdir
with the 'file://' scheme, but be mindful of the NOTE below.
WARNING: Setting this to false blinds you to potential data loss and
inconsistent system state in the event of process and/or node failures. If
HBase is complaining of an inability to use hsync or hflush it's most
likely not a false positive.
</description>
</property>
<!--配置 zookeepr-->
<property>
<name>hbase.zookeeper.quorum</name>
<value>node7-1:2181,node7-2:2181,node7-3:2181</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<!-- zookeeper的目录:data目录 -->
<value>/data/hbase/zookeeper_data</value>
</property>
<!-- 开启集群模式 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
</configuration>
配置文件:(conf/hbase-env.sh )(如下图)
将配置文件同步到其它的服务器上
scp -r conf/ node7-4:/data/hbase/
scp -r conf/ node7-3:/data/hbase/
scp -r conf/ node7-2:/data/hbase/
在想当大哥的服务器启动hbase;(node7-2)
bin/start-hbase.sh
访问:
http://jinghang04:16010/
停止服务(在大哥上停止)
bin/stop-hbase.sh
演示:
大哥挂了,所有的二哥会随机选择一个,并且充当大哥.
查看hbase所有使用到的文件(如下图):
因为Hbase连接hadoop是通过hdfs协议的,所有hadoop的配置文件是无法读取的。
我们要把hadoop所有的配置文件拷贝过来,就可以生效。
hbase往zookeeper中写的文件
如果想清空hbase的所有数据重新来一遍
清空hdfs
清空zookeeper
还没有评论,来说两句吧...