HDFS(Hadoop Distributed File System),是一个文件系统,用于存储文件,通过目录树来定位文件,其实,它是分布式的,联合多台服务器实现功能。HDFS容错性高,适合处理大数据。
使用场景:
- 适合一次写入,多次读出的场景;
- 不支持文件的修改;
- 适合于用来做数据分析,不适合用过来做网盘。
缺点:
- 不适合低延时数据访问
- 无法高效的对大量小文件进行存储;
2.1 大量小文件会占用NameNode大量的内存来存储文件目录和块信息。
2.2 小文件存储的寻址时间会超过读取时间。 - 不支持并发写入、文件随机修改;
3.1 一个文件只能有一个写,不允许多线程同时写。
3.2 仅支持数据追加,不支持文件的随机修改。
HDFS组成架构
HDFS文件块大小
HDFS的文件在物理上是分块(block)存储的,块的大小可以通过配置参数(dfs.blocksize
)来规定,在Hadoop2.x版本中默认是128M,老版本是64M。
块的大小与磁盘的传输速率有关系:
- 在集群的block中,寻址时间为10ms
- 当寻址时间为传输时间的1%时,为最佳状态。
- 目前磁盘的传输速度普遍为100MB/s,因此block的大小为:
HDFS的Shell操作
-
hadoop fs -help rm
:查看rm命令的帮助信息 -
hadoop fs -ls /
:显示目录信息 -
hadoop fs -mkdir -p /user/input
:在HDFS上创建目录 -
hadoop fs -moveFromLocal ./demo.txt /user/input/
:将本地的demo.txt文件剪切粘贴到HDFS -
hadoop fs -copyFromLocal ./demo.txt /user/input/
:将本地的demo.txt文件拷贝到HDFS
-put
命令与-copyFromLocal
功能相同
-
hadoop fs -copyToLocal /user/input/demo.txt ./
:将HDFS上的demo.txt拷贝到本地
-get
命令与-copyToLocal
功能相同
-
hadoop fs -appendToFile ./append.txt /user/input/demo.txt
:将本地的append.txt中的内容追加到已经存在的文件demo.txt的末尾 -
hadoop fs -getmerge /user/input/* ./zaiyiqi.txt
:将HDFS上/user/input/
目录下的所有文件合并下载到本地,并将结果保存在zaiyiqi.txt
中。 -
hadoop fs -du -h /user/
:统计文件夹的大小
hadoop fs -du -h -s /
:根目录下所有文件夹大小的总和
-
hadoop fs -setrep 2 /demo.txt
:设置demo.txt的副本数为2
当副本数大于数据节点的个数时,数据的实际副本数仍然为节点数,只有当新增节点时,才会生成新的副本,直到增加的节点数与数据的副本数相同时停止。
网友评论