hdfs分布式文件系统
优点:一次写多次读;流式数据访问;一次写入、多次读取
缺点:高延迟;不适合存储大量小文件
NameNode
负责管理整个dfs文件系统的元数据,即,存储所有的文件目录、每个文件的具体信息(即:每个文件被分了多少块、每块文件的大小及存放位置)等。
DataNode
DataNode负责存放具体数据内容。
Block
数据块,通常以64MB为单位,具有多个冗余副本
读数据流程
client在向hdfs读数据时,先从NameNode获取文件的每个数据块的存放位置,再去指定的DataNode读取数据,最后通知NameNode关闭文件。
写数据流程
client在向hdfs写数据时,先通知NameNode创建文件,NameNode经过一系列的检查,反馈给client一个DataNode列表进行写数据操作。然后,client再去找特定的DataNode进行写数据,最后关闭文件。
client在写入某一块特定的数据时,要同时备份多份数据块,假设要备份3份,则写数据的流程如下:
client只向第一个DataNode写数据,随后的备份操作由DataNode传递下去,这样做的目的是减小client的读写压力,当备份完最后一块数据时,由最后一块数据所在DataNode向前一个DataNode发送ack确认包,此操作一直传递到client那里
hdfs的常用命令
查看文件列表:ls
列出hdfs文件系统根目录下的目录和文件:hadoop fs -ls/
列出hdfs文件系统所有的目录和文件:hadoop fs -ls -R /
列出hdfs文件系统中input目录中的目录和文件:hadoop fs -ls /input
上传文件到hadoop:put
将本地文件localfile拷贝到hadoop文件系统的input目录下的file1:hdfs dfs -put localfile /input/file1
将本地文件localfile1、localfile2拷贝到hadoop文件系统的input目录下:hdfs dfs -put localfile1 localfile2 /input
下载文件到本地:get
将hfds文件系统input目录下的file文件拷贝到本地localfile文件中:hdfs dfs -get /input/file localfile
创建目录:mkdir
在hdfs文件系统的根目录下创建input文件夹。该方式只能一级一级地创建目录,父目录必须存在:hadoop fs -mkdir /input
递归创建目录,如果父目录不存在就创建该父目录:hadoop fs -mkdir -p /dir1/dir2
删除文件、文件夹:rm
删除文件:下main三种方式均可
hdfs dfs -rm /input/file1
hdfs dfs -rm -R /input
hdfs dfs -rm -r /input
复制文件:cp
相同目录下拷贝:hdfs dfs -cp /input/file1 /input/file2
不同目录下拷贝文件:hdfs dfs -cp /input/file1 /another/file2
拷贝多个文件到另外目录:hdfs dfs -cp /input/file1 /input/file2 /another
移动文件:mv
不同目录下移动文件:hdfs dfs -mv /input/file1 /another/file2
移动多个文件到另外目录:hdfs dfs -mv /input/file1 /input/file2 /another
打印文件内容:cat
打印/input/file1文件的内容:hdfs dfs -cat /input/file1
查看hdfs系统状态
查看hdfs文件系统的基本信息:存储空间使用情况、datanode节点信息等:hdfs dfsadmin -report