Hadoop是一次写入, 多次读取,因为这种被认为是最高效的访问模式.
HDFS为高数据吞吐量优化, 高时间延迟. 对于低延迟, HBase是更好的选择.
大量的小文件不适合HDFS: namenode将文件系统的元数据存储在内存中,包括文件,目录,数据块的存储信息,如果有大量的小文件,那么这些存储信息占了很大的内存,NameNode有可能没有这么大的内存来装这么多的信息
不支持多用户写入, 任意修改文件: HDFS中的文件可能只有一个writer, 且写操作总是append到末尾.
数据块(block)
文件在HDFS上以数据块(block)为单位来存储,每个数据块默认为64MB大小,很多情况下设置成128MB.
之所以块如此之大, 是为了最小化寻址开销.
显示块信息:
% hadoop fsck / -files -blocks
HDFS集群上两类节:namenode和datanode
管理者-工作者模式, 一个namenode(管理者)多个datanode(工作者).
namenode管理文件系统的命名空间, 维护文件系统树及整棵树内的所有文件和目录:
namenode也记录每个文件中各个块所在的数据节点信息, 不存储真正的文件数据,
不永久保存块的位置信息, 位置信息会在系统启动是由数据节点重建.
datanode是工作节点. 存储数据并检索数据块, 定期像namenode发送它们所存储块的列表.
namenod的容错非常重要.
备份组成文件系统元数据持久状态的文件.写入NFS网络文件系统中。 原子操作.
辅助namenode, 不是namenode. 定义通过编辑日志合并命名空间镜像, 防止编辑日志过大. 保存状态滞后于主节点. 所以, 若主节点全部失效, 一般把namenode元数据全部复制到辅助namenode上, 作为新的namenode运行.
DataNode存储数据
假设,我们需要在HDFS上存储一个133MB的文件,按它的大小,会被分成三个数据块(64+64+3)。
NameNode将这三个块分散到DataNode上,并把映射信息记录下来