一、HDFS概述
随着数据量越来越大,一个操作系统管辖的范围内存不下了,那么久分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统,HDFS只是分布式文件系统中的一种。
HDFS用于储存文件,通过目录树来定位文件;其次,它还是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。
HDFS的设计适合一次写入,多次读取的场景,且不支持文件的修改。适合用来做数据分析,并不适合来做网盘应用。
HDFS的优点:
-
高容错性
-
数据自动保存多个副本,它通过增加副本的形式,提高容错性。
-
某一个副本丢失以后,它可以自动恢复。
-
-
适合大数据处理
-
数据规模:能过处理数据规格达到GB、TB、甚至达到PB级别的数据
-
文件规模:能够处理百万级规模以上的文件数量。
-
-
流式数据访问
-
一次写入,多次读取,不能修改,只能追加
-
它能保证数据的一致性
-
-
可构建在廉价机器上,通过多副本机制,提高可靠性
HDFS缺点:
-
不适合低延时数据访问,比如毫秒级的储存数据,是做不到的
-
无法高效的对大量小文件进行储存
-
存储大量小文件的话,它会占用NameNode大量的内存来存储文件、目录和块信息。这样是不可取的,应为NameNode的内存总是有限的
-
小文件存储的寻道时间会超过读取时间,违反了HDFS的设计目标
-
-
并发写入、文件随机修改
-
一个文件只能有一个写,不运行多个线程同时写
-
仅支持数据append,不支持文件的随机修改
-
HDFS的架构
-
Client:客户端
-
NameNode:管理者(相当于文件的目录)
-
DataNode:NameNode下达命令,DataNode执行实际的操作
-
Secondary NameNode:并非NameNode的热备份。
HDFS文件块大小
HDFS中的文件在物理上市分块储存(block),块的大小可以通过配置参数(dfs.blocksize)来规定,默认大小在hadoop2.x版本中是128M(集群模式下,本机模式还是64M),老版本中是64M
HDFS的块比磁盘的块大,其目的是为了最小化寻址开销,如果块设置得足够大,从磁盘传输数据的时间会明显大于定位这个快开始位置所需的时间,因此,传输一个由多个块组成的文件的时间取决于磁盘传输速度。
如果寻址时间为10ms,而传输速率为100MB/s,为了使寻址时间仅占传输时间的1%,我们要将快大小设置为100MB。
二、HDFS命令行操作
基本语法:hadoop fs [OPTIONS]
语法参数:
-
-help:输出这个命令的参数
-
-ls:显示目录信息
-
-mkdir:在hdfs上创建目录
-
-moveFromLocal:从本地文件剪贴粘贴到hdfs
-
-appendToFile:追加一个文件到已经存在的文件末尾
-
-cat:显示文件内容
-
-tail:显示一个文件的末尾
-
-chgrp、-chmod、-chown:linux文件系统中的用法一样,修改文件的所属权
-
-copyFromLocal:从本地文件系统拷贝文件到hdfs
-
-coypToLocal:从hdfs拷贝到本地
-
-cp:从hdfs的一个路径拷贝到hdfs下的另一个路径
-
-mv:在hdfs目录中移动文件
-
-get:等同于coypToLocal,下载hdfs文件到本地
-
-getmerge:合并下载多个文件,通过通配符下载目录下的文件
-
-put:等同于copyFromLocal
-
-rm:删除文件或者文件夹
-
-rmdir:删除空目录
-
-df:统计文件系统的可用空间信息
-
-du:统计文件夹大小信息
-
-setrep:设置hdfs中文件副本数量