Hbase扩容原理

Hbase扩容原理,第1张

Hbase是Hadoop的一个存储组件可以提供低延迟的读写操作,它一般构建在HDFS之上,可以处理海量的数据。Hbase有个很好的特性是可以自动分片,也就是意味着当表的数据量变得很大的时候,系统可以自动的分配这些数据。

Hbase的基本存储单位是Region,Region是表数据的子集,多个Region的数据集合可以组成一张完成的表数据。Region本质上存储的一些排好序的,连续的行数据。最初的时候一张表只有一个Region,当Region变得非常大的时候,Region就会从中间分裂成两个基本等大的Region。

在Hbase中,slave也被称作RegionServer,每个RegionServer负责管理一些Region,同时一个Region只能属于一个RegionServer。

一个RegionServer可以服务一个或多个Region,每个Region在Region Server启动的时候被分配。Master可以决定将一些Region从一个RegionServer中移动到令一个RegionServer里面,以便更好的负载均衡。当某个RegionServer故障的时候,Master也可以将它的Region分配给其他的RegionServer。

Region与RegionServer之间的映射关系存储在Zookeeper中的META表中,通过读取META表,你就可以知道那个Region可以负责处理你的rowkey操作,其实这也代表着在HBase读写操作的时候是不用经过Master节点的,你可以之间联系RegionServer。

如图,在客户端进行scan的时候,它可以之间联系多个RegionServer处理当前的操作。

Meta表是用来跟踪Region的,它包含服务器的名称,Region的名称,表名,还有Region的startkey。通过startkey的范围,客户端就可以定位到当前的key要去哪一个Region了。

客户端在请求过META表之后,一般会将表缓存起来,防止每次操作都去获取。在Region进行分裂的时候,客户端去RegionServer操作Region的时候回返回异常,然后客户端会重新获取最新的META表信息。

Hbase的Java客户端API有两个主要的接口:

通过上面介绍,可以知道HBase虽然是Master/Slave架构的,但是并不是每次操作都经过Master的,读写数据的时候HBase只需要直接联系RegionServer即可。这也是HBase可以“无限扩容”的原因。在吞吐量不够的时候,通过增加RegionServer节点,可以增加吞吐量。

卸载节点一般不建议直接停掉,需要先将其排除在集群之外,在主节点上编辑配置文件:${HADOOP_HOME}/etc/hadoop/hdfs-site.xml

在datanode-deny.list中加入要卸载的节点名称,如:slave3

[图片上传失败...(image-268887-1589181513073)]

卸载节点后,刷新节点信息:

./bin/hdfs dfsdmin -refreshNodes会看到节点变成Dead和Decommissioned状态,如下图:

该命令执行后,同时会强制重新加载配置 ,在后台进行Block块的移动

[图片上传失败...(image-71d33c-1589181513074)]

卸载成功后,再停止节点:

./sbin/hadoop-daemon.sh stop datanode

./sbin/yarn-daemon.sh stop nodemanager

如果希望下次自动启动,修改集群中所有节点的slaves配置文件,具体目录 ${HADOOP_HOME}/etc/hadoop/slaves

首先准备一台hadoop节点,参考 hadoop、spark install

在hadoop子节点上,HADOOP_HOME目录下启动hdfs: ./sbin/hadoop-daemon.sh --config /usr/hadoop/hadoop-2.7.7/etc/hadoop/ start datanode

启动nodeManage(这个命令会确定其他子节点的nodeManage,可以把该节点的slaves文件中其他节点去掉): ./yarn-daemons.sh --config /usr/hadoop/hadoop-2.7.7/etc/hadoop/ start nodemanager

在主节点上刷新节点信息: ./bin/hdfs dfsadmin -refreshNodes;使用命令可以均衡数据:./sbin/start-balancer.sh

如下图,节点又重新加入了集群

[图片上传失败...(image-a892c6-1589181513074)]

如果希望下次自动启动,修改集群里机器的所有slaves配置文件,具体目录 ${HADOOP_HOME}/etc/hadoop/slaves

在想要去掉的节点上,SPARK_HOME 目录下执行 ./sbin/stop-slave.sh 即可去掉spark节点。这样操作可以临时去掉spark节点,如果想永久去掉节点,需要在主节点的SPARK_HOME/conf/slaves 文件中去掉子节点

如图,原有三个spark节点

[图片上传失败...(image-50e48c-1589181513074)]

执行./sbin/stop-slave.sh 后,一台节点的状态变成了DEAD

[图片上传失败...(image-c12af8-1589181513074)]

如果希望下次自动启动,修改集群里机器的所有slaves配置文件,具体目录 ${SPARK_HOME}/conf/slaves

首先准备一台spark节点,参考 hadoop、spark install

在spark子节点上,SPARK_HOME 目录下执行 ./sbin/ start-slave.sh spark://<master>:7077,该子节点即可加入mster集群。

如图,扩容后,集群增加了子节点

[图片上传失败...(image-35bb79-1589181513074)]

如果希望下次自动启动,修改集群里机器的所有slaves配置文件,具体目录 ${SPARK_HOME}/conf/slaves

在要卸载的子节点上,HBASE_HOME/bin目录下,执行 ./graceful_stop.sh 子节点的hostname,即可卸载子节点。

该命令会自动关闭Load Balancer,然后Assigned Region,之后会将该节点关闭。除此之外,你还可以查看remove的过程,已经assigned了多少个Region,还剩多少个Region,每个Region 的Assigned耗时。

最终要在hbase shell 中关闭balance_switch :balance_switch false,然后再开启:balance_switch true

首先准备一台hbase节点,参考 hbase(2.0.0) install

在新的子节点 HBASE_HOME 目录下,执行 ./bin/hbase-daemon.sh start regionserver 启动节点

在主节点上编辑HBASE_HOME/conf/regionservers文件,增加新的子节点

在新的子节点上,打开hbase shell,执行 balance_switch true 开启集群自动balance.

hbase 本来有两个节点,如下图:

[图片上传失败...(image-182c39-1589181513074)]

增加新节点后变成了三个:

[图片上传失败...(image-991e21-1589181513074)]

参考:

https://blog.51cto.com/6738767/1943228?utm_source=oschina-app

https://blog.csdn.net/xgjianstart/article/details/78437374

http://www.023dns.com/server_ECS/4225.html


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/487591.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-06-13
下一篇2023-06-13

发表评论

登录后才能评论

评论列表(0条)

    保存