hadoop存储图像文件 hadoop 存储文件 您所在的位置:网站首页 查看上传到hdfs的文件是哪个命令 hadoop存储图像文件 hadoop 存储文件

hadoop存储图像文件 hadoop 存储文件

2023-07-11 06:19| 来源: 网络整理| 查看: 265

目录

概述:

主要组件和架构:

文件操作流程:

读文件:

写文件:

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架构如图所示。

hadoop存储图像文件 hadoop 存储文件_客户端

 

文件操作流程:读文件:

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采取了一个简单的方法,它把网络拓扑看成一棵树,两个节点的距离等于它们到最近共同祖先距离的总和,而树的层次可以这么划分: 同一节点中的进程;同一机架上的不同节点;同一数据中心不同机架;不同数据中心的节点。

hadoop存储图像文件 hadoop 存储文件_客户端_02

 

写文件:

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会提交这次文件创建,此时文件在文件系统中可见。

hadoop存储图像文件 hadoop 存储文件_HDFS_03

 

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

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有