Redis是常用的内存数据库,hdfs是分布式文件系统,namenode使用内存保存文件元数据以及文件块所在的datanode,snn(防止nn消耗io性能)非ha模式,ha模式为nn standby。使用内存保存数据就需要考虑内存大小限制以及内存数据持久化问题。那么在持久化上这两者如何实现的呢?
内存数据持久化包含两种方式:一种是将当前内存中所有数据一次性保存;第二种是将所有的操作保存在日志文件中。第一种优势是全量数据,快速恢复,缺点是需要根据时间生成不同的数据,第二种方法生成的日志文件很大,优点是数据更加完整。具体过程中两者配置使用
- Redis
rdb以及aof方式
Rdb文件生成策略:多少秒内key变化超过多少次
内存数据写到文件上涉及到编码序列化
生成后的文件需要冗余保存 - hdfs
fsimage以及Edits日志
Hdfs 搭建时触发初始化,生成fsimage文件
Namenode启动时加载镜像和edit日志,重启时根据老数据生成新的镜像保存到本地磁盘,数据汇报
安全模式:不进行数据块的操作复制
文件的每个块不会持久化,为了保证数据一致性,如果恢复过程中节点挂掉
镜像与日志整合,增量的日志更新到镜像文件
Here写流程
1nn节点根据block副本放置策略范围dn节点列表
客户端与dn发送数据,nn之间pipeline并行传输 距离自己最近
hdfs分布式部署——基础设施,部署配置,初始化运行(格式化namenode生成fsimage文件以及VERSION文件clusterId),命令行使用(start-dfs.sh)
hadoop_home /etc/profile
core-site.xml nn,
hdfs-site.xml snn 以及nn,dn,snn数据文件目录以及副本数量
slave.xml dn
自动故障转移 zk
nn的zkfc进程负责健康检查以及zk事件回调,通过获取锁并确认主机挂掉时实现备机升为主,zookeeper集群负责管理nn的状态 get hadoop-ha/mycluster/activestandbyelectorlock
jn节点日志和目录
zkfc进程检测当前nn进程,与zk集群连接,同时与另一个nnstandby连接检测存活以及降级 2、