1、HDFS只是分布式文件管理系统的一种。
2、HDFS (Hadoop Distributed File System),它是一个文件系统,用于存储文件,通过目录树
来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各
自的角色。
HDFS的使用场景:适合-一次写入,多次读出的场景,且不支持文件的修改。适合用来做数
据分析,并不适合用来做网盘应用。
3、HDFS的优点:
高容错性(数据自动保存多个副本,通过增加副本的形式来提高容错性,当一个副本丢失的时候回自动回复)
适合处理大数据:(数据规模:能够处理数据规模达到GB、TB、甚至PB级别的数据; .文件规模:能够处理百万规模以上的文件数量,数量相当之大。)
可以构建在联机的机器上。通过多副本机制,提高可靠性
4、HDFS的缺点:
不适合低延时数据访问,比如毫秒级的存储数据,是做不到的。
无法高效的对大量小文件进行存储。(存储大量小文件的话,它会占用NameNode大量的内存来存储文件目录和块信息。这样是不可取的,因为NameNode的内存总是有限的;小文件存储的寻址时间会超过读取时间,它违反了HDFS的设计目标。)
不支持并发写入,不允许随机修改(一个文件只能有一个写,不允许多个线程同时写,仅支持数据append不支持文件的随机修改)
5、HDFS的组成架构:
Namenode就是master他的主管、管理者(管理HDFS的名称空间、配置副本策略、管理数据块、映射信息、处理客户端读写请求)
Datanode就是slave,namenode下达命令DataNode执行命令(存储实际的数据块、执行数据块的读写操作)
client就是客户端:(文件切分。文件上传HDFS的时候, Client将文件切分成- -个- 一个的Block,然后进行上传;与NarneNode交互, 获取文件的位置信息;与DataNode交互, 读取或者写入数据; Client提供一 些命令来管理HDFS ,比如NameNode格式化;Client可以通讨一 些命今来访问HDFS .比如对HDFS增删吉改操作:)
Secondauy NameNode:并非NameNode的热备。当NameNode挂掉的时候, 它并不
能马_上替换NameNode并提供服务。(辅助NameNode, 分担其工作量,比如定期合并F simage和Edits,并推送给N ameNode ;在紧急情况下,可辅助恢复NameNode。)
6、HDFS文件块的大小:
HDFS中的文件在物理上是分块存储( Block)块的大小可以通过配置参数( dfs.blocksize)来规定,默认大小在Hadoop2.x版本中是128M,老版本中是64M。(HDFS的块设置太小,会增加寻址时间,程序-直在找块的开始位置)(如果块设置的太大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。导致程序在处理这块数据时,会非常慢。)
7、HDFS的SHELL操作基本语法
8、命令大全:
[atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs [-appendToFile <localsrc> ... <dst>] [-cat [-ignoreCrc] <src> ...] [-checksum <src> ...] [-chgrp [-R] GROUP PATH...] [-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...] [-chown [-R] [OWNER][:[GROUP]] PATH...] [-copyFromLocal [-f] [-p] <localsrc> ... <dst>] [-copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>] [-count [-q] <path> ...] [-cp [-f] [-p] <src> ... <dst>] [-createSnapshot <snapshotDir> [<snapshotName>]] [-deleteSnapshot <snapshotDir> <snapshotName>] [-df [-h] [<path> ...]] [-du [-s] [-h] <path> ...] [-expunge] [-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>] [-getfacl [-R] <path>] [-getmerge [-nl] <src> <localdst>] [-help [cmd ...]] [-ls [-d] [-h] [-R] [<path> ...]] [-mkdir [-p] <path> ...] [-moveFromLocal <localsrc> ... <dst>] [-moveToLocal <src> <localdst>] [-mv <src> ... <dst>] [-put [-f] [-p] <localsrc> ... <dst>] [-renameSnapshot <snapshotDir> <oldName> <newName>] [-rm [-f] [-r|-R] [-skipTrash] <src> ...] [-rmdir [--ignore-fail-on-non-empty] <dir> ...] [-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]] [-setrep [-R] [-w] <rep> <path> ...] [-stat [format] <path> ...] [-tail [-f] <file>] [-test -[defsz] <path>] [-text [-ignoreCrc] <src> ...] [-touchz <path> ...] [-usage [cmd ...]]
大概的流向图:(put和copyfromlocal一样)(get和copytolocal一样)(tail - f进行内容追加)