《大数据平台部署与运维》课件 单元4 HDFS分布式存储_第1页
《大数据平台部署与运维》课件 单元4 HDFS分布式存储_第2页
《大数据平台部署与运维》课件 单元4 HDFS分布式存储_第3页
《大数据平台部署与运维》课件 单元4 HDFS分布式存储_第4页
《大数据平台部署与运维》课件 单元4 HDFS分布式存储_第5页
已阅读5页,还剩95页未读 继续免费阅读

下载本文档

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

文档简介

《大数据平台部署与运维》单元4HDFS分布式存储任务4.1认识HDFS01HDFS原理与体系架构学习目标02HDFS读写文件流程03HDFS特点任务4.1认识HDFS【任务场景】经理:小张,我们的大数据平台已经上线了,你整理一下Hadoop的数据存储策略给大家分享一下吧。小张:HDFS会先将大文件分割成数据块,将数据块写入到数据节点中。HDFS默认将数据块存储三份来保障数据的安全性。我先整理一下这个内容。经理:它三副本的策略保证了我们的安全性。那HDFS的其他特性你也总结一下吧。小张:HDFS通过副本放置策略机架感知策略同时作用,提高数据存放的安全性,同时,HDFS尝试满足来自最接近读取器的副本的读取请求来提高数据访问的性能。这方面我统一总结一下吧。任务4.1认识HDFS【任务布置】了解HDFS原理及体系架构,理解HDFS数据存储的副本存放策略,理解HDFS文件读写的流程。任务4.1认识HDFS4.1.1HDFS原理与体系架构HadoopDistributedFileSystem,Hadoop分布式文件系统。它被设计成适合运行在通用硬件(commodityhardware)上的分布式文件系统。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS的体系架构决定它能够提供高吞吐量的数据访问,非常适合大规模数据集上的存储。HDFS总的设计思想是分而治之:将大文件、大批量文件,分布式存放在大量独立的服务器上,以便于采取分而治之的方式对海量数据进行运算分析。HDFS是一个主从体系结构,HDFS体系结构中包含三类组件,分别是NameNode、DataNode和SecondaryNameNode。名称描述NameNodeHDFS的守护进程,用来管理文件系统的命名空间和客户端对文件的访问。它负责记录文件是如何分割成数据块,以及数据块被存储到哪些DataNode中。DataNode负责存储和提取数据块,读写请求可能来自namenode,也可能直接来自客户端。数据节点周期性向Namenode汇报自己节点上所存储的数据块相关信息。SecondaryNameNode定期合并主Namenode的namespaceimage和editlog,避免editlog过大,通过创建检查点checkpoint来合并。它会维护一个合并后的namespaceimage副本,可用于在Namenode完全崩溃时恢复数据。任务4.1认识HDFS4.1.1HDFS原理与体系架构客户端通过同NameNode和DataNodes的交互访问文件系统,客户端联系NameNode以获取文件的元数据,而真正的文件I/O操作是直接和DataNode进行交互的。HDFS旨在可靠地跨大型集群中的机器存储非常大的文件。它将每个文件存储为一个块(Block)序列,数据块是HDFS上存储数据的基本单位。文件存储过程中,文件先分割为块序列,除最后一个块外的所有块大小都相同,而在append和hsync中增加了对变长块的支持后,用户可以在不将最后一个块填充到配置的块大小的情况下开始一个新块。HDFS通过复制文件的块以实现容错。应用程序可以指定文件的副本数。复制因子可以在文件创建时指定,以后可以更改。任务4.1认识HDFS4.1.1HDFS原理与体系架构

副本选择策略为了提升HDFS的可靠性,可以创建多分数据块副本,并将它们放置在服务器集群。为了最小化全局带宽消耗和读取延迟,HDFS尝试满足来自最接近读取器的副本的读取请求。如果在与读取器节点相同的机架上存在副本,则首选该副本来满足读取请求。如果HDFS集群跨越多个数据中心,那么驻留在本地数据中心的副本优先于任何远程副本。

数据块放置策略对于常见的情况,当复制因子为3时,HDFS的放置策略是如果写入者在数据节点上,则将一个副本放在本地机器上,否则在与写入者相同机架的随机数据节点上,另一个副本放在不同(远程)机架中的一个节点,以及同一远程机架中不同节点上的最后一个节点。此策略减少了机架间写入流量,这通常会提高写入性能。机架故障的几率远小于节点故障;此政策不影响数据可靠性和可用性保证。然而,它不会减少读取数据时使用的聚合网络带宽,因为一个块只放置在两个独特的机架中,而不是三个。使用此策略,块的副本不会均匀地分布在机架上。两个副本位于一个机架的不同节点上,其余副本位于其他机架之一的节点上。此策略可在不影响数据可靠性或读取性能的情况下提高写入性能。如果复制因子大于3,则随机确定第4个及以下副本的放置,同时保持每个机架的副本数量低于上限(基本上是(replicas-1)/racks+2)。任务4.1认识HDFS4.1.1HDFS原理与体系架构

机架感知策略副本的放置对于HDFS的可靠性和性能至关重要。优化副本放置将HDFS与大多数其他分布式文件系统区分开来。这是一项需要大量调整和经验的功能。机架感知副本放置策略的目的是提高数据可靠性、可用性和网络带宽利用率。大型HDFS实例通常分布在许多机架上的计算机集群上运行。不同机架中的两个节点之间的通信必须通过交换机。在大多数情况下,同一机架中机器之间的网络带宽大于不同机架中机器之间的网络带宽。NameNode通过HadoopRackAwareness中设定每个DataNode所属的机架ID。一个简单但非最优的策略是将副本放在唯一的机架上。这可以防止在整个机架出现故障时丢失数据,并允许在读取数据时使用多个机架的带宽。此策略在集群中均匀分布副本,从而可以轻松平衡组件故障时的负载。但是,此策略增加了写入成本,因为写入需要将块传输到多个机架。任务4.1认识HDFS4.1.2HDFS读写文件流程

NameNode做出有关块复制的所有决定。它会定期从集群中的每个DataNode接收Heartbeat和Blockreport。收到心跳意味着DataNode运行正常。Blockreport包含DataNode上所有块的列表。大文件被切割成小文件,使用分而治之的思想让很多服务器对同一个文件进行联合管理。每个小文件做冗余备份,并且分散存到不同的服务器,做到高可靠不丢失。任务4.1认识HDFS4.1.2HDFS读写文件流程1.HDFS数据写入流程任务4.1认识HDFS4.1.2HDFS读写文件流程1.HDFS数据读取流程任务4.1认识HDFS4.1.3HDFS特点HDFS特点(1)硬件故障是常态(2)流数据访问(3)大数据集(4)简单的一致性模型(5)移动计算比移动数据更划算(6)跨异构硬件和软件平台的可移植性任务4.1认识HDFS4.1.3HDFS特点

有些场景不适合使用HDFS来存储数据,比如如下场景:(1)低延时的数据访问

对延时要求在毫秒级别的应用,不适合采用HDFS。HDFS是为高吞吐数据传输设计的,因此可能牺牲延时,HBase更适合低延时的数据访问。(2)大量小文件

文件的元数据(如目录结构,文件block的节点列表,block-nodemapping)保存在NameNode的内存中,整个文件系统的文件数量会受限于NameNode的内存大小。

经验而言,一个文件/目录/文件块一般占有150字节的元数据内存空间。如果有100万个文件,每个文件占用1个文件块,则需要大约300M的内存。因此十亿级别的文件数量在现有商用机器上难以支持。(3)多方读写,需要任意修改文件

HDFS采用追加(append-only)的方式写入数据。不支持文件任意offset的修改。不支持多个写入器(writer)。任务总结本项目的主要任务是了掌握HDFS体系架构了解HDFS的块复制策略

了解HDFS的特点和不适用的场景通过本项目的学习,对HDFS的体系架构充分理解,并掌握HDFS块复制策的相关策略。北京汇智科教《大数据平台部署与运维》单元4HDFS分布式文件系统任务4.2

HDFS的文件系统操作01HDFS的文件系统操作学习目标任务4.2HDFS的文件系统操作【任务场景】经理:小张,我们的大数据平台上线后,需要将历史数据导入HDFS中。小张:HDFS支持shell命令行操作,它的操作方式类似传统文件操作系统的操作。同时,HDFS支持javaapi操作,这更有利于我们在业务系统中操作数据。我们可以先用HDFS的shell命令将历史数据导入集群。经理:那尽快制定任务把数据导入集群吧。小张:好的,我使用HDFS的shell命令,把例是数据导入到HDFS中。、任务4.2HDFS的文件系统操作【任务布置】使用HDFS命令行操作进行文件操作。将数据上传到HDFS中,并修改文件权限。将处理后的数据从HDFS中下载到本地文件系统。任务4.2HDFS的文件系统操作当启动Hadoop集群时,可以通过WebUI来查看HDFS以及Yarn的状态,用来方便的查看集群运行的状态。一些常见的默认端口端口如下:应用Hadoop2.X端口Hadoop3.X端口NameNodeHttpWebUI500709870DataNodeHttpWebUI500759864ResourceManagerHttpWebUI80808080NodeManagerHttpWebUI80428042注意:本书搭建的环境使用的版本是Hadoop3.X。任务4.2HDFS的文件系统操作4.2.HDFS的文件系统操作文件系统(FS)shell包括各种类似shell的命令,它们直接与Hadoop分布式文件系统(HDFS)以及Hadoop支持的其他文件系统交互,例如本地FS、WebHDFS、S3FS等。FSshell通过以下方式调用:hdfsdfs<argus> 所有FSshell命令都将路径URI作为参数。URI格式为scheme://authority/path。对于HDFS,scheme为hdfs,对于本地文件,scheme为file。常用操作如下:将单个或多个文件或目录从本地文件系统复制到目标文件系统 hadoopfs-appendToFile<localsrc>...<dst>输出文件内容 hadoopfs-cat[-ignoreCrc]URI[URI...]

注:命令中-ignoreCrc选项禁用checkshum验证。文件校验

hadoopfs-checksum[-v]URI

注:命令中-v参数显示文件中块的信息。任务4.2HDFS的文件系统操作4.2.HDFS的文件系统操作更改文件属组

hadoopfs-chgrp[-R]GROUPURI[URI...]

注:命令中-R选项将通过目录结构递归地进行更改。更改文件权限 hadoopfs-chown[-R][OWNER][:[GROUP]]URI[URI]

注:命令中-R选项将通过目录结构递归地进行更改。将文件从源地址复制到目标地址hadoopfs-cp[-f][-p|-p[topax]]URI[URI...]<dest>注:命令中包含如下选项:-f选项将覆盖目标文件或目录。-p选项将保留文件属性[topx](时间戳、所有权、权限、ACL、XAttr)。如果-p未指定arg,则保留时间戳、所有权、权限。如果指定了-pa,则保留权限也是因为ACL是权限的超集。任务4.2HDFS的文件系统操作4.2.HDFS的文件系统操作查看可用空间 hadoopfs-df[-h]URI[URI...]

注:命令中包含如下选项:-s选项将导致显示文件长度的汇总摘要,而不是单个文件。如果没有-s选项,计算是通过从给定路径深入1级来完成的。-h选项将以“人类可读”的方式格式化文件大小(例如64.0m而不是67108864)-v选项将列名显示为标题行。-x选项将从结果计算中排除快照。如果没有-x选项(默认),结果总是从所有INode计算,包括给定路径下的所有快照。将文件复制到本地文件系统 hadoopfs-get[-ignorecrc][-crc][-p][-f]<src><localdst>

注:命令中包含如下选项:-p:保留访问和修改时间、所有权和权限。(假设权限可以跨文件系统传播)-f:如果目标已经存在,则覆盖目标。-ignorercrc:对下载的文件跳过CRC检查。-crc:为下载的文件写入CRC校验和。任务4.2HDFS的文件系统操作4.2.HDFS的文件系统操作列出文件的统计信息 hadoopfs-ls[-C][-d][-h][-q][-R][-t][-S][-r][-u][-e]<args>

注:命令中包含如下选项:-C:只显示文件和目录的路径。-d:目录被列为普通文件。-h:以人类可读的方式格式化文件大小(例如64.0m而不是67108864)。-q:不可输出的字符使用“?”字符替代。-R:递归列出遇到的子目录。-t:按修改时间排序输出(最近的在前)。-S:按文件大小对输出进行排序。-r:颠倒排序顺序。-u:使用访问时间而不是修改时间进行显示和排序。-e:只显示文件和目录的纠删码策略。任务4.2HDFS的文件系统操作4.2.HDFS的文件系统操作

创建目录 hadoopfs-mkdir[-p]<paths>

注:命令中-p选项的沿路径创建父目录移动文件或目录 hadoopfs-mvURI[URI...]<dest>将文件从本地复制到目标文件系统 hadoopfs-put[-f][-p][-l][-d][-t<threadcount>][-|<localsrc1>..].<dst>

注:命令中包含如下选项-p:保留访问和修改时间、所有权和权限。-f:如果目标已经存在,则覆盖目标。-t<threadcount>:要使用的线程数,默认为1。上传包含1个以上文件的目录时很有用。-l:允许DataNode将文件延迟保存到磁盘,强制复制因子为1。此标志将导致持久性降低。小心使用。-d:跳过创建后缀为._COPYING_的临时文件。 任务4.2HDFS的文件系统操作4.2.HDFS的文件系统操作删除文件或目录 hadoopfs-rm[-f][-r|-R][-skipTrash][-safely]URI[URI...]

注:命令中包含如下选项:如果文件不存在,-f选项将不会显示错误消息。-R选项以递归方式删除目录及其下的任何内容。-r选项等效于-R。-skipTrash跳过文件垃圾箱,立即删除指定的文件。-safely选项在删除文件总数大于hadoop.shell.delete.limit.num.files的目录之前需要安全确认(在core-site.xml中,默认值:100)。它可以与-skipTrash一起使用以防止意外删除大目录。在确认之前递归遍历大目录以计算要删除的文件数时预计会出现延迟输出文本格式文件内容hadoopfs-text<src>任务4.2HDFS的文件系统操作4.2.HDFS的文件系统操作创建文件hadoopfs-touch[-a][-m][-tTIMESTAMP][-c]URI[URI...]注:该命令包含如下选项使用-a选项仅更改访问时间使用-m选项仅更改修改时间使用-t选项指定时间戳(格式为yyyyMMdd:HHmmss)而不是当前时间如果文件不存在,请使用-c选项不创建文件 任务4.2HDFS的文件系统操作【工作流程】1.查看HDFS的根目录的文件列表2.在HDFS中创建一个目录3.将本地文件上传到HDFS新建目录中4.查看HDFS中文件的内容5.修改HDFS新上传文件的权限6.在HDFS新上传的文件中追加字符串7.将HDFS上的文件下载到本地任务4.2HDFS的文件系统操作【操作步骤】1.查看HDFS的根目录的文件列表:通过”hdfsdfs-ls”命令查看文件系统的文件列表[root@master01~]#hdfsdfs-ls/2.在HDFS中创建一个目录在根目录下创建一个名为“dir01”的文件夹[root@master01~]#hdfsdfs-mkdir/dir013.将本地文件上传到HDFS新建目录中创建一个名为“test.txt”的文件,文件内容为“HelloHadoop”[root@master01~]#echo"HelloHadoop">test.txt将“test.txt”上传到HDFS的”/dir01”目录下。[root@master01~]#hdfsdfs-puttest.txt/dir01/[root@master01~]#hdfsdfs-ls/dir014.查看HDFS中文件的内容通过”hdfsdfs-cat”命令查看文件的内容[root@master01~]#hdfsdfs-cat/dir01/test.txt通过“hdfsdfs-text”命令查看文件的内容[root@master01~]#hdfsdfs-text/dir01/test.txt任务4.2HDFS的文件系统操作【操作步骤】5.修改HDFS新上传文件的权限修改HDFS上“/dir01/test.txt”文件的权限为777[root@master01~]#hdfsdfs-chmod777/dir01/test.txt6.在HDFS新上传的文件中追加字符串通过“hdfsdfs-appendToFile”命令向文件追加内容。“-”参数是将标准输入(一般指键盘输入)追加到文件中,并通过“Ctrl-c”结束输入。[root@master01~]#hdfsdfs-appendToFile-/dir01/test.txt7.将HDFS上的文件下载到本地将HDFS中的“/dir01/test.txt”文件下载到本地并命名为test_new.txt[root@master01~]#hdfsdfs-get/dir01/test.txt./test_new.txt任务总结本项目的主要任务是了解HDFS命令行操作通过本项目的学习,了解如何通过命令行操作HDFS中的文件和文件夹,包括上传、下载、追加内容、设置权限等。北京汇智科教《大数据平台部署与运维》单元4HDFS分布式文件系统任务4.2

HDFS的系统管理操作01HDFS安全模式学习目标02HDFS扩容操作03HDFS数据平衡04HDFS存储策略05HDFS快照任务4.3HDFS的系统管理操作【任务场景】经理:小张,你梳理一下HDFS的系统管理操作,制定一下我们运维团队的操作规范?小张:好的,我们随着数据量的增加,会出现扩容,以及系统维护的一系列操作。我整理出来,形成操作标准。任务4.3HDFS的系统管理操作【任务布置】了解HDFS的安全模式操作、扩容操作、数据平衡操作以及快照操作的使用场景和具体操作方法。任务4.3HDFS的系统管理操作4.3.1HDFS安全模式在启动期间,NameNode从fsimage和edits日志文件加载文件系统状态。然后,它等待DataNode注册与发送BlockReport,验证集群中的数据块副本是否恢复正常,等待过程中它不会过早地开始复制块,以免发生数据错误。在此期间,NameNode保持Safemode状态。NameNode的安全模式本质上是HDFS集群的只读模式,它不允许对文件系统或块进行任何修改。通常,在DataNode报告大多数文件系统块可用之后,NameNode会自动离开Safemode。当需要对文件系统进行生产性维护,如数据迁移、备份等操作时,需人工将HDFS设置为安全模式。进入安全模式后,因文件系统对客户端是只读状态,用户只能从文件系统获取数据,但文件的修改操作,包括写、删除或重命名均会失败。HDFS安全模式常用的操作命令如下:

查看是否处于安全模式hdfsdfsadmin-safemodeget等待退出安全模式hdfsdfsadmin-safemodewait手动进入安全模式hdfsdfsadmin-safemodeenter手动离开安全模式hdfsdfsadmin-safemodeleave任务4.3HDFS的系统管理操作4.3.1HDFS安全模式

与安全模式相关的属性配置项配置内容说明dfs.replication.min1最小副本级别dfs.safemode.threshold.pct0.999在namenode退出安全模式之前,系统中满足最小副本级别(由dfs.replication.min定义)的块的比例。dfs.safemode.extension30000满足最小副本条件之后,namenode还需处于安全模式的时间(以毫秒为单位)任务4.3HDFS的系统管理操作4.3.2扩容操作

随着公司业务的增长,数据量越来越大,原有的数据节点的容量已经不能满足存储数据的需求,需要在原有集群基础上动态添加新的数据节点。动态增加新节点的步骤如下:1.准备新节点,安装操作系统并配置主机名、ssh免密码登录、关闭防火墙、配置时间同步,特别注意的是,需要在/etc/hosts中添加新节点的解析。2.在hdfs配置文件的worker中添加新节点的信息并分发到所有节点。3.在新增节点上启动DataNode和NodeManager。启动DataNode$HADOOP_HOME/sbin/hadoop-daemon.shstartdatanode启动NodeManager$HADOOP_HOME/sbin/hadoop-daemon.shstartnodemanager任务4.3HDFS的系统管理操作4.3.3数据平衡

HDFS数据并不总是均匀地分布在在DataNode上。HDFS为管理员提供了一个工具,可以在DataNode上分析数据块放置的位置并重新平衡数据。导致hdfs数据不平衡的原因有很多,比如:向集群中添加新的数据节点。从集群中删除节点。数据节点之间的磁盘大小不一致。任务4.3HDFS的系统管理操作4.3.3数据平衡hdfsbalancer用法如下:hdfsbalancer[-policy<policy>][-threshold<threshold>][-exclude[-f<hosts-file>|<comma-separatedlistofhosts>]][-include[-f<hosts-file>|<comma-separatedlistofhosts>]][-source[-f<hosts-file>|<comma-separatedlistofhosts>]][-blockpools<comma-separatedlistofblockpoolids>][-idleiterations<idleiterations>][-runDuringUpgrade][-asService]如果将Balancer作为长时间运行的服务运行,需使用-asService参数和daemon-mode启动Balancer。可以使用以下命令执行此操作:hdfs--daemonstartbalancer-asService,或者仅使用带有参数-asService的sbin/start-balancer.sh脚本。任务4.3HDFS的系统管理操作4.3.4HDFS存储策略存储策略是在性能和成本之间妥协的一个技术产物。它通过配置DISK、SSD、RAM_SSD和ARCHIVE不同的存储类型来存放不同性能要求的数据,来提高HDFS的性价比。目前HDFS支持的存储类型如下:1.DISK:普通磁盘,一般指机械硬盘,是最常用的存储类型。2.SSD:固态硬盘,它的性能是机械硬盘的数十倍甚至上百倍。3.RAM_DISK:内存固态硬盘,它的性能非常高,一般提供给对性能要求非常严苛的场景使用。4.ARCHIVE-归档/压缩,不是实际的磁盘类型,而是数据被压缩存储,它一般是低成本、低性能、高密度的存储空间的节点组成,用来存储归档或备份数据,因它的计算性能差,一般不执行计算任务。HDFS可以根据存储策略要求,可以将数据从SSD迁移到DISK或者ARCHIVE中,用户也可以选择在SSD或者RAM_SSD中存储数据,以便提高性能。存储策略允许将不同的文件存储到不同的存储类型上,并且允许将数据块的不同副本存储到不同存储类型上。任务4.3HDFS的系统管理操作4.3.4HDFS存储策略目前HDFS支持的存储策略包含如下:Hot:用于存储和计算,一般满足大部分场景。数据的所有副本都放置在DISK存储类型中。Cold:用于数据存档。数据不再使用,进行归档。此类数据的所有副本放在ARCHIVE存储类型中。Warm:一般提供给性能要求不高的场景使用。数据的部分副本放置在DISK存储类型中,其它的在ARCHIVE存储类型中。All_SSD:一般提供给性能要求高的场景使用。数据的所有副本放置在SSD存储类型中。One_SSD:一般提供给性能要求高的场景使用,但需要考虑成本。数据的一个副本放置在SSD中,其它放置的在DISK存储类型中.Lazy_Persist:一般应用在性能要求极为苛刻的场景中使用,用于在内存中写入具有单个副本的块。数据的副本首先写入RAM_DISK,然后延迟保存在DISK中。Lazy_Persist策略仅对单个副本块有用。对于具有多个副本的块,所有副本都将写入DISK,因为仅将其中一个副本写入RAM_DISK不会提高整体性能。Provided:在HDFS之外存储数据。数据的一个副本存储在HDFS之外,其它副本存储在DISK中。任务4.3HDFS的系统管理操作4.3.4HDFS存储策略在使用存储策略前,需要先完成存储配置,相关示例如下:

<property><name>dfs.storage.policy.enabled</name><value>true</value><description>启动存储策略特性</description></property><property><name>dfs.data.dir</name><value>[DISK]/hadoop/datanode/disk01,[DISK]/hadoop/datanode/data02,[SSD]/hadoop/datanode/ssd01,[SSD]/hadoop/datanode/ssd02</value><description>datanode上数据块的物理存储位置</description></property>任务4.3HDFS的系统管理操作4.3.4HDFS快照

HDFS快照是文件系统的只读时间点副本。可以在文件系统的子树或整个文件系统上创建快照。快照的一些常见用例是数据备份、防止用户错误和灾难恢复的场景。HDFS的快照操作的相关命令如下:

允许目录创建快照hdfsdfsadmin-allowSnapshot<path>禁止目录创建快照hdfsdfsadmin-disallowSnapshot<path>创建快照hdfsdfs-createSnapshot<path>[<snapshotName>]删除快照hdfsdfs-deleteSnapshot<path><snapshotName>命名快照hdfsdfs-renameSnapshot<path><oldName><newName>查看快照差异hdfssnapshotDiff<path><fromSnapshot><toSnapshot>

任务4.3HDFS的系统管理操作【工作流程】1.Hadoop安全模式操作2.向Hadoop集群增加worker节点3.HDFS快照操作任务4.3HDFS的系统管理操作【操作步骤】1.Hadoop安全模式操作:

进入安全模式[root@master01~]#hdfsdfsadmin-safemodegetSafemodeisOFF[root@master01~]#hdfsdfsadmin-safemodeenterSafemodeisON[root@master01~]#hdfsdfsadmin-safemodegetSafemodeisON验证是否可以上传文件,在安全模式下HDFS无法写入数据。[root@master01~]#hdfsdfs-puttest.txt/put:Cannotcreatefile/test.txt._COPYING_.Namenodeisinsafemode.验证文件是否下载,在安全模式下HDFS允许读取数据[root@master01~]#hdfsdfs-get/dir01/test.txt./test_new.txt退出安全模式[root@master01~]#hdfsdfsadmin-safemodeleaveSafemodeisOFF任务4.3HDFS的系统管理操作【操作步骤】2.向Hadoop集群增加worker节点:(1)操作系统准备新增节点为worker03节点,对worker03节点准备操作系统。准备过程请参考《任务3.1搭建Hadoop集群》,具体包含如下操作:操作系统安装配置IP地址配置SSH免密码登录配置hostname禁用selinux关闭防火墙配置时间同步配置JAVA环境任务4.3HDFS的系统管理操作【操作步骤】2.向Hadoop集群增加worker节点:(2)修改worker节点配置修改worker配置文件增加“worker03”节点,在master01节点执行,后续分发到其他节点。

(3)将Hadoop安装包同步到其他节点,在master01节点执行。[root@master01~]#yuminstall-yrsync[root@master01~]#rsync-a/opt/hadoopworker01:/opt/[root@master01~]#rsync-a/opt/hadoopworker02:/opt/[root@master01~]#rsync-a/opt/hadoopworker03:/opt/(4)启动datanode和nodemanager在新增节点worker03上启动datanode和nodemanager[root@worker03~]#/opt/hadoop/sbin/yarn-daemon.shstartdatanode[root@worker03~]#/opt/hadoop/sbin/yarn-daemon.shstartnodemanager[root@master01~]#vim/opt/hadoop/etc/hadoop/workersworker01worker02worker03任务4.3HDFS的系统管理操作【操作步骤】2.向Hadoop集群增加worker节点:(5)检查启动状态在master01节点检查hdfs状态,worker03上的DataNode已启动[root@master01~]#hdfsdfsadmin-report...Name:17:9866(worker03)Hostname:worker03DecommissionStatus:Normal检查NodeManager是否启动[root@master01~]#yarnnode-listTotalNodes:3Node-Id Node-State Node-Http-Address Number-of-Running-Containersworker01:32848 RUNNING worker01:80420worker03:44527 RUNNING worker03:80420worker02:34417 RUNNING worker02:80420任务4.3HDFS的系统管理操作【操作步骤】3.HDFS快照操作:

允许对HDFS的“/dir01”目录执行快照[root@master01~]#hdfsdfsadmin-allowSnapshot/dir01对HDFS的“/dir01”目录执行快照,命名为“s1”[root@master01~]#hdfsdfs-createSnapshot/dir01s1在HDFS的“/dir01”目录中创建文件[root@master01~]#hdfsdfs-touchz/dir01/test1.txt对HDFS的“dir01”目录执行快照,命名为“s2”[root@master01~]#hdfsdfs-createSnapshot/dir01s2比较两个快照“s1”和“s2”的差异[root@master01~]#hdfssnapshotDiff/dir01s1s2Differencebetweensnapshots1andsnapshots2underdirectory/dir01:M .+ ./test1.txt删除快照[root@master01~]#hdfsdfs-deleteSnapshot/dir01s1[root@master01~]#hdfsdfs-deleteSnapshot/dir01s2任务总结本项目的主要任务是了解HDFS安全模式的操作了解HDFS扩容操作了解HDFS数据平衡操作了解HDFS快照操作通过本项目的学习,掌握HDFS的系统管理常用操作。北京汇智科教《大数据平台部署与运维》单元4HDFS分布式存储任务4.4本地开发环境部署01理解JDK、Maven的概念与作用02能够正确完成本地开发环境安装部署学习目标任务4.4本地开发环境部署【任务场景】经理:小张,后面我们要使用Java开发应用了,你了解Java开发环境吗?小张:Java运行依赖于JDK,需要在本地安装JDK,开发项目还要考虑各种jar包的管理,一般会用Maven来做jar包管理。经理:先在你自己的Windows电脑上准备一下开发环境吧,把Java编译环境JDK、Jar包管理工具Maven安装好。开发工具推荐使用目前最常用的IntelliJIDEA,功能强大便捷,社区版免费使用,可以满足我们日常使用。小张:好的。任务4.4本地开发环境部署【任务布置】本任务要求理解JDK、Maven概念与作用,要求学生在Windows本机安装配置JDK与Maven,安装IDEA并完成初始化配置。任务4.4本地开发环境部署4.4.1认识JDKJDK:JavaDevelopmentKit是Java的标准开发工具包(普通用户只需要安装JRE来运行Java程序。而程序开发者必须安装JDK来编译、调试程序)。它提供了编译、运行Java程序所需的各种工具和资源,包括Java编译器、Java运行环境JRE,以及常用的Java基础类库等,是整个JAVA的核心。任务4.4本地开发环境部署JRE:Javaruntimeenvironment是运行基于Java语言编写的程序所不可缺少的运行环境,用于解释执行Java的字节码文件。JVM:JavaVirtualMachine是Java的虚拟机,是JRE的一部分。它是整个java实现跨平台的最核心的部分,负责解释执行字节码文件,是可运行java字节码文件的虚拟计算机。所有平台的上的JVM向编译器提供相同的接口,而编译器只需要面向虚拟机,生成虚拟机能识别的代码,然后由虚拟机来解释执行。因为JVM会将字节码文件解析成所有计算机都可以理解的机器码,从而在不同的平台上运行。任务4.4本地开发环境部署4.4.2认识MavenMaven是一个Jar包管理工具,也是构建工具,能把项目抽象成POM(projectobjectmodel),Maven使用POM对项目进行构建、打包、文档化等操作。最重要的是解决了项目需要类库的依赖管理,简化了项目开发环境。Maven采用了不同方式对项目构建进行抽象,比如源码位置总是在src/main/java,配置文件则在src/main/resources中,编译好的类总是放在项目的target目录下。任务4.4本地开发环境部署总的来说,Maven实现了以下目标:1.使构建项目变得很容易,Maven屏蔽了构建的复杂过程。比如,你只需要输入mavenpackage就可以构建整个Java项目。2.统一了构建项目的方式,不同人、不同公司的项目都有同样的描述项目和构建项目的方式,Maven通过pom.xml来描述项目,并提供一系列插件来构建项目。3.提出了一套开发项目的最佳实践,而不用每个项目都有不同结构和构建方式,比如源代码在src/main/java中,测试代码在src/test/java中,项目需要的配置文件则放在src/main/resources中。4.包含不同环境项目的构建方式5.解决了类库依赖的问题,只需要声明使用的类库,Maven会自动从仓库下载依赖的jar包,并能协助你管理jar包之间的冲突。任务4.4本地开发环境部署4.4.2认识IDEAIntelliJIDEA是由JetBrains公司开发的Java编程语言的开发集成环境。IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、J2EE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、创新的GUI设计等方面的功能可以说是超常的。IDEA优势:1.强大的整合能力:比如Git、Maven、Spring等支持;2.提示功能的快速、便捷;3.提示功能的范围比较广;4.好用的快捷键和代码模板;5.精准搜索。任务4.4本地开发环境部署【工作流程】安装JDK安装Maven安装IDEA创建Maven项目任务4.4本地开发环境部署【操作步骤】1.安装JDK进入Oracle官网下载Windows版JDK安装包,Hadoopv3开始只支持JDK1.8以上的版本,这里我们选择JDK1.8版本。任务4.4本地开发环境部署打开安装包后按照步骤进行安装,新版JDK会自动配置环境变量,无需手动添加环境变量。打开Windows自带cmd,执行命令查看是否安装成功:java–version若出现下面JDK信息,则代表安装成功。任务4.4本地开发环境部署2.安装Maven运行Maven依赖于Java环境,请确保已完成前面的JDK安装步骤。进入Maven官网下载Maven安装包,选择apache-maven-版本号-bin.zip进行下载。任务4.4本地开发环境部署解压Maven压缩包,解压后将文件夹重命名为maven-3.8.3,版本号与下载的Maven版本号保持一致。桌面「此电脑」图标右击>属性>高级系统设置>高级>环境变量,进入环境变量界面。任务4.4本地开发环境部署在系统变量中新建MAVEN_HOME的环境变量,变量值为刚才解压的目录。将MAVEN_HOME配置到系统环境变量path中,双击path变量,新建,输入%MAVEN_HOME%\bin后点击确定即可。环境变量path的作用:提供Windows命令行中指令的可执行文件路径,当我们在命令行中键入指令时,根据环境变量中的path值,找到对应的指令可执行文件进行执行。简单来说就是配置在path中的目录参数,在命令行中的任何目录下都可以使用。任务4.4本地开发环境部署打开Windows自带cmd,执行命令查看是否安装成功:mvn-version若出现下面Maven信息,则代表安装成功。接下来需要配置本地Maven仓库目录,本地仓库相当于是远程仓库的一个缓存,当项目需要下载jar包的时候首先去本地Maven仓库去找,如果找到则从本地Maven仓库下载,找不到则去远程仓库去找。默认的本地仓库路径为${user.home}/.m2/repository,因为项目的依赖会从远程仓库下载后会缓存到本地仓库,如果使用默认的本地仓库路径则会使C盘越来越大。所以我们需要修改配置,将本地仓库指定到空间较大的目录。在一个磁盘中创建一个文件夹,取名为repository。具体路径依据个人情况而定,建议放到非C盘,且容量较大的磁盘。任务4.4本地开发环境部署打开Maven安装目录,进入conf目录,打开settings.xml进行编辑。找到localRepository配置,修改为刚才创建的目录。注意要将此项配置移出注释。任务4.4本地开发环境部署保存配置文件后在Windows自带cmd执行命令,检验是否设置成功:mvnhelp:system打开刚才创建的文件夹,查看是否有文件生成,有文件生成代表修改已生效。接下来需要修改Maven远程仓库源,Maven默认远程仓库服务器在国外,速度不稳定,可以替换为阿里源,提高开发效率。任务4.4本地开发环境部署再次打开settings.xml进行编辑,加入阿里源。<mirror>

<id>alimaven</id>

<mirrorOf>central</mirrorOf>

<name>aliyunmaven</name>

<url>/nexus/content/repositories/central/</url></mirror>

任务4.4本地开发环境部署3.安装社区版IDEA本教材后续任务都将基于IntelliJIDEA(下文简称IDEA)进行开发,现在我们来安装IDEA,社区版IDEA可以满足日常开发需求,进入Jetbrains官网下载社区版IDEA。下载完成后按照步骤进行,即可完成安装。Jetbrains官网也提供了IDEA教育版下载链接,教育版需注册Jetbrains账户,并提供相关材料,认证通过后可使用IDEA教育版进行开发,具体步骤请参考Jetbrains官网。任务4.4本地开发环境部署初始化配置,修改常用配置项。(1)文件字符编码任务4.4本地开发环境部署(2)配置Maven任务4.4本地开发环境部署4.使用IDEA创建Hadoop项目打开IDEA,新建Maven项目,项目名为HDFS-helloworld。任务4.4本地开发环境部署展开项目,修改pom.xml,加入Hadoop依赖。pom.xml文件全内容为以下所示<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion>

<groupId>org.example</groupId><artifactId>HDFS-helloworld</artifactId><version>1.0-SNAPSHOT</version>

<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>RELEASE</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>3.1.1</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.1.1</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>3.1.1</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.8.2</version></dependency></dependencies>

<properties><piler.source>8</piler.source><piler.target>8</piler.target></properties>

</project>

任务4.4本地开发环境部署点击图标加载依赖包。依赖下载完成后创建项目整个流程至此完成。任务总结掌握JDK、Maven概念与作用能够成功安装配置JDK、Maven、IDEA社区版北京汇智科教《大数据平台部署与运维》单元4HDFS分布式存储任务4.5HDFS的JavaAPI操作01掌握HDFS操作常用的JavaAPI02能够应用JavaAPI操作HDFS学习目标任务4.5HDFS的JavaAPI操作【任务场景】经理:现在我们已经把环境搭建好了,接下来创建一个项目,熟悉一下HDFSJavaAPI操作吧。小张:嗯,那我写个demo吧,那我们数据怎么办呢?经理:可以模拟一下咱们电商网站的数据。小张:好的,经理。任务4.5HDFS的JavaAPI操作任务布置:本任务目的在于学习HDFS的JavaAPI操作,在安装Hadoop基础环境之上使用IDEA工具,熟悉并掌握目录与文件的创建和删除操作,掌握文件上传与下载操作、掌握数据流与文件读写操作,掌握目录与文件的重命名操作。知识点1HDFS的常用JavaAPIHadoop是由Java语言编写的,其中Hadoop3.1.0系列是JDK1.8编写,我们可以通过JavaAPI调用HDFS的所有交互操作接口。Hadoop3.1.0javaAPI官方地址:/docs/r3.1.0/api/index.html知识点1HDFS的常用JavaAPI通过FileSystem访问远程集群一般情况下需要给定配置信息,Hadoop通过自定义的Configuration类来给定hadoop相关的连接信息。Configuration采用延迟加载的模式来加载配置信息,加载顺序是按照代码顺序加载,但是如果在代码中强制指定的话,那么会覆盖文件中的加载。//创建配置器Configurationconf=

new

Configuration();conf.set("",

"hdfs://localhost:9000");conf.set("mapred.jop.tracker",

"localhost:9001");Configurationconf=

new

Configuration();

conf.addResource("core-default.xml");

conf.addResource("core-site.xml");Configuration类方法说明voidset(Stringname,Stringvalue)设置属性,name是属性名称,value是属性值voidaddResource(Stringname)添加一个配置资源知识点1HDFS的常用JavaAPIJavaAPI调用HDFS的所有交互操作接口中最常用的类是FileSystem类,包含了hdfsdfs相关操作的实现。如下是FlieSystem类的声明:

FileSystem类位于org.apache.hadoop.fs包中,从声明中我们能看到,它是一个抽象类,其次父类是Configured,实现了Closeable接口。Closeable接口是可以关闭的数据源或目标。需要实现close方法,可释放对象保存的资源(如打开文件)。知识点1HDFS的常用JavaAPIHadoop提供的操作HDFS的api接口是以FileSystem为基础的,在该类中提供一系列操作文件的方法,比如:文件上传copyFromLocalFile方法,创建文件create方法,删除文件delete方法等。该类的包名为org.apache.hadoop.fs.FileSystem。该类主要的子类有:DistributedFileSystem,WebHdfsFileSystem等。方法说明staticFileSystemget(Configutationconf)获取FileSystem实例,静态方法staticFileSystemget(URIuri,Configutationconf)获取FileSystem实例,静态方法staticFileSystemget(URIuri,Configutationconf,Stringuser)获取FileSystem实例,静态方法,多个用户参数FSDataInputStreamopen(Pathf)在Path位置打开一个文件输入流voidcopyFromLocalFile(Pathsrc,Pathdst)将本地文件拷贝到文件系统voidcopyToLocalFile(Pathsrc,Pathdst)讲文件系统上的文件复制到本地booleanexists(Pathf)检查文件或目录是否存在booleanmkdirs(Pathf)新建所有目录(包括父目录),f是完整路径abstractbooleanmkdirs(Pathf,FsPermissionp)在文件系统上创建指定文件,包括上级目录FSOutputStreamcreate(Pathf)创建指定路径的文件,返回一个输出流booleandelete(Pathf,Booleanrecursive)永久删除指定的文件或目录,如果是空目录,recursive直可以忽略任务4.5HDFS的JavaAPI操作【工作流程】HDFS的JavaAPI操作相关流程包括:1.基础环境准备2.目录与文件的创建、删除操作3.文件上传与下载操作任务4.5HDFS的JavaAPI操作【操作步骤】1.基础环境准备HDFS的JavaAPI相关操作依赖的基础环境,包括需要安装好Hadoop以及开发工具等,具体软件环境如下所示:前面我们已经介绍了Windows的IDEA的安装操作,该任务我们介绍一下Linux的IDEA操作,Linux版本的IDEA解压即用非常方便,要求我们的Linux系统是桌面版。编号软件基础版本号1操作系统CentOS7桌面版,主机名node12Java编译器JDK1.83HadoopHadoop3.1.04IDEA推荐新版本任务4.5HDFS的JavaAPI操作(1)IDEA的Linux环境安装首先我们登陆IDEA官网下载入口:/idea/download/,选择Linux版本下载最新安装包。

将下载的安装包上传到服务器,然后解压,相关命令如下:[root@master01Downloads]#lsideaIC-2021.2.3.tar.gz[root@master01Downloads]#tarzxvfideaIC-2021.2.3.tar.gz-C/usr/local/

启动IDEA[root@master01Downloads]#cd/usr/local/[root@master01local]#mvidea-IC-212.5457.46idea[root@master01local]#cdidea/bin/[root@master01bin]#./idea.sh任务4.5HDFS的JavaAPI操作(2)导入Maven依赖 首先我们创建一个Maven项目,项目名称我们可以命名为HDFSDemo,然后打开pom.xml文件,导入Maven依赖项:<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>RELEASE</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>3.1.1</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.1.1</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>3.1.1</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.8.2</version></dependency></dependencies>任务4.5HDFS的JavaAPI操作2.目录与文件的创建、删除操作//创建方法getFielSystem,实现获取文件系统对象

publicstaticFileSystemgetFileSystem()throwsIOException,URISyntaxException{Configurationconf=newConfiguration();//创建conf对象

URIuri=newURI("hdfs://11:9000");//创建uri对象

finalFileSystemfileSystem=FileSystem.get(uri,conf);//创建fileSystem对象

returnfileSystem;}

//此方法实现目录遍历

publicstaticvoidlist(Stringdir)throwsException{FileSystemfileSystem=getFileSystem();FileStatus[]listStatus=fileSystem.listStatus(newPath(dir));for(FileStatusfileStatus:listStatus){booleanisDir=fileStatus.isDirectory();Stringname=fileStatus.getPath().toString();System.out.println(isDir+""+name);}}

publicstaticvoidmkdir(Stringpath)throwsException{finalFileSystemfileSystem=getFileSystem();fileSystem.mkdirs(newPa

温馨提示

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

评论

0/150

提交评论