序言
随着时间的推移,海量的数据都被积累起来,人人都是数据的产生者,产生各种各样的结构化数据,半结构化数据,非结构化数据,原来的关系型数据库搭建的数仓已经不能满足需求了,从而可以使用分布式存储hdfs来进行存储海量的数据。
hdfs为hadoop distributed filesystem,是分布式文件系统,用来存储海量的数据。
hdfs
整体集群的规划如下图所示:
在测试环境中,只要使用三台虚拟机就可以搭建一个高可用的hdfs集群,将各种组件进行混部即可(namenode占用内存较多,datanode主要磁盘容量要大)。
此处的高可用集群,主要是有两个namenode节点,一个是active状态,一个则是standby状态,也就是随时热备的形式。
对于namenode本身来说,主要是用来保存相关的元数据信息,为了保证性能,从而将metadata的数据保存在内存中,对于数据的快照是使用fsimage来进行保存,这个时候可能是重启了namenode进程,从而对edit的数据和fsimage进行了一次合并,而对于内存中的数据操作则是已追加的形式保存在editlog中(下图中表示edits的文件以81后缀为最新的edit文件)。
zk集群本身是高可用模式,主要的作用是提供分布式协调服务,用来监控主备namenode是否挂掉,当挂掉之后,会有standby的机器DFSZKFailoverControl使用ssh登录到相应的namenode机器上杀掉namenode进程,从而在安装namenode的机器上也要进行部署DFSZKFailoverControl服务,而没有的机器上则不部署。
对于原active的zkfc进程来说,主要是不停的探测namenode的端口是否存在。
对于journal集群来说,主要是为了保证edit文件的一致性,active的namenode写入edit,而standby的namenode则来进行同步edit文件,从而保证两者数据的最终一致性。当刚启动namenode来说,会进行同步相关的edit数据,在web界面上可以看到如下信息:
从界面上也可以看到同步了哪些信息,如下所示:
搭建的是高可用集群,关闭一个数据节点会出现如下情况:
可以查看到具体的datanode的信息: