HDFS是apache hadoop使用的分布式文件系统。Hadoop使用HDFS来存储大型数据,例如peta字节的数据。这些数据存储在不同的机器上,并在集群结构中分配数据,由于数据分布在多个机器上,它在处理数据时具有很高的可用性。HDFS在低成本的硬件上运行。
这些数据是如何存储在HDFS中的?
Hadoop运行在不同的机器上,这些机器被称为集群,并处理大量的数据。每个集群都有一组被称为数据节点的节点,每个节点都有一组数据块,这些数据在集群环境的不同节点上被复制。这种复制在数据库环境中被称为复制。因此,一组数据在不同的节点或机器上都是可用的,这样,当一个节点出现故障时,你就不会丢失数据。为了控制所有这些节点,我们有名称节点的概念,它与集群环境中的数据节点同步,以了解节点的健康状况,并存储关于节点和块的元数据。
如果数据快速增长,我们可以增加节点,而不会使整个系统发生故障并丢失数据。在网络术语中,我们可以把它称为可扩展的系统。这个系统可以处理在现有机器上添加机器或在机器添加到集群后丢失数据的情况。
正如你所知道的,集群有不同的节点,如果一个节点发生故障,Hadoop会在不丢失数据的情况下处理这个场景,并按预期提供所需的工作。
HDFS将数据存储在文件中,这些文件使用底层系统。
HDFS适用于存储大量的数据,如Peta和Teta字节的数据,使用Map reduce来处理OLAP事务。
让我们来看看这样的场景:你有12页的pdf文件要存储在HDFS系统中。
假设每页有一个块,在实际系统中可能有所不同。
名称节点持有三个项目(文件名,块数,块ID) :
1.文件名是存储在hdfs文件系统下的pdf文件的页码,例如(/pdf/page1)
2.块数代表该文件在hdfs中存储的块数
3.块ID代表对名称节点中块的引用
数据节点在不同的块中保存页面数据。
第1页被复制在三个块中,其ID为1,5,6
这些块在不同的机器上
下面是存储在集群上不同节点中的页面摘要:
page1,3,{1,5,6}
Page2,3,{4,1,2}
Page3,3,{3,4,1}
由于数据的复制,即使数据节点宕机,数据也不会丢失。名字节点和数据节点的通信可以通过TCP协议进行。
HDFS完全是在java框架上编写的。HDFS中的数据存储可以通过命令和apache提供的java hdfs api来控制。命令在底层操作系统上执行,而底层操作系统则调用java apis来与文件系统进行交互。