hbase的学习和心得

Habse的应用和理解

  1. 下载安装包,配置环境变量就不用说了。
  2. 看一下如何配置HBASE。
    1.介绍一下HBASE,HBASE是一个基于HDFS的存储的,面向列的,开源的,分布式的,高可用,高性能,可伸缩,nosql(非结构化的)数据库。hive提供数据计算,zookeeper提供了稳定的服务,和failover的机制,Sqoop提供了结构化数据向HBASE导入功能。
    HBASE中没有列的感念,有列族感念,有一个唯一标示一行的叫rowkey(行键),这个不允许重复,这也是每一行固定的一个字段,rowkey不用定义。每一行的列族可以创建多个键值对,上一行和下一行的键值对可以不一样多,键值对修改的时候可以保存多个版本(默认是一个),一行内部按照key排序,行与行按照rowkey排序,HBASE里面没有数据类型,里面存的是字节。

配置HBASE

1.需要zookeeper,HDFS。
	配置hbase-env.sh
	配置java_home,选用自己zookeeper,Hadoop集群如果是高可用的话,还要天剑hadoop_home。
	配置hbase-stie.xml
	<configuration>
            <!-- 指定hbase在HDFS上存储的路径 -->
    <property>
            <name>hbase.rootdir</name>
            <value>hdfs://gec-hadoop-master:9000/hbase</value>
    </property>
            <!-- 指定hbase是分布式的 -->
    <property>
            <name>hbase.cluster.distributed</name>
            <value>true</value>
    </property>
            <!-- 指定zk的地址,多个用“,”分割 -->
    <property>
            <name>hbase.zookeeper.quorum</name>
            <value>tourbis:2181,dfs-node02:2181,dfs-node03:2181</value>
    </property>
配置regionserver根据自己的资源。regionserver可以随便放。

启动hbase

整体启动   start-hbase.sh
启动命令行   hbase shell

整体介绍hbase的运行机制

hbase是一张很大的表,数据都存储在hdfs上,hbase有一个服务器,如果只有一台的话,无数个客户端访问是不是忙不过来。
所以就要分布式啊,这也就是为什么他是一个额分布式的数据库!!!!他的表会根据rowkey被切开(这叫region),有很多个regionserver(服务器),分别负责不同的region。
还有很多客户端,客户端发送过来一个请求,regionserver会去hdfs找数据,hbase的元数据是记录在zookeeper上的,这样就能保证所有regionserver都是同步的。
然后给返回结果。但是客户端发过来的请求给谁呢?有那么多regionserver,因为客户发过来的请求会有具体的rowkey列族什么的。
每个服务器都负责不同的region,所以肯定会去负责包含你的数据的服务器查询。
但是客户端怎么知道谁负责我这部分数据呢?我是带有明确rowkey但是有那么多。
rowkey我要一个一个找吗?不可能吧,所以客户端是不会直接跟regionserver沟通的。
regionserver的工作内容很清楚,我只负责去hdfs上找我自己的数据,找什么数据你不需要告诉我,因为我只负责我管理的region。
那么谁知道每个regionserver负责那些region呢?这里面还有一个系统表,叫meta表,他记录着每个region存放在那台regionserver上,但是呢?
这个meta表在哪里啊,既然这样,我客服端发送一个请求,我直接找mate表就好了,他告诉我我要找的数据在那台regionserver上,我直接去就好了啊。
刚好zookeeper就是管理这个元数据表的(zookeeper知识记录,不是存这张表,zookeeper不能存很大的东西!!!)
第一步:客户先找zookeeper,在zookeeper上查找这个meta表在哪台regionserver上。
第二步:去这个表中查找该region的索引信息,在那个regionserver,
第三步:去具体的服务器就好了。
这个meta表存了所有用户表的位置信息。
那么又有一个问题了,我为什么要让zookeeper记录我的meta表位置呢,我直接跟存了这张meta表的服务器对话就好啊,干嘛要这么麻烦呢?
但是还有一个问题,你怎么知道这张meta表的服务器挂了没有,万一他挂了呢?又有人说,我可以让他发送心跳,监听他的存活状态吗?
那么你这就不是在说你需要zookeeper吗?让regionserver去监听吗?他有那么多功能吗?他又要查数据,又要监听,这不就是单点故障码?!!!
万一挂了zookeeper的failover机制是不是启动了,给你换一台服务器存meta表就可以了吧,这样就非常可靠了。
万一regionserver挂掉一台,那负责他这一台的数据不就丢失了吗?不会的,它里面有一个叫Hmaster的角色,这个角色回去监听zookeeper的,那台挂掉了,Hmaster就会把他负责的这部分数据,分给新的就OK。
万一Hmaster挂了呢,没关系,Hmaster可以启动多台,一个active其它的全部是standby(这不就是HA吗,东西都是相通的啊!)。
随便挂都没问题。数据是存在hdfs的,所以可以存很多,还可以动态扩容。
存在hdfs的数据,查找起来会很慢的,但是呢hbase不一样,他有自己的内部格式,不像hdfs一样,会把数据分成block块,分别存在不同的dataNode上。
每一行都至少有一个或者多个列族的吧,
大体上是这样的一个形式(如果是同一个文件的话,一行有两个列族)
					:/hbase/库目录/表目录/region0/ 列族1/文件
											  /列族2/文件
									   /region1/列族1/文件
									  region2/列族2/文件。
				
是这样把大表分成不同的region然后,不同的regionsever负责不同的region,每个region里面又有不同的列族,再多的客户端,其实访问的不是同一个文件。
补充:某些时候就要大量查相同的东西,那么负责这个region的服务器是不是就要日了狗了,肯定会受不了吧,怎么解决呢???不是说过了吗?
有缓存,在内存中啊,我还希望你多查这些相同的数据呢,如果你还要追问要是很多很多,内存会不会爆,那你就把内存放大一点嘛,往磁盘写文件的周期缩短一点嘛要是还想追问呢?)所以在hbase上查东西来说已经很快了。
但是毕竟是在hdfs上查啊!!
相对来说不会很慢,但是跟MySQL相比呢,完全满足不了那种MySQL一样的实时效果。但是他有一个缓存,这个是在内存里面的,你操作一次他不会立刻操作hdfs上的文件。
因为hdfs上的文件是很难改变的,他是一个文件,要在后面或中间添加东西,删除东西,几乎不可能,因为太慢了,缓存就可以记录下,这也称为热数据。
然后下次你要用的时候直接走缓存(每一台regionserver都有自己的缓存。),这不就跟MySQL的速度一样了吗。
当缓存达到一定的容量的是后了才会把文件写到hdfs的目录中,并且会在hdfs上记录你的操作(打日志),在wals目录中,每个列族的记录放在每个列族的目录下。想要看他会不会把文件写到目录中(缓存很小的时候),可以把集群关掉,他在关掉的时候就在写文件,所以关的比较慢
有缓存不就很容易丢失吗???
当然不会,他会在hdfs上打日志,万一服务器挂掉,缓存就没了,还有日志啊,Hmaster会根据日志恢复缓存的数据。
一直放缓存里面也不合适吧,这不就是很占内存吗?他可以设置多久把缓存的数据跟原来的文件合并起来,删除掉原来的。保存最新的,文件不是不好操作吗,但是容易合并啊。
还有要注意的是Hmaster跟regionserver没有关系,他只是负责监听zookeeper,查询数据是regionserver的事情,跟他没有半毛钱的关系。
master挂掉,regionserver照样可以工作,但是就是不能保证,数据不会丢,因为服务器随时会挂掉啊,短暂是可以没有master的。这样把各个角色的任务分开来,就会使得性能更高。
重点:regionserver不存任何数据,他只是一个工作者,帮用户去找东西。负责region的管理的。

这只是我初学者的理解,当然有很多东西说的也许是不准确的,只是我没有发现他是错的,某一天等我发现了,再回来修改,希望对大家有帮助,有错误的地方恳求大佬指出来。后面还会继续更新如何操作,等大数据的技术。
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值