整体:https://segmentfault.com/a/11...
HDFS是hadoop的最底层存储部分
官方:http://hadoop.apache.org/docs...
HDFS是每台机器运行的守护进程,对外暴露网络服务,允许其他节点访问存储在该机器上的文件
NameNode跟踪哪个文件块存储在哪台机器上
架构
先从namenode获取元数据,再到具体的datanode中读取数据。
namespace:允许每个命名空间的NN自定义DNid的ip,无需和另一个NS商议。删除命名空间可删除自己的dn,nn。比如在NN1的DN1:IP2,NN3的DN2:IP4的配置:
<property> <name>dfs.nameservices</name> <value>ns1,ns2</value></property><property> <name>dfs.nameservices.ns1</name> <value>nn1,nn2</value></property><property> <name>dfs.namenode.rpc-addr.ns1.nn1</name> <value>ip1:8082</value></property><property> <name>dfs.nameservices.ns2</name> <value>nn3,nn4</value></property><property> <name>dfs.namenode.rpc-addr.ns2.nn3</name> <value>ip4:8082</value></property>
NN:存放每个节点的路由。可以每个机器放一个+n个dn。为了保证可靠性,每个NS都有两个NN,多NN的HA保证:
1.使用共享存储,存放nnlog,一个写一个读同步+zk自动故障转移
SNN在升级前确保log同步全,两个机器同时发心跳和block-map,
为了保证只有一个ANN写入NFS,一个ANN发出写DN,只有一个ANN对客户端做响应。必须在ANN降级后切段写入,确保网络延时的数据等不再写入。
2.QJM。
QJM奇数个节点,轻量级,可以混部,QJM负责NN的接管转换隔离,写入持久化,读写一致性,自动故障还是要用zk。
还可以增加集中式缓存,DN将缓存上报到NN,NN路由到缓存节点
存储:DISK,ARCHIVE(pb级,冷存档),RAM_DISK(HDFS支持写入由数据节点管理的堆外内存。数据节点将异步刷新内存中的数据到磁盘,从而从性能敏感的IO路径中删除昂贵的磁盘IO和校验和计算,因此我们称这种写入为Lazy Persist写入。HDFS为Lazy Persist Writes提供尽力而为的持久性保证。如果在将副本持久保存到磁盘之前重新启动节点,则可能会丢失数据。应用程序可以选择使用Lazy Persist Writes来换取一些持久性保证,以减少延迟),SDD