HDFS简单介绍及读写流程——千峰视频

依据官网介绍,Hadoop有四大模块https://hadoop.apache.org/old/  (还有三大核心)

官网learn about这部分,左边这些是四大模块,都是需要学习的

https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/SingleCluster.html

https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html

先由客户端Client,向老大NameNode发送请求,说我要读数据,蓝色部分NameNode就会返回一个数据集和,就是你需要的信息在哪个地方,然后Client根据返回的集合进行读取DataNode的信息,操作结束后,关闭流就可以了。

HDFS具有主/从架构。HDFS集群由单个NameNode组成,这是一个主服务器,它管理文件系统名称空间并控制客户端对文件的访问。此外,还有许多数据节点,通常是群集中每个节点一个,它们管理连接到它们运行的节点的存储。HDFS公开一个文件系统命名空间,并允许用户数据存储在文件中。在内部,文件被分成一个或多个块,这些块存储在一组数据节点中。NameNode执行文件系统命名空间操作,如打开、关闭和重命名文件和目录。它还确定块到数据节点的映射。数据节点负责为来自文件系统客户端的读写请求提供服务。DataNodes还根据NameNode的指令执行块创建、删除和复制

HDFS体系结构

NameNode和DataNode是设计用于在商品机器上运行的软件。这些机器通常运行GNU/Linux操作系统(OS)。HDFS是使用Java语言构建的;任何支持Java的机器都可以运行NameNode或DataNode软件。使用高度可移植的Java语言意味着HDFS可以部署在很多机器上。典型的部署有一台只运行NameNode软件的专用计算机。群集中的其他每台计算机都运行数据节点软件的一个实例。该体系结构并不排除在同一台计算机上运行多个数据节点,而是在实际部署中(这种情况很少发生)。

集群中单个名称的存在极大地简化了系统的体系结构。NameNode是所有HDFS元数据的仲裁器和存储库。系统的设计使得用户数据永远不会流经NameNode

DataNode就是干活的,NameNode是监控DataNode干活的。

----------------------关于读写流程如下截图所示----------------------------------------

得到一个文件后,如何将文件写入到HDFS文件当中,首先是由HDFS的client端(能操作系统的地方),然后发起了一个open的操作,调了一个类叫Distributed File System 分布式文件系统,而Hadoop文件系统这个类叫File System,File System只不过是Distributed File System的一种特殊实现,打开Distributed File System的同时,它会向NameNode发起一个请求,告诉老大说我要写数据了,要写的文件在哪,就是从哪个文件将数据copy到哪,或文件流,然后老大就会根据你的地址,你要将文件写到那,以及文件大小,以及NameNode自身的一个配置,然后给你规划,计算有多少块,然后将规划后的DataNode的地址返回给HDFS client,得到返回后,也就是得到了一个DataNode地址的一个集合,然后clinet再次将文件大小再次分成多个block,然后一一按顺序写(write)到DataNode中,(也就是3、4步,将通过输出流,将文件写到DataNote中,),先写到第一个块,写完后,继续从流里面拿数据,写到第二个块,(而且每一块写后无论是成功或者不成功,都会返回一个标志,也就是ack的一个消息队列,如果成功之后继续写第二个块,再成功之后继续写第三个块),然后将ack原路返回,返回到输出流,返回到HDFS clinet,此时流就关闭了,然后由Distributed File System 分布式文件系统告诉 NameNode,说明此次的写入操作已经完成。到此就是一个HDFS操作系统写的一个流程。如果期间有写入错误的,NameNode后期也会对其进行调整的。可以参考HDFS技术内幕。

首先是由HDFS的client端(能操作系统的地方),先打开一个类叫Distributed File System 分布式文件系统,然后告诉老大NameNode,我们要进行读操作了,也就是告诉老大我要读的文件路径在哪里,NameNode看到路径后,通过元数据Name就可以拿到文件,都有那些块,并且知道这些块的地址都在那,然后他就会将文件所对应的块,块所对应的DataNode的地址,封成一个集合,然后返回给HDFS的client,然后client在发起一个读的操作,打开之后,还会对他做一个流FSDataInput System,得到这个流之后,就可以开始读,是按照返回地址里面的顺序来读,返回地址的时候,如果有支架,会做一个支架感应,(因为每一个块都有三个副本,此时三个副本肯定有一个副本是离HDFS的client是比较近的,取此最近的,路由的时间就是比较短了)按照顺序依次读取DataNode上面的bock块上的数据流,读取完后,返回给FSDataInput System,然后在将此打印出来或者将其输出到文件里面去,都是可以的,第四步是读,第五步也是读,总之是按照顺序读下去,读到最后一个DataNode块的地址之后,就把其关闭掉,就不用再通知NameNode,对于此读的流程也是比较简单的。

发布了190 篇原创文章 · 获赞 16 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/penghao_1/article/details/104108179