Hadoop分布式文件系统hadoop分布式文件系统_第1页
Hadoop分布式文件系统hadoop分布式文件系统_第2页
Hadoop分布式文件系统hadoop分布式文件系统_第3页
Hadoop分布式文件系统hadoop分布式文件系统_第4页
Hadoop分布式文件系统hadoop分布式文件系统_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Hadoop大数据处理实战第4章Hadoop分布式文件系统本章导读Hadoop分布式文件系统(HDFS)是Hadoop体系中数据存储管理的基础。它是一个高度容错的系统,能检测和应对硬件故障,可在低成本的通用硬件上运行。它简化了文件的一致性模型,通过流式数据访问,可为带有大型数据集的应用程序提供高效的海量数据存储服务。学习目标020304了解HDFS的设计目标和不足。熟悉HDFS的体系结构。了解HDFS的数据错误与恢复手段。理解HDFS的运行机制和工作流程。掌握HDFS的命令行操作和JavaAPI操作。01HDFS概述数据错误与恢复02HDFS的运行机制03目录CONTENTSHDFS的工作流程04HDFS的基本操作0501HDFS概述HDFS概述HDFS是一个支持海量数据存储的分布式文件系统,它允许用户将成百上千的计算机组成存储集群,并将这些计算机划分成元数据节点和数据节点。集群中各节点之间通过网络进行数据交互,从而形成一个跨网络的文件系统。网络编程的复杂性和网络传输的不可靠性,使得HDFS比普通磁盘文件系统更加复杂。HDFS概述4.1.1HDFS的设计目标和不足HDFS的设计目标包括以下几点:1.HDFS的设计目标(1)支持超大文件存储。HDFS能够存储GB级乃至TB级的超大文件,如今已存在支持PB级文件存储的Hadoop集群。(2)采用write-once-read-many(一次写入多次读取)访问模型。HDFS对数据文件采取一次性写入、多次读取的方式,即HDFS文件一经创建、写入和关闭之后就不能再修改。需要注意的是,HDFS在同一时刻仅支持一个“写入者”。此外,随着Hadoop版本的升级,HDFS的写操作已支持使用append方式在文件末尾追加数据。HDFS概述(3)具有故障检测和快速自动恢复功能。HDFS系统包含了成百上千个存储节点,并且这些节点都是一些廉价的计算机。显然,对于如此多的计算机而言,个别计算机出现硬件故障实属正常。有鉴于此,故障检测和快速自动恢复就成为HDFS的核心设计目标,从而既保证了集群的容错性,又保证了数据的完整性。(4)采用流式数据访问。为了获得高吞吐量的数据访问,HDFS上的应用主要采用流式数据访问方式,即边收集数据边处理数据。因此,HDFS适用于批量数据处理,而非用户交互式数据处理。(5)支持移动计算。如果将应用程序请求的计算在其操作的数据附近执行,而不是将数据移动到运行应用程序的位置,可以极大地减少网络拥塞并提高系统的整体吞吐量,从而提高计算效率,尤其是当数据文件很大时提升效果更加明显。此外,HDFS还为应用程序提供了移动计算的接口。HDFS概述HDFS同时也存在以下几点不足:2.HDFS的不足(1)不适合处理低延迟数据访问。HDFS主要用于海量数据的批量处理,且通过采用流式数据访问方式获得了数据的高吞吐率,但这意味着HDFS不适合处理低延迟的数据访问请求。(2)无法高效存储大量小文件。小文件是指小于HDFS上最小存储单位的文件。如果HDFS中存储大量的小文件,会使得在集群中进行数据计算时出现数据倾斜问题(即数据在计算时分散度不够,导致大量的数据集中到一台或多台计算机上,使得这些计算机的计算速度远远低于平均计算速度,计算过程也将变得缓慢)。不过,可以通过合并小文件来解决此类问题。HDFS概述(3)不支持多用户写入和任意修改文件。HDFS采用了“一次写入多次读取”模式,也就是说,用户不能对HDFS上的数据进行随机写操作。此外,HDFS不支持多个“写入者”同时操作数据,也不支持在文件的任意位置进行写操作以修改文件内容。如果必须修改HDFS文件,用户可以将该文件下载到本地,重新编辑后再上传到HDFS中。HDFS概述4.1.2HDFS的体系结构HDFS的核心组件是NameNode和DataNode。它是一个主/从(master/slave)架构的系统,即一个HDFS集群由一个NameNode和若干DataNode组成。其中,NameNode(元数据节点)为主节点,DataNode(数据节点)为从节点。HDFS的体系结构HDFS概述1.block在计算机中,每个物理磁盘都包含大量磁盘数据块。磁盘数据块是磁盘读写的最小单位,并且当文件系统进行文件读写时只能操作整数倍磁盘数据块大小的数据。与普通文件系统类似,HDFS也采用了块(block)的概念。HDFS的数据块大小默认为128MB(Hadoop1.x为64MB),显然,这比大小通常为512B的磁盘数据块要大得多。HDFS概述在HDFS中,数据文件按块进行存储可以带来如下好处:(1)可以存储任意大小的数据文件,不用再受单个节点磁盘容量大小的限制。例如,在单个节点存储100TB甚至10PB的文件几乎是不可能的,但HDFS采用物理切块的设计,可以将这些文件数据切分成多个block,分别存储在集群中的各个节点上。(2)简化了文件存储子系统的设计,尤其是简化了存储系统的管理,它将元数据信息和文件数据信息分开存储。(3)有利于实现分布式文件系统的容错性。在HDFS中,一个数据文件可能被切分成多个block,存储在不同的DataNode上,并且block在集群中保存了多个副本。当操作HDFS数据时,如果出现节点故障,就可以从其他节点上读取副本。HDFS概述(4)有利于实现负载均衡并提高集群可靠性。如果某个DataNode上的剩余空间低于特定的临界点,按照均衡策略,系统会自动地将数据从这个DataNode移动到其他空闲的DataNode上。此外,由于HDFS中的block副本被分布在不同的机架上,即使丢失某个机架,也不会影响集群的正常运行,这就大大提高了集群的可靠性。与此同时,Hadoop的故障检测和快速自动恢复功能会及时将block副本数量恢复到正常水平。HDFS概述2.NameNode和SecondaryNameNode(1)NameNode。NameNode管理着HDFS文件系统的命名空间(namespace),其实就是HDFS的目录结构。用户可以利用HDFS命令或者在客户端通过操作请求,来创建、删除、移动和重命名HDFS文件。NameNode上存储的元数据信息包括:①文件名、目录名及其层级关系;②文件目录的所有者及其权限;③每个文件由哪些数据块组成;④数据块到DataNode的映射信息,如数据块存放在哪些DataNode上、每个DataNode上保存了哪些数据块等。HDFS概述元数据信息可被持久化到本地磁盘的两个文件中,分别是fsimage(元数据镜像文件)和edits(事务日志文件)。fsimage存储着文件系统的所有命名空间信息(如文件系统所有目录、文件信息及数据块的索引等);edits存储着HDFS数据的事务操作日志(如创建一个HDFS文件、修改HDFS文件的副本系数等操作记录)。在启动NameNode时,它首先会将fsimage加载到内存中,在系统运行期间,所有对NameNode的操作也都保存在内存中,同时为了防止数据丢失,这些操作又会不断被持久化到本地edits文件中。NameNode处于正常运行状态时,HDFS的所有更新操作都被写入edits文件。如果直接写入fsimage文件(一般都很大),会使系统的运行速度变慢。随着HDFS的更新操作不断执行,edits文件也会变得越来越大。虽然edits的文件大小对系统不会有明显影响,但是NameNode节点的重启过程将会变得非常缓慢。HDFS概述(2)SecondaryNameNode。SecondaryNameNode(NameNode的辅助者)可以解决edits文件过大的问题,缩短NameNode的重启时间,它主要用于对fsimage和edits进行定期合并。由于合并过程中需要消耗内存,因此,系统通常将SecondaryNameNode和NameNode放在不同的节点上。SecondaryNameNode实际上是通过在文件系统中设置一个检查点(checkpoint)来帮助NameNode管理元数据,从而使NameNode能够快速、高效地工作。但是,它并非第二个NameNode,仅是NameNode的一个辅助工具。SecondaryNameNode不仅提升了集群性能,还保存了NameNode的元数据信息,这在一定程度上提高了元数据的安全性和可靠性。HDFS概述3.DataNodeDataNode上存储着HDFS文件的真实数据,且一个DataNode可以存储多个block。每个block会在多个DataNode上存储副本,但每个DataNode上只存储一个block副本。DataNode负责为客户端或NameNode提供数据的检索和读写服务,并通过“心跳”(Heartbeats)定期向NameNode发送自己的block列表信息。一般情况下,DataNode从磁盘读取数据块。但对于频繁访问的block,系统会将其缓存在DataNode的内存中。HDFS概述向Hadoop集群中增加新的DataNode节点时,会导致HDFS文件分布不均衡。此外,随着HDFS不断地运行,也会出现HDFS文件分布不均衡的情况,这样一来,集群就不能充分利用系统资源了。均衡器作为Hadoop的守护进程,可以将block副本从高负载的DataNode移动到使用率较低的DataNode(即在遵循block的副本机制的前提下,重新调整block的分布),以达到集群均衡的目的。注意,这里的均衡是一个相对均衡,即每个DataNode节点的磁盘使用率和整个集群的资源使用率均小于指定的阈值。在集群中启用均衡器

(balancer)HDFS概述在集群主节点的“/opt/programs/hadoop-2.7.6/sbin”目录下,存在一个balancer可执行文件“start-balancer.sh”,通过执行以下命令可以运行balancer程序(用户可以随时通过执行“stop-balancer.sh”命令停止均衡):#start-balancer.sh-threshold8其中,“-threshold8”参数用于设定集群的均衡阈值为8%,其默认值为10%。此外,由于balancer进程运行于集群的后台,所以并不会增加集群的运行负担。在配置文件hdfs-site.xml中,还可以设置在DataNode之间转移block时占用的资源带宽大小,即设置dfs.balance.bandwidthPerSec参数(默认值为1MB)。02数据错误与恢复数据错误与恢复HDFS的主要目标是即使在出错的情况下也要保证数据存储的可靠性。常见的出错情况包括block损坏、NameNode错误、DataNode错误等,HDFS提供了多种错误恢复手段。数据错误与恢复4.2.1block损坏处理网络传输错误和机器硬件故障等因素会造成数据损坏。客户端在读取文件时会对每个读取的block进行校验,如果校验出错,客户端就会请求读取其他DataNode上的block副本,并向NameNode报告该block存在问题,然后NameNode会重新复制该block。每一个DataNode都会开启一个块扫描进程(DataBlockScanner),来定期验证其存储的block的正确性,并将验证错误的block交给NameNode进行处理。数据错误与恢复4.2.2NameNode和DataNode错误处理NameNode上保存了元数据信息,如果NameNode节点损坏,HDFS中的所有文件都会丢失,并且用户也不能根据DataNode上的block重新构建HDFS文件。因此,确保NameNode的容错性是十分重要的。通常,可以采用以下3种方法来保证NameNode元数据信息的安全。

1将NameNode的元数据信息持久化到本地磁盘并同步到NFS上,但这种方法会因为网络带宽等原因而容易造成元数据丢失。数据错误与恢复

2在HDFS集群中运行一个SecondaryNameNode,当NameNode节点宕机时,可以利用SecondaryNameNode保存的元数据信息进行系统恢复。SecondaryNameNode备份的元数据信息总是滞后于NameNode,所以这种方法在NameNode节点失效后难免会丢失部分数据信息。

3在HDFS集群中启动主(active)、备(standby)两个NameNode。其中,standbyNameNode转存了activeNameNode的元数据信息,并且这种方式是同步的。即使activeNameNode发生硬件故障,集群也能快速实现故障转移。当DataNode节点发生硬件故障或者断网时,该节点将无法接收到NameNode的数据处理请求,并且该节点的数据同时会被NameNode标记为不可读。并且,DataNode节点错误可能会导致集群中的副本系数小于指定值。当NameNode周期性地检查数据副本时,一旦发现这种情况,就会立即启动复制操作。03HDFS的运行机制HDFS的运行机制HDFS的运行机制主要包括副本机制、心跳机制、副本放置与机架感知策略、Federation机制、HA机制、安全模式、垃圾回收等内容。HDFS的运行机制4.3.1副本机制为了保证集群的容错性和可用性,HDFS采用了数据冗余存储方式,即一个数据可以保存多个副本,并且这些副本会分别存储在不同的DataNode上。block副本数是可以配置的,并且它既可以在创建文件时指定,也可以在创建文件后修改。DataNode按照NameNode的命令进行block的创建、复制和删除等操作。HDFS数据冗余存储示意图HDFS的运行机制

…………

HDFS的数据冗余存储方式具有多种优势。如果多个客户端同时访问同一个数据文件,就可以让这些客户端分别从不同的block副本读取数据,从而加快数据传输速度并提升数据的可靠性,有效避免因DataNode故障造成数据丢失的情况。由于集群中DataNode是通过网络通信进行数据传输的,当进行block副本复制时,它还可以检查数据传输时是否出现错误。HDFS的运行机制4.3.2心跳机制DataNode通过“心跳”(Heartbeats)将block信息报告给NameNode,这里的“心跳”是一种形象化描述,指的是不间断地发送一个自定义结构体(“心跳包”或“心跳帧”)来证明自己节点的有效性。NameNode启动后,会等待所有DataNode的“心跳”,而DataNode启动后,会主动连接NameNode,并在一定间隔(默认为3s)主动向NameNode发送一个“心跳”,报告自己的状态信息,然后NameNode通过这个“心跳”向DataNode下达命令。如果由于硬件故障或网络问题,NameNode长时间未收到某个DataNode的“心跳”,NameNode将判定该DataNode为宕机,然后检查该DataNode上的block副本数据并备份到其他的DataNode节点上。HDFS的运行机制4.3.3副本放置与机架感知策略一个集群中往往存在多个机架,且每个机架上又放置了多个DataNode,而每个DataNode上又保存了多个文件的block副本。另外,NameNode上的元数据存储着每个DataNode所属的机架ID。那么,如何分配文件的block副本到集群中的DataNode上呢?假设将HDFS文件的副本数量配置为3,那么每个block副本会被放置到3个不同的DataNode上。其中,有两个block副本被放置到同一个机架的不同DataNode上,而第3个block副本被放置到另一个机架的DataNode上。block副本放置策略及复制过程HDFS的运行机制block副本的放置过程如下:如果客户端发起写操作请求,那么就在客户端所在的节点上放置第1个副本(实现就近写)。如果是来自集群外部的写操作请求,就随机选择一个能够满足存储要求且不忙的DataNode放置第1个副本。第2个副本是从机架1的DataNode1上复制到同一个机架的DataNode3上。在机架2上随机选择一个DataNode放置第3个副本。在本例中,第3个副本是从DataNode3上复制到DataNode6上。HDFS的运行机制相对于将副本均匀分布在机架中的策略,这种副本放置策略对集群性能有很大的提升。例如,它减少了机架间的数据传输;在不损害数据可靠性和读取性能的情况下,它既兼顾了写操作的效率,又充分利用了多个机架的带宽,从而减少了读取数据时所需要的网络传输总带宽。由于副本的存放位置会影响HDFS的可靠性和性能,HDFS采用了一种称为机架感知(rack-aware)的策略来提高数据的可靠性,并提升网络带宽的利用率。这样一来,即使一个机架发生故障,由于其他机架上的副本仍然是可用的,也不会影响到数据的可靠性。另外,当读取数据时,应用程序可以在多个机架上同时进行读取操作,这种并行处理方法也大大提高了数据的读取速度。HDFS的运行机制4.3.4Federation机制对于一个存储着大量文件的超大集群来说,NameNode的内存中需要保存每个文件的元数据信息,那么计算机的内存就成了NameNode的瓶颈。于是,在Hadoop2.x引入了HDFSFederation(联邦)机制,它允许集群通过横向扩展的方式解决NameNode的瓶颈问题,即增加NameNode的数量。在Federation机制中,每个NameNode分别管理文件系统命名空间的一部分(称为命名空间卷)。各命名空间卷中分别存储了命名空间的元数据,以及在命名空间中的所有文件数据块的块池(blockpool)。同时,各命名空间卷是相互独立的,互不影响且互不通信。此外,集群中的所有DataNode都必须注册到各个NameNode。Federation机制并没有完全解决单点故障问题。虽然集群中存在多个NameNode和多个命名空间,但仍然存在单点故障问题。如果其中某个NameNode失效了,那么它所管理的文件将不能访问。HDFS的运行机制4.3.5HA机制造成集群不可用的原因主要有两个:NameNode节点宕机,导致整个集群不可用,直到重启NameNode节点之后方可使用;计划内的NameNode节点软件或硬件升级,导致集群在短时间内不可用;Hadoop2.x允许运行主(active)、备(standby)两个NameNode,从而可以在NameNode节点出现故障或维护时,快速启用备用状态的NameNode节点,以确保集群正常运行。HDFS的运行机制在双NameNode的Hadoop分布式集群中,分别处于active和standby状态的两个NameNode节点保证了HDFS的高可用性(HA)。activeNameNode负责HDFS集群的所有操作,而standbyNameNode作为备用。一旦activeNameNode发生故障,standbyNameNode可以快速切换并恢复故障。standbyNameNode的状态和activeNameNode始终保持同步(元数据信息保持一致),它们之间通过JournalNode守护进程进行通信。standbyNameNode同样保存了block的位置信息,并且DataNode在通过心跳机制发送block信息给activeNameNode的同时,也会将block信息发送给standbyNameNode。HDFS的运行机制4.3.6安全模式当NameNode启动时,集群会自动进入安全模式,在该模式下,NameNode会检查block的完整性。安全模式可以保证数据块的安全性,它是Hadoop集群的一种保护模式。此外,安全模式还是一种只读模式,在该模式下,用户既不能对命名空间进行任何修改,也不能创建、复制、追加和删除数据,但是可以执行查看目录及文件、下载文件等操作。HDFS的运行机制在正常情况下,当NameNode完成启动后(额外延迟30s)就会退出安全模式。但是,如果DataNode丢失的数据块超过设定的值,集群就会一直处于安全模式。不过,可以通过执行以下命令来强制退出安全模式:#hdfsdfsadmin-safemodeleave安全模式也可以手动进入,即执行以下命令:#hdfsdfsadmin-safemodeenter此外,执行以下命令可以查看安全模式的状态:#hdfsdfsadmin-safemodegetHDFS的运行机制4.3.7垃圾回收在HDFS集群中,没有实际利用价值的block副本可以认为是垃圾。在集群运行正常的情况下,如果一个文件被删除,那么与该文件相关的数据块自然也就成了垃圾。当用户或应用程序删除某个文件时,文件并不会立即从HDFS中删除,而是被移到了一个类似回收站的地方。当文件的删除时间超过一定期限,NameNode就会自动将该文件从命名空间中删除,这会使得该文件相关的数据块被释放。HDFS的运行机制当利用balancer通过复制操作重新调整数据块分布后,被调整的原始数据块也会成为垃圾,这种垃圾会被放进最近无效集(recentinvalidatesets)。在集群异常的情况下,如DataNode节点宕机一段时间后重启,由于NameNode会重新进行副本复制,这将导致在DataNode重启后副本数量高于指定值,那么该DataNode上的block就会因副本过期而失去价值,没有价值的数据等同于垃圾,这种垃圾会在DataNode向NameNode发送“心跳”时被处理。04HDFS的工作流程HDFS的工作流程在Hadoop集群中,客户端与NameNode节点之间的通信、NameNode与DataNode节点之间的通信、DataNode节点彼此之间的通信,都是基于RPC(远程过程调用)机制的。RPC是一个节点通过网络调用另一个节点的子程序或服务时应遵守的协议标准。使用它时,无需了解底层网络协议(如TCP、UDP等)。通过客户端、NameNode和DataNode的交互,可以实现HDFS文件的创建、复制、删除等操作。HDFS的工作流程可以分为启动流程、读流程、写流程和删除流程。HDFS的工作流程4.4.1启动流程在HDFS的启动过程中,需要启动NameNode和DataNode。NameNode启动时,会先进入安全模式。在安全模式下,NameNode需要处理两件事:(1)等待每个DataNode的“心跳”以获取所有block状态报告,并通过“心跳”来标记DataNode的存活状态。然后,NameNode将接收到的各DataNode发送的block状态报告与其元数据对比,以判断各DataNode的数据块是否正常。HDFS的工作流程(2)在内存中加载fsimage,然后通过将fsimage和edits合并生成一个新的fsimage,同时创建一个新的edits;合并完成后删除旧的fsimage和edits,并将新的fsimage和edits重命名。NameNode的启动流程DataNode启动时,会开启一个DataBlockScanner进程来扫描block,并且由该进程定期向各个NameNode发送“心跳”。HDFS的工作流程4.4.2读流程客户端读取HDFS文件时,首先会访问NameNode以确认是否可以读取该文件,待确认成功后,客户端获得该文件的block及DataNode信息,然后执行HDFS的读操作来获取数据。在读取数据结束时,需关闭文件输入流。HDFS数据的读流程HDFS的工作流程(1)客户端调用DistributedFileSystem对象的open()方法。此后,DistributedFileSystem将创建一个FSDataInputStream对象,并用HDFS的输入流对象DFSInputStream来实例化FSDataInputStream。此外,FSDataInputStream对象负责存储块信息和DataNode信息,以及后续的数据读取工作。(2)DistributedFileSystem向NameNode发送RPC请求,NameNode会检查读取文件是否存在,以及当前客户端是否具有读取该文件的权限。如果都没有问题,NameNode会视情况返回文件的部分或者全部block列表,而对于每个block,NameNode同样会返回该block副本的所有DataNode地址。与此同时,返回信息会根据与客户端的远近(非物理上的距离,而是延迟和负载大小)对DataNode节点进行排序。HDFS的工作流程(3)客户端调用DFSInputStream的read()方法,DFSInputStream会在之前的排序结果中选择一个最优的DataNode节点建立数据连接,并开始读取数据信息。(4)数据信息返回给客户端。当数据信息读取完毕后,DFSInputStream关闭与该DataNode的连接。(5)DFSInputStream连接下一个数据块的最优DataNode节点,读取数据并返回给客户端。当读完一批返回信息的block列表后,如果文件读取还没有结束,客户端会继续向NameNode请求获取下一批的block列表,直到所有数据都读取完毕。(6)当所有数据都读取完毕后,客户端会调用DFSInputStream的close()方法关闭文件输入流。HDFS的工作流程4.4.3写流程客户端将数据写入到HDFS文件时,首先需要向NameNode确认写数据的操作权限及文件是否存在(若存在,是否覆盖),待确认成功后,客户端在NameNode上创建写入文件的元数据信息,并返回可存储数据的block及DataNode信息,然后根据返回信息执行副本复制过程。在写入数据结束时,需关闭文件输出流。HDFS数据的写流程HDFS的工作流程(1)客户端调用DistributedFileSystem对象的create()方法。此后,DistributedFileSystem将创建一个FSDataOutputStream对象,并用HDFS的输出流对象DFSOutputStream来实例化FSDataOutputStream。(2)DistributedFileSystem向NameNode发送RPC请求,NameNode会根据要创建的文件是否已经存在和客户端是否有权限进行创建等执行检查。如果没有问题,NameNode会为文件创建一个记录,否则会让客户端抛出异常。(3)客户端调用DFSOutputStream的write()方法来写入数据,DFSOutputStream将收到的数据分成一个个block大小的数据包,并放到一个数据队列(dataqueue)中。DataStreamer可以从NameNode上获取存储数据的block信息及DataNode地址,然后DataStreamer将数据从队列中取出并开始写入DataNode。HDFS的工作流程(4)对于每个block,NameNode会分配与副本系数相等数量的DataNode来存储block副本。DFSOutputStream将数据写入第一个DataNode,然后该DataNode根据副本放置与机架感知策略将数据块复制并传输给其他DataNode,直到写入所有block副本。(5)每个DataNode完成数据存储后,会向客户端发送“确认包”(ackpacket)。客户端接受响应后,会将对应的数据包从数据队列中删除。不断执行步骤(3)~步骤(5),直到所有数据写完。(6)当所有数据都写入完毕后,客户端会调用DFSOutputStream的close()方法关闭文件输出流。(7)客户端调用complete()方法通知NameNode文件写入完成。HDFS的工作流程4.4.4删除流程1.使用HDFS命令删除文件与Linux系统的回收站设计类似,HDFS也为每个用户创建了一个回收站目录。例如,root用户的回收站目录为hdfs://hadoop0:9000/user/root/.Trash。当用户使用HDFS命令执行删除操作后,系统会将需要删除的文件移动到回收站的“/Current”文件夹(系统自动创建)下。例如,当root用户使用HDFS命令删除“/jqe/1.txt”文件时,文件会被移动到回收站中,具体位置为hdfs://hadoop0:9000/user/root/.Trash/Current/jqe/1.txt。与删除普通文件一样,用户也可以手动删除回收站中的文件。不过,HDFS会自动检测这个文件,如果是回收站中的文件,那么该文件就不会被移动到用户的回收站中,而是将其彻底删除。回收站中保存的文件是有时间限制的,如果用户在规定的时间周期内没有将文件从回收站中恢复出来,那么HDFS就会将该文件彻底删除(NameNode的后台线程emptier负责管理和监控回收站中的所有文件及目录)。之后,用户就再也无法找回那个删除的文件了。HDFS的工作流程HDFS的工作流程2.使用JavaAPI删除文件当用户使用JavaAPI删除HDFS文件时,在执行完delete()方法一段时间后,要删除文件的数据块才能被真正地删除。具体文件删除过程如下:(1)客户端向NameNode发送删除操作的RPC请求。(2)NameNode收到客户端的删除请求后,会检查要删除的文件是否存在,以及该客户端是否具有删除文件的权限。待确认后,再将删除操作更新到edits和fsimage文件。(3)NameNode更新结束后,会返回给客户端一个确认信号,表示删除成功。HDFS的工作流程当NameNode执行delete()方法时,它只记录操作和标记要删除文件的block,而不会主动通知block副本所在的DataNode去删除相应的block。当保存这些block副本的DataNode向NameNode发送“心跳”时,NameNode校验到DataNode的数据不一致,就会给DataNode下达指令,让其删除那些无效的block副本。05HDFS的基本操作HDFS的基本操作用户可以通过命令行接口(类似传统的Shell命令)操作HDFS的文件和目录,也可以通过JavaAPI访问并操作HDFS。HDFS的基本操作4.5.1HDFS命令行操作Hadoop分布式文件系统(HDFS)中的基本操作与其他文件系统类似,包括创建文件、移动文件、查看文件目录、读取文件等。下面介绍一组常用的HDFS命令行操作。(1)查看HDFS支持的所有命令及解析:#hdfsdfs-help(2)查看HDFS文件系统根目录下的目录和文件:#hdfsdfs-ls/HDFS的基本操作(3)在HDFS文件系统根目录下创建文件夹:#hdfsdfs-mkdir/mywork(4)将本地文件上传到HDFS文件系统中:#hdfsdfs-puta.txt/mywork(5)将HDFS文件系统中的文件下载到本地(即虚拟机系统中):#hdfsdfs-get/mywork/a.txt/root/DownloadsHDFS的基本操作(6)将HDFS文件系统中的文件复制到其他目录(必须存在):#hdfsdfs-cp/mywork/a.txt/mywork/t1/如果复制HDFS中的文件到另一个文件,则相当于将文件复制一份并重命名(源文件仍然存在),如:#hdfsdfs-cp/mywork/a.txt/mywork/b.txt(7)将HDFS文件系统中的文件移动到其他目录(必须存在):#hdfsdfs-mv/mywork/a.txt/input/如果移动HDFS中的文件到另一个文件,则相当于对文件进行重命名并保存(源文件已不存在),如:#hdfsdfs-mv/mywork/b.txt/mywork/c.txtHDFS的基本操作(8)查看HDFS文件系统中某个文件的内容:#hdfsdfs-cat/input/word.txt(9)删除HDFS文件系统中的文件或文件夹:#hdfsdfs-rm/input/a.txt#hdfsdfs-rm-r/mywork/t1(10)查看HDFS文件系统的可用空间信息:#hdfsdfs-df/“-r

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论