Hadoop 分布式文件存储系统

目录

概述:

主要组件和架构:

文件操作流程:

读文件:

写文件:

HDFS命令:

创建目录:

查看文件列表:

上传文件到HDFS:

下载文件到本地:

查看HDFS文件内容:


概述:

HDFS即Hadoop分布式文件系统(Hadoop Distributed File System),它的设计目标是把超大数据集存储到网络中的多台普通商用计算机上,并提供高可靠性和高吞吐率的服务。分布式文件系统要比普通磁盘文件系统复杂,因为它要引入网络编程;分布式文件系统要容忍节点失效,这也是一个很大的挑战。

HDFS的设计前提和目标如下。

(1)专为存储超大文件而设计:HDFS应该能够支持GB级别大小的文件;它应该能够提供很大的数据带宽并且能够在集群中拓展到成百上千个节点;它的一个实例应该能够支持千万数量级别的文件。

(2)适用于流式的数据访问:HDFS适用于批处理的情况而不是交互式处理;它的重点是保证高吞吐量而不是低延迟的用户响应。

(3)容错性:完善的冗余备份机制。

(4)支持简单的一致性模型:HDFS需要支持一次写入多次读取的模型,而且写入过程文件不会经常变化。

(5)移动计算优于移动数据:HDFS提供了使应用计算移动到离它最近数据位置的接口。

(6)兼容各种硬件和软件平台。

HDFS不适合的场景如下。

(1)大量小文件:文件的元数据都存储在NameNode内存中,大量小文件意味着元数据的增加,会占用大量内存。

(2)低延迟数据访问:HDFS是专门针对高数据吞吐量而设计的。

(3)多用户写入:因为会导致一致性维护的困难。

主要组件和架构:

HDFS主要由3个组件构成,分别是Name Node、SecondaryNameNode和DataNode, HDFS是以Master/Slave(主从)模式运行的,其中NameNode、SecondaryNameNode运行在Master节点,DataNode运行Slave节点上。NameNode和DataNode架构如图所示。

 

文件操作流程:

读文件:

HDFS有一个文件系统实例,客户端通过调用这个实例的open()方法就可以打开系统中希望读取的文件。HDFS通过RPC调用NameNode获取文件块的位置信息,对于文件的每一个块,NameNode会返回含有该块副本的DataNode的节点地址。另外,客户端还会根据网络拓扑来确定它与每一个DataNode的位置信息,从离它最近的那个DataNode获取数据块的副本,最理想的情况是数据块就存储在客户端所在的节点上。HDFS会返回一个FSDataInputStream对象,FSDataInputStream类转而封装成DFSDataInputStream对象,这个对象管理着与DataNode和NameNode的I/O,具体过程是:

  • 客户端发起读请求。
  • 客户端与NameNode得到文件的块及位置信息列表。
  • 客户端直接和DataNode交互读取数据。
  • 读取完成关闭连接。图42给出了上述读文件的过程示意。

当FSDataInputStream与DataNode通信时遇到错误,它会选取另一个较近的DataNode,并为出故障的DataNode做标记以免重复向其读取数据。FSDataInputStream还会对读取的数据块进行校验和确认,发现块损坏时也会重新读取并通知NameNode。这样设计的巧妙之处有:

  • 让客户端直接联系DataNode检索数据,可以使HDFS扩展到大量的并发客户端,因为数据流就是分散在集群的每个节点上的,在运行MapReduce任务时,每个客户端就是一个DataNode节点。
  • NameNode仅需要相应块的位置信息请求(位置信息在内存中,速度极快),否则随着客户端的增加,NameNode会很快成为瓶颈。这里有必要理解Hadoop的网络拓扑。在海量数据处理过程中,主要限制因素是节点之间的带宽。衡量两个节点之间的带宽往往很难实现,在这里Hadoop采取了一个简单的方法,它把网络拓扑看成一棵树,两个节点的距离等于它们到最近共同祖先距离的总和,而树的层次可以这么划分:
    • 同一节点中的进程;
    • 同一机架上的不同节点;
    • 同一数据中心不同机架;
    • 不同数据中心的节点。

 

写文件:

HDFS有一个分布式文件系统(Distribute File System,DFS)实例,客户端通过调用这个实例的create()方法就可以创建文件。DFS会发送给NameNode一个RPC调用,在文件系统的命名空间创建一个新文件,在创建文件前NameNode会做一些检查,看看文件是否存在,客户端是否有创建权限等。若检查通过,NameNode会为创建文件写一条记录到本地磁盘的EditLog;若不通过会向客户端抛出IOException。创建成功之后DFS会返回一个FSDataOutputStream对象,客户端由此开始写入数据。同读文件过程一样,

FSDataOutputStream类转而封装成DFSDataOutputStream对象,这个对象管理着与DataNode和NameNode的I/O,具体过程是:

  • 客户端在向NameNode请求之前先写入文件数据到本地文件系统的一个临时文件。
  • 待临时文件达到块大小时开始向NameNode请求DataNode信息。
  • NameNode在文件系统中创建文件并返回给客户端一个数据块及其对应DataNode的地址列表(列表中包含副本存放的地址)。
  • 客户端通过上一步得到的信息把创建临时文件块Flush到列表中的第一个DataNode。
  • 当文件关闭,NameNode会提交这次文件创建,此时文件在文件系统中可见。

 

HDFS命令:

创建目录:

创建目录用mkdir命令。在Hadoop上创建目录与在Linux上创建目录类似,根目录用“/”表示。下面是一些应用示例。

hadoop fs -mkdir /test
#创建文件及其子目录
hadoop fs -mkdir -p /dira/dirb

查看文件列表:

与Linux的ls命令类似,Hadoop也有一条查看文件列表的命令,其完整用法是hadoop fs ls <args>,其中<args>表示可选参数。

#显示文件及其子目录
hadoop fs -ls /

上传文件到HDFS:

将文件从本地复制到HDFS集群称为文件上传。有两种命令可以使用,一种是“hadoop fs -put”,另一种是“hadoop fs -copyFromLocal”。

#将a.data上传到HDFS /test/input目录下
hadoop fs -put /home/a.data /test/input

下载文件到本地:

将文件从HDFS集群复制到本地称为文件下载。有两种命令可以使用,一种是“hadoop fs -get”,另一种是“hadoop fs -copyToLocal”。

#将HDFS上的/test/input/a.data 下载到 /home/hadoop目录下
Hadoop fs - get /test/input/a.data /home/hadoop

查看HDFS文件内容:


hadoop fs -text /input/a.txt
hadoop fs -cat /input/b.txt
hadoop fs -tail /input/c.txt

删除HDFS文件:

可以用“hadoop fs -rm”删除HDFS集群中的文件。

hadoop fs -rm /test/input/a.txt

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hadoop分布式文件系统(HDFS)是Hadoop核心组件之一,用于解决大数据存储的问题。它是一个横跨多台计算机的存储系统,采用了master/slave(主从)架构。一个HDFS集群由一个Namenode和一定数量的Datanode组成。Namenode是HDFS集群的主节点,负责协调和管理文件系统的元数据,而Datanode是从节点,负责存储实际的数据块。\[1\]\[2\] HDFS的设计目标之一是能够在面对硬件错误时继续运行而不让用户感知到明显的中断。因此,HDFS使用商用硬件,并且具备错误检测和快速、自动恢复的能力。由于HDFS可能由成百上千个服务器组成,任何一个组件都可能发生故障,因此这种容错能力对于保证系统的可靠性至关重要。\[3\] #### 引用[.reference_title] - *1* *2* [Hadoop分布式文件系统(HDFS)](https://blog.csdn.net/Melody_12/article/details/104866522)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Hadoop分布式文件系统(HDFS)](https://blog.csdn.net/XueFengPlay/article/details/78869007)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值