HDFS优点:
-
高容错
-
海量数据存储
-
流式数据访问:一次写入,多次读取,不能修改,只能追加。能保证数据的一致性
-
可构建在廉价的机器上
缺点 -
不适合低延时处理
-
不能高效处理很多小文件
-
如果存储大量小文件,会占用NameNode大量的内存来存储文件、目录和快信息,不可取,因为NameNode内存有限
-
小文件的寻道时间会 超过读取时间,违反HDFS的设计原则
-
一个文件只能有一个线程写,不能多个线程同时写
-
只支持数据追加,不支持文件的随机修改
HDFS架构 -
Client:(1) 文件切分。将文件切分成block (2) 与NameNode交互,获取文件的位置信息 (3) 与DataNode交互,读取或者写入数据 (4) 提供一些命令管理HDFS。(5) 通过一些命令访问HDFS
-
NameNode:(1) 管理命名空间 (2) 管理数据映射信息 (3) 配置副本策略 (4) 处理客户端读写请求
-
DataNode: NameNode下达命令,DataNode执行实际的操作 (1) 存储实际的数据 (2) 执行读写操作
-
Secondary NameNode:并非NameNode的热备。当NameNode挂掉的时候, 它并不能马上替换NameNode并提供服务。(1) 辅助NameNode,分担其工作量。(2) 定期合并fsimage和fsedits,并推送给NameNode (3)在紧急情况下,可辅助恢复NameNode。
block大小 -
Hadoop2.x版本 改为 128M,老版本 64M。如果block设置太小的话,磁盘寻址是个很大的问题。实验表明,寻址时间为传输时间的 1%是最理想的状态。服务器磁盘的平均寻址时间约为10ms,传输速率为 100M/s,那么block 大小 = 10ms * 100 * 100M/s = 100M。 所以一般默认块大小设置为128M。
Hadoop命令
- 基本语法 hadoop fs
- 启动集群 start-dfs.sh start-yarn.sh
- hadoop fs -help
- hadoop fs -ls /user
- hadoop fs -mkdir -p /aa/bb/cc
- hadoop fs -moveFromLocal aa.txt /user 从本地剪切到hdfs
- hadoop fs -copyFromLocal bb.txt / 从本地拷贝到系统
- hadoop fs -put 上传,作用同上
- hadoop fs -cat /aa.txt
- hadoop fs -copyToLocal /aa.txt /opt 从系统拷贝到本地
- hadoop fs -get /aa.txt /opt 作用同上
- hadoop fs -appendToFile aa.txt /aa.txt 追加一个文件到已存在的文件的结尾
- hadoop fs -tail /aa.txt 显示文件末尾
- -chgrp 、-chmod、-chown:linux文件系统中的用法一样,修改文件所属权限
- 在hdfs目录中移动文件 hadoop fs -mv
- hadoop fs -rm 删除文件或目录
- hadoop fs -rmdir 删除空目录
- hadoop fs -df -h 统计文件系统的可用空间信息
- hadoop fs -du -s -h /user 统计文件夹的大小信息