DateNode
提供真实文件数据的存储服务。
文件块(block):最基本的存储单位。【为了保证数据的读写比较快,将数据切成块】对于文件内容而言,一个文件的长度大小是size,那么从文件的0偏移开始,按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block。HDFS默认Block大小是128MB,以一个256MB文件,共有256/128=2个Block.
不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间
Replication。多复本。默认是三个。【存副本其实是对块存副本】
Q:如果我是130M的文件,我该用几块?
A:2块,不过第二块只放了2M,有点太浪费了。有什么好方法?
Shell命令练习:验证块大小
方法:上传大于128MB的文件,观察块大小
验证:使用 http://hadoop0:50070 观察
1、做个试验 先删去hadoop之前所有的东西,再上传一个148M的jdk,
hadoop fs -put /home/djl/jdk-7u79-linux-i586.tar.gz /jdk1.7
2、由于,Linux文件系统之上有一个HDFS,HDFS上的数据还要保存在Linux系统上【比如哪个磁盘上】
itcast/hadoop-2.2.0/tmp/dfs/ 里面有三个文件 data name namesecondary
cd到data/current/BP-很长很长的文件/current/finalized/ 才可以看到块
每个块都有一个.meta结尾的文件信息(以下图片中有两个块,两个块加起来和原文件一样大)
/itcast/hadoop-2.2.0/tmp/dfs/data/current/BP-1529524667-192.168.8.88-1452028015213/current/finalized
小结
HDFS是hadoop的核心,用来做海量数据的存储,里面有namenode是整个文件系统的管理节点,它维护着一些元数据信息、还维护着整个文件的目录树、还有接收用户的一些请求、管理块的复制(当一个机器坏掉,块少了一份,namenode就会发命令把这些数据复制一份,【心跳机制】每隔一段时间,小弟主动会把信息汇报给老大)。
HDFS文件最终最终还是保存在Linux上。尽量不要上传一些小文件。每个块默认要保存3份。