1. HDFS简介
Hadoop分布式文件系统(HDFS)被设计成适合运行普通pc上的分布式文件系统。总的设计思想:分而治之——将大文件、大批量文件,分布式存放在大量独立的服务器上,以便于采取分而治之的方式对海量数据进行运算分析。
HDFS是一个主/从(Mater/Slave)体系结构,从最终用户的角度来看,它就像传统的文件系统一样,可以通过目录路径对文件执行CRUD(Create、Read、Update和Delete)操作。
但由于分布式存储的性质,HDFS集群拥有一个NameNode和一些DataNode。NameNode管理文件系统的元数据,DataNode存储实际的数据。
HDFS一般是用来“一次写入,多次读取”,不适合做实时交互性很强的事情,不适合存储大量小文件。
2. HDFS的工作原理以及读写策略
<ul>
<li>block 块</li>
在操作系统里面学过,文件是以块的方式存放在硬盘上面的,块表示了系统读/写文件的最小大小。(操作系统内存分配的原则是段页式分配,也就是有一个页和页框的概念,页框的大小就是块的大小。)
同理,分布式的文件系统,也有块的概念,大小是128MB。(书上说是64MB,结果自己在电脑上看了一下配置文件,hadoop 2.0以后的版本都变成了128MB)。
hadoop文件系统为了应付单点故障,默认将文件的副本设定为了3份。(在伪分布模式下面 副本的个数是1份)。当如果一个机器上面副本出现了故障,namenode 和 datanode 通过心跳机制通信,如果namenode发现datanode挂了,在另外的机器读取一个副本并进行存储。(这个过程对用户来说,是透明的)
<br />
<li> namenode 和 datanode</li>
hdfs里面有两类节点,一类是namenode,一类是datanode。namenode的作用是管理文件系统的命名空间,维护整个文件系统的文件目录树,以及这些文件的索引目录。
datanode用来存储文件块,被客户机和namenode调用。同时,他们通过心跳(heartbeat)定时向namenode发送所存储的文件块信息。
<br />
<li> 读写策略</li>
读取文件的时候,client 先会和namenode通信,告诉namenode要读的文件,然后namenode返回一个离客户机最近的副本。
写文件的流程
image.png
</ul>
3.hdfs的操作和Java API
(注意 下面所有的命令的运行都是 伪分布式模式下运行的结果)
-
查看分布式文件系统
image.png -
查看文件
image.png -
创建文件夹
image.png -
从本地拷贝文件到分布式系统
image.png -
使用put命令 将本地文件上传到分布式文件系统
image.png -
查看文件系统 (注意这里指明了namenode的位置)
image.png
7 使用get命令将文件从分布式文件系统下载到本地
image.png
网友评论