hbase learning and experience

Habse application and understanding

  1. Needless to say, download the installation package and configure the environment variables.
  2. Take a look at how to configure HBASE.
    1. Introduce HBASE. HBASE is a HDFS-based storage, column-oriented, open source, distributed, high availability, high performance, scalable, nosql (unstructured) database. Hive provides data calculation, zookeeper provides stable service, and failover mechanism, Sqoop provides structured data import function to HBASE.
    There are no column feelings in HBASE, there are column family feelings, there is a rowkey (row key) that uniquely identifies a row, this is not allowed to repeat, this is also a fixed field for each row, rowkey does not need to be defined. Multiple column-value pairs can be created for each row of the column family. The previous row and the next row can have different key-value pairs. When the key-value pairs are modified, multiple versions can be saved (the default is one). Rows and rows are sorted by rowkey. There is no data type in HBASE, and bytes are stored in it.

Configure 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>
Configure regionserver according to your own resources. The regionserver can be placed anywhere.

Start hbase

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

Overall introduction to the operation mechanism of 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的管理的。

这只是我初学者的理解,当然有很多东西说的也许是不准确的,只是我没有发现他是错的,某一天等我发现了,再回来修改,希望对大家有帮助,有错误的地方恳求大佬指出来。后面还会继续更新如何操作,等大数据的技术。
Published 4 original articles · Likes2 · Visits 596

Guess you like

Origin blog.csdn.net/NullPiontExcepution/article/details/83786428