hdfs:Hadoop Distributed File System (Hadoop 分布式文件系统)
1.特点:
- 一次写入多次读出,并且不支持修改。适合做数据分析,不适合做网盘。
2.优点
- 高容错性
- 数据自动保存多个副本,默认三个。某一个丢失,还有备份
- 数据备份丢失,自动给恢复至默认副本数量
- 适合做大数据处理
- 数据规模大,GB TB PB
- 文件规模大,能够处理百万规模上的文件
- 能在低配置服务器上配置 ,通过多副本机制,提高可靠性
3. 缺点 :
- 不适合低延时的数据访问,比如毫秒级的存储数据
- 无法高效率的对小文件进行存储
- NameNode会记录每个文件的元信息,同一文件分开存和整合之后存,后者元信息更少,所占用的资源也就更少;
- hdfs的设计原理是接近磁盘读取速度,之所以把block块设置很大,是因为想做到寻道时间远小于文件读取数据块的时间,接近磁盘读取速度。如果小文件太多,会造成寻道时间太长,违背设计原理;
应该将小文件合并后存入hdfs
- 不支持并发写入,文件的随机修改;
- 一个文件只能有一个写,不能多服务器同时写;
- 仅支持文件的append(追加),不支持随机修改。
4.hdfs组成框架
- NameNode(nn):是master
- 管理hdfs的名称空间;
- 管理副本策略
- 管理数据块(Block)映射信息
- 处理客户端请求
- DataNode:是slave。NameNode下达命令。DataNode执行操作。
- 存储实际的数据块;
- 执行数据块的读写操作。
- client 客户端
- 文件切分。文件上传时,将文件切分成一个个block(128M),然后上传;
- 与NameNode交互,获取文件的位置信息;
- 与DataNode交互,读取或者写入数据;
- client提供一些命令来管理HDFS:如NameNode格式化;
- client可以通过一些命令来访问HDFS,比如查询
- Secondary NameNode:并非NameNode的热备,当NameNode挂掉时,它并不能马上替换NameNode并提供服务。
- 辅助NameNode,分担其工作量,
- hdfs块的大小
- 目前硬盘的寻址时间在10ms左右,读写速率在100m/s。在hdfs设计理念下,寻址时间应为传输时间的1%;所以传输时间大概在1s左右;1s*100m/s=100m。也就是一次写入的最大值应该为100m;所以选择128m大小作为hdfs块的大小;
- hdfs的块大小设置太小: 会增加寻找时间,违背hdfs设计理念。
- hdfs的块设置太大,会大大增加数据的传输时间。
- 在hdfs上面利用 -mkdir 创建文件夹时,不能使用中文字符;
- hadoop fs -moveFromLocal
- 不能剪切到hdfs上面没有的文件夹,也就是说这个命令不会自动创建文件夹
- hadoop fs -appendToFile
- Failed to replace a bad datanode on the existing pipeline due to no more good datanodes being available to try.
- 2014-05-04 10:43:55,009 INFOorg.apache.hadoop.ipc.Client: Retrying connect to server:hadoop1/192.168.10.22:9000. Already tried 0 time(s); retry policy isRetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS)
- 原因是,三个节点虽然都可以查到DataNode进程,但是在网页查到只有一个DataNode进程。在别的节点查看,不能与Name Node进行传输。原因是修改了 /etc/hosts的文件。
- -copyFromLocal
- 不能剪切到hdfs上面没有的文件夹,也就是说这个命令不会自动创建文件夹
10.-setrep 设置副本数量
- 当设置的数量大于DataNode时,不会在某一节点备份多份;只会是,在添加节点之后,将副本复制到新添加的节点上,直到达到设置的数量。
- 回收站功能
- fs.trash.interval=0 文件在回收站的存活时间设置
- 0 默认取消回收站功能
- 其他数字表示文件在回收站的存活时间。
- fs.trash.checkpoint.interval=0, 检查回收站的文件
- 0表示该值和fs.trash.interval的值相同
- 该值应该《=fs.trash.interval的值