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

HDFS学习1——千峰视频

Apache™Hadoop®项目开发了用于可靠、可伸缩、分布式计算的开源软件。

Apache Hadoop软件库是一个框架,它允许使用简单的编程模型跨计算机集群分布式处理大型数据集。它被设计成从单个服务器扩展到数千台机器,每台机器都提供本地计算和存储。库本身不是依赖硬件来提供高可用性,而是设计用于检测和处理应用程序层的故障,因此在计算机集群上提供高可用性服务,每个集群都可能容易出现故障。

依据千峰视频介绍学习如下:

HDFS学习1——千峰视频

HDFS学习1——千峰视频

其实他们都是Hadoop的子项目。

HDFS学习1——千峰视频

HDFS学习1——千峰视频

HDFS学习1——千峰视频

HDFS学习1——千峰视频

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

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

HDFS学习1——千峰视频

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

HDFS学习1——千峰视频

HDFS学习1——千峰视频

HDFS学习1——千峰视频

 

HDFS学习1——千峰视频

HDFS学习1——千峰视频

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

HDFS学习1——千峰视频

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

HDFS学习1——千峰视频

得到一个文件后,如何将文件写入到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学习1——千峰视频

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

 

 

 

 

 

相关文章:

  • 2021-10-18
  • 2021-11-01
  • 2021-11-01
  • 2021-11-29
  • 2021-12-08
  • 2021-10-17
  • 2021-09-11
猜你喜欢
  • 2021-09-17
  • 2021-09-05
  • 2021-11-13
  • 2021-10-30
  • 2021-12-07
  • 2021-10-16
  • 2021-06-19
相关资源
相似解决方案