全称(Hadoop Distributed File System),是一种分布式文件管理系统。
如今时代数据量越来越大,一个操作系统存不下所有的数据,就需要分配到更多的操作系统管理的磁盘中,但是涉及到多个机器就难以管理维护,需要一种系统来管理多台机器上的文件。
高容错性、适用于大数据、可构建在廉价机器上。
不适合低延时数据访问,对大量小文件存储不友好、不支持并发写入和文件随机修改(仅支持追加)。
可以理解为主要管理者:①管理HDFS的名称空间;②管理数据块映射信息;③配置副本策略;④处理client读写请求。
可以理解为工人即NameNode主要管的人:①存储实际的数据块(数据长度、校验和、时间戳);②执行数据块的读写操作。
具体可以一步这里:NameNode与Secondary NameNode
客户端:①文件上传时将其切分成块进行存储;②与NameNode交互,获取文件的位置信息;③与DataNode交互,读取或者写入数据;④可格式化NameNode,可对HDFS进行增删改查。
例如创建一个/emt文件夹
hadoop fs -mkdir /emt
例如从本地当前目录下的my.txt剪切到hdfs的/emt目录下
hadoop fs -moveFromLocal my.txt /emt
例如从本地当前目录的me.txt拷贝到hdfs的/emt目录下
hadoop fs -copyFromLocal me.txt /emt
还可以用put,与copyFromLocal效果等同
hadoop fs -put me.txt /emt
例如把today.txt中内容追加到hdfs的/emt下的文件me.txt的末尾。
hadoop fs -appendToFile today.txt /emt/me.txt
例如把hdfs的/emt下的文件me.txt拷贝到当前目录下
hadoop fs -copyToLocal /emt/me.txt ./
也可以使用get,拷贝到当前目录下,并命名为me2.txt
hadoop fs -get /emt/me.txt ./me2.txt
显示/emt目录下的信息
hadoop fs -ls /emt
显示文件内容
hadoop fs -cat /emt/me.txt
创建文件夹
hadoop fs -mkdir /wy
统计文件夹的大小信息
hadoop fs -du -s -h /emt
设置HDFS中文件的副本数量(例如为10)
hadoop fs -setrep 10 /emt/me.txt
其实还有其他的指令-cp、-mv、-tail,-rm等等,其实和linux命令不能说很像,只能说一模一样,就是前面多了个hadoop fs,然后正常命令前面多了个-。
图中以上传第一个块为例,后面块同理。
写数据的过程,NameNode会选择距离待上传数据最近距离的DataNode接受数据。那么这个距离怎么计算呢?
总结来说就是
两个节点到达最近的公共祖先的距离总和
比如上图中节点B、C的最近公共祖先是A,那么距离综合是2 1=3
联系客服