Cloudera Hadoop HDFS原理剖析
来源:互联网 发布:教师网络研修的弊端 编辑:程序博客网 时间:2024/06/06 17:16
1、Hadoop和HDFS
分布式计算是利用互联网上的计算机的 CPU 的共同处理能力来解决大型计算问题的一种计算科学。多台计算机联网协同工作(有时也称为一个集群)就像单台系统一样解决某种问题,这样的系统我们称之为分布式系统。
分布式文件系统是分布式系统的一个子集,它们解决的问题就是数据存储。换句话说,它们是横跨在多台计算机上的存储系统。存储在分布式文件系统上的数据自动分布在不同的节点上。分布式文件系统在大数据时代有着广泛的应用前景,它们为存储和处理来自网络和其它地方的超大规模数据提供所需的扩展能力。
Hadoop:一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。
Hadoop 和 HDFS 的关系是,Hadoop实现了一个分布式文件系统HDFS。对外部客户机而言,HDFS 就像一个传统的分级文件系统。可以创建、删除、移动或重命名文件,等等。Hadoop 是一个以一种可靠、高效、可伸缩的方式进行处理的,能够对大量数据进行分布式处理的系统框架。HDFS是Hadoop兼容最好的标准级文件系统,因为Hadoop是一个综合性的文件系统抽象,所以HDFS不是Hadoop必需的。所以可以理解Hadoop是一个框架,HDFS是Hadoop中的一个部件。
当一切运行正常时,DataNode会周期性发送心跳信息给NameNode(默认是每3秒钟一次)。如果NameNode在预定的时间内没有收到心跳信息(默认是10分钟),它会认为DataNode出问题了,把它从集群中移除,并且启动一个进程去恢复数据。DataNode可能因为多种原因脱离集群,如硬件故障、主板故障、电源老化和网络故障等。
对于HDFS来说,丢失一个DataNode意味着丢失了存储在它的硬盘上的数据块的副本。假如在任意时间总有超过一个副本存在(默认3个),故障将不会导致数据丢失。当一个硬盘故障时,HDFS会检测到存储在该硬盘的数据块的副本数量低于要求,然后主动创建需要的副本,以达到满副本数状态。
3、元数据和数据:NameNode和DataNode
存储到文件系统中的每个文件都有相关联的元数据。元数据包括了文件名、i节点(inode)数、数据块位置等,而数据则是文件的实际内容。
在传统的文件系统里,因为文件系统不会跨越多台机器,元数据和数据存储在同一台机器上。
为了构建一个分布式文件系统,让客户端在这种系统中使用简单,并且不需要知道其他客户端的活动,那么元数据需要在客户端以外维护。HDFS的设计理念是拿出一台或多台机器来保存元数据,并让剩下的机器来保存文件的内容。
NameNode和DataNode是HDFS的两个主要组件。其中,元数据存储在NameNode上,而数据存储在DataNode的集群上。NameNode不仅要管理存储在HDFS上内容的元数据,而且要记录一些事情,比如哪些节点是集群的一部分,某个文件有几份副本等。它还要决定当集群的节点宕机或者数据副本丢失的时候系统需要做什么。
存储在HDFS上的每份数据片有多份副本(replica)保存在不同的服务器上。在本质上,NameNode是HDFS的Master(主服务器),DataNode是Slave(从服务器)。
在HDFS里,文件被切分成数据块,通常每个数据块64MB~128MB,然后每个数据块被写入文件系统。同一个文件的不同数据块不一定保存在相同的DataNode上。这样做的好处是,当对这些文件执行运算时,能够通过并行方式读取和处理文件的不同部分。
当客户端准备写文件到HDFS并询问NameNode应该把文件写到哪里时,NameNode会告诉客户端,那些可以写入数据块的DataNode。写完一批数据块后,客户端会回到NameNode获取新的DataNode列表,把下一批数据块写到新列表中的DataNode上。
4、HDFS写过程
NameNode负责管理存储在HDFS上所有文件的元数据,它会确认客户端的请求,并记录下文件的名字和存储这个文件的DataNode集合。它把该信息存储在内存中的文件分配表里。
例如,客户端发送一个请求给NameNode,说它要将“zhou.log”文件写入到HDFS。那么,其执行流程如图所示。具体为:
第一步:客户端发消息给NameNode,说要将“zhou.log”文件写入。(如图中的①)
第二步:NameNode发消息给客户端,叫客户端写到DataNode A、B和D,并直接联系DataNode B。(如图中的②)
第三步:客户端发消息给DataNode B,叫它保存一份“zhou.log”文件,并且发送一份副本给DataNode A和DataNode D。(如图中的③)
第四步:DataNode B发消息给DataNode A,叫它保存一份“zhou.log”文件,并且发送一份副本给DataNode D。(如图中的④)
第五步:DataNode A发消息给DataNode D,叫它保存一份“zhou.log”文件。(如图中的⑤)
第六步:DataNode D发确认消息给DataNode A。(如图中的⑤)
第七步:DataNode A发确认消息给DataNode B。(如图中的④)
第八步:DataNode B发确认消息给客户端,表示写入完成。(如图中的⑥)
在分布式文件系统的设计中,挑战之一是如何确保数据的一致性。对于HDFS来说,直到所有要保存数据的DataNodes确认它们都有文件的副本时,数据才被认为写入完成。因此,数据一致性是在写的阶段完成的。一个客户端无论选择从哪个DataNode读取,都将得到相同的数据。
5、HDFS读过程
为了理解读的过程,可以认为一个文件是由存储在DataNode上的数据块组成的。客户端查看之前写入的内容的执行流程如图2所示,具体步骤为:
第一步:客户端询问NameNode它应该从哪里读取文件。(如图中的①)
第二步:NameNode发送数据块的信息给客户端。(数据块信息包含了保存着文件副本的DataNode的IP地址,以及DataNode在本地硬盘查找数据块所需要的数据块ID。) (如图中的②)
第三步:客户端检查数据块信息,联系相关的DataNode,请求数据块。(如图中的③)
第四步:DataNode返回文件内容给客户端,然后关闭连接,完成读操作。(如图中的④)
客户端并行从不同的DataNode中获取一个文件的数据块,然后联结这些数据块,拼成完整的文件。
6、如何使用HDFS
HDFS是在安装并成功配置后即可使用。具体安装过程不再赘述。无论是使用shell脚本,或者使用WEB UI进行操作,使用前必须得明白HDFS的配置。便于存储操作或者操作优化。
常用HDFS命令:
hdfs dfs -copyFromLocal /local/data /hdfs/data:将本地文件上传到 hdfs 上。
hadoop fs -ls / :查看根目录文件。
hadoop fs -ls /tmp/data:查看/tmp/data目录。
hadoop fs -cat /tmp/a.txt :查看 a.txt,与 -text 一样。
hadoop fs -mkdir dir:创建目录dir。
hadoop fs -rmr dir:删除目录dir。
- Cloudera Hadoop HDFS原理剖析
- hadoop(一):深度剖析hdfs原理
- Hadoop中HDFS写入文件的原理剖析
- Hadoop中HDFS读取文件的原理剖析
- Hadoop中HDFS写入文件的原理剖析
- Hadoop中HDFS写入文件的原理剖析
- Hadoop 学习研究(七): 深度剖析hdfs原理
- 深度剖析hdfs原理
- HDFS原理剖析
- hadoop HDFS原理基础知识
- 【hadoop】 2001-hdfs原理
- Hadoop HDFS原理
- hadoop HDFS存储原理
- Hadoop HDFS原理
- hadoop核心------>HDFS原理
- hadoop HDFS存储原理
- Hadoop-HDFS运行原理
- Hadoop之HDFS原理
- FastReport.Net报表冲突问题
- 为什么要使用队列
- HDU-1010 Tempter of the Bone(奇偶剪枝)
- 怎样才能成为一个优秀的产品经理
- IO流
- Cloudera Hadoop HDFS原理剖析
- PyTorch(六)——梯度反向传递(BackPropogate)的理解
- IDEA快捷键
- 机器学习 相似程度 曼哈顿距离
- 代理模式和java动态代理
- 软件测试黑马工程师--测试基础
- Js_Dom(9)__Dom基础<Ajax请求>
- c/c++动态库(DLL)调用,c#等其他语言调用c/c++的DLL
- 获取客户端IP地址