文章目录
jvm瓶颈
HDFS 是 Hadoop 自带的原生存储系统,随着这些年的发展,HDFS 已经成为大数据生态的存储标准,但是同样也可以看到 HDFS 虽然不断优化,然而对于一个超大规模的集群来说,jvm的瓶颈始终无法突破。对于这种情况,hadoop官方使用联邦的解决方案解决了该限制。
常规HDFS
介绍联邦之前,首先先看下官方给出的HDFS的组成图,由两层组成:
-
Namespace:包含集群所有的目录、文件和块元数据,以及对他们的增删改查操作
-
Block Storage Service(也由两部分组成):
Block Management(运行在namenode),作用如下:
1.负责集群所有datanode的注册及接收周期性心跳
2.处理块报告并维护所有block的位置
3.负责所有块的增删改查操作
4.管理副本,如对副本不足的blocks执行复制、删除超过副本数的blocks
Storage:
由所有datanodes提供的在本地系统存储块及读写访问
联邦
Multiple Namenodes/Namespaces:
联邦的实现是使用多个独立的 Namenodes/namespaces来实现横向扩展name service。也就是使用多个Namenode(与HA无关,生产HA+联邦基本是4个namenode)。
独立的block pool
对于联邦HDFS,可以看到有多个nn(即namenode),每个nn都各自对应着一个block pool(两者在一起称为一个Namespace Volume),他们是独立的且整体的。每个Namespace Volume都可以接受新请求并为新块生成block IDs。所以其中一个nn失败也并不会影响到其他nn。
共用存储
同时,也能看到这些namenode共用集群中所有的datanode的存储、接收所有datanode的周期心跳及块报告。这样也代表每个datanode要注册到所有的namenode。
联邦的优势
-
namespace的可扩展性:可以横向扩展,这样在大规模部署及大量小文件的集群可以通过扩展来增加命名空间。
-
高性能:文件系统的吞吐不再被单个nn所限制,横向扩展可以增加读写的吞吐量
-
隔离:在多用户环境中单个nn无法形成隔离。例如,一个application可能会导致nn过载并减慢生产关键application的速度。通过横向扩展,不同种类的application可以在不同的namespace间进行隔离。
Federation Configuration
Configuration
关于如何配置 核心的几项就这几个了
-
对于配置HA集群基本只配置一个nameservices及两个namenode 同理这里增加nameservices及namenode配置即可。两个为一组挂到不同的nameservices下
然后再增加rpc、http的address配置 -
格式化namenode
ClusterID:用于识别集群所有节点的标识符。格式化一个namenode时,可以手动指定也可以自动生成。其他nn格式化也需用相同的id。
- 格式化第一组的namenode
[hdfs]$ $HADOOP_HOME/bin/hdfs namenode -format [-clusterId <cluster_id>]
格式化完成之后 在这组的另一个nn上执行hdfs namenode -bootstrapStandby 同步信息
- 相同的格式化第二组的namenode 并同步第二组另一个nn的信息
格式化成功完成之后 启动进程即可
Balancer
balancer也已经可以在多个nn中间使用
[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon start balancer [-policy <policy>]
policy参数有两个选择:
-
datanode:默认的选择。只会在datanode层面进行balancer,与之前版本的使用一样
-
blockpool:此选择会在block pool及datanode 两个层面进行balancer
Decommissoning
deconmmissoning操作与之前版本是基本一致的。将需要退役的节点加入到所有nn的exculde文件中,每个nn都会退役它所属的block pool。当datanode在所有nn的状态中都退役完成之后,它才真正被退役。
- 可以使用如下命令分发exclude文件到所有nn:
[hdfs]$ $HADOOP_HOME/sbin/distribute-exclude.sh <exclude_file>
- 然后刷新所有的nn即可
[hdfs]$ $HADOOP_HOME/sbin/refresh-namenodes.sh
Cluster Web console
使用联邦时,集群web控制台可以在http://<any_nn_host:port>/dfsclusterhealth.jsp
查看联邦集群。(任何Namenode都可以访问此页面)。
主要有以下信息:
-
集群摘要,包括文件、块数量,所有的存储容量、已使用及剩余容量均可查看
-
所有nn的列表,包括文件、块数量、丢失的块、存活与死亡的节点数。以及每个nn web ui的链接
-
datanode的退役状态