1.HDFS的产生背景
数据量的增多,需要有一种系统管理多台机器的文件,于是产生DFS(Distributed File System)
2.HDFS简介
Hadoop项目的核心之一,用于数据存储,HDFS基于GFS开源实现。
3.HDFS优点
·处理超大文件--MB到TB级(相对应的它不适用于存储很多小文件)
·运行于廉价机器上,廉价的机器易发生故障,HDFS要做到高可靠、高可用
·一次写入多次读取
4.HDFS缺点
·不适用于低延时实时性的数据访问(应该使用HBase)。
·无法存储大量小文件,原因是文件和目录的信息都存储在NameNode中,HDFS能存储的文件数目由namenode的大小决定,当小文件过多会导致集群的性能下降。(解决办法:合并小文件)
5.HDFS设计目标
·错误的检测和快速自动的恢复是最核心的目标,硬件错误是常态而不是一场,任何一个服务器都可能失效
·大规模数据集。运行在HDFS上的文件大小一般在GB到TB量级,需要调节HDFS以支持大文件存储。HDFS应该具有较高的数据带宽,能在一个集群中扩展到数百个节点。单一的HDFS实例应该能支撑数以千万计的文件。
·移动计算代价比移动数据代价低,一个作业的计算,离他操作的数据越近就越高效。HDFS提供了将计算移动到数据附近的接口。将计算移动到数据附近要比数据移动到计算更加高效。
7.HDFS 组成
默认的最基本的存储单位是数据块(Block),默认的块大小是128MB(有些是64MB)
NameNode(元数据节点)--管理文件系统的命名空间,将所有的文件和文件夹的元数据保存在一个文件系统树。
DataNode(数据节点)--文件系统中真正存储数据的地方,一个文件被拆分成多个Block,接着将Block存储在对应的数据节点 。客户端向NameNode发起请求,然后到对应的数据节点上存取数据。
Secondary NameNode(从数据节点)--要知道Secondary NameNode不是Name Node节点的备胎,它们两个行使的功能不一样,但是两者有关联,其主要功能就是周期性地将Name Node的namespace image和edit log合并,以防日志文件过大。
8.HDFS 架构
HDFS采用master/slave架构。一个HDFS集群由一个Name Node和一定数量的Data Node组成。Name Node是一个中心服务器,负责管理文件系统的名字空间(namespace)以及客户端对文件的访问。集群中的Data Node一般是一个节点对应一个,负责管理它所在节点上的存储数据。
文件系统的名字空间:HDFS支持传统的层次型文件组织结构。用户或者应用程序可以创建目录,然后将文件保存在这些目录里。文件系统名字空间的层次结构和大多数现有的文件系统类似,用户可以创建、删除、移动或重命名文件。
当前,HDFS不支持用户磁盘配额和访问权限控制,也不支持硬链接和软链接。但是HDFS架构并不妨碍对这些特性的实现。
9.HDFS命令
可使用help命令寻求帮助
hadoop fs -help <命令>
在HDFS创建文件夹(级联创建文件夹需要在-mkdir 后面加 -p 否则会报错)
hadoop fs -mkdir
将Linux本地系统的文件上传到HDFS(这里上传我自己随便创建的一个txt文件,如果需要指定上传至HDFS的路径则在后面添加)
hadoop fs -put /tmp/input.txt /datatest
从HDFS下载文件到本地系统,需要root权限,否则会报permission denied
hdfs dfs -get /datatest/input.txt /home/hadoop/aaa
在hdfs上查看文件内容(这里使用cat,还可以用 -text,效果是一样的)
hdfs dfs -cat /datatest/input.txt
查看文件大小
hdfs dfs -du /datatest
删除刚刚创建的文件
hadoop fs -rm /datatest/input.txt
如果要删除一整个目录使用 -rmr,这里不做演示了。rmr会递归删除指定目录下的所有子目录和文件,慎用
更多命令参考官网:http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/