《大数据技术实战案例教程》课件实验指导书-实验1部署全分布模式Hadoop集群_第1页
《大数据技术实战案例教程》课件实验指导书-实验1部署全分布模式Hadoop集群_第2页
《大数据技术实战案例教程》课件实验指导书-实验1部署全分布模式Hadoop集群_第3页
《大数据技术实战案例教程》课件实验指导书-实验1部署全分布模式Hadoop集群_第4页
《大数据技术实战案例教程》课件实验指导书-实验1部署全分布模式Hadoop集群_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

《大数据技术实战案例教程》实验指导书实验1部署全分布模式Hadoop集群编写者:徐鲁辉实验1部署全分布模式Hadoop集群1.1实验目的1.熟练掌握Linux基本命令。2.掌握静态IP地址的配置、主机名和域名映射的修改。3.掌握Linux环境下Java的安装、环境变量的配置、Java基本命令的使用。4.理解为何需要配置SSH免密登录,掌握Linux环境下SSH的安装、免密登录的配置。5.熟练掌握在Linux环境下部署全分布模式Hadoop集群。1.2实验环境本实验所需的软硬件环境包括PC、VMwareWorkstationPro、CentOS安装包、OracleJDK安装包、Hadoop安装包。1.3实验内容1.规划部署。2.准备机器。3.准备软件环境:配置静态IP;修改主机名;编辑域名映射;安装和配置Java;安装和配置SSH免密登录。4.获取和安装Hadoop。5.配置全分布模式Hadoop集群。6.关闭防火墙。7.格式化文件系统。8.启动和验证Hadoop。9.关闭Hadoop。1.4实验原理1.4.1Linux基本命令Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议,它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux操作系统诞生于1991年10月5日。Linux存在着许多不同的版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯用Linux来形容整个基于Linux内核且使用GNU工程各种工具和数据库的操作系统。此处将介绍实验中涉及到的一些Linux操作系统的基本命令。1)查看当前目录pwd命令用于显示当前目录,效果如下所示。[xuluhui@localhost~]$pwd/home/xuluhui2)切换目录cd命令用来切换目录,效果如下所示。[xuluhui@localhost~]$cd/usr/local[xuluhui@localhostlocal]$pwd/usr/local3)罗列文件ls命令用于查看文件与目录,效果如下所示。[xuluhui@localhost~]$lsDesktopDocumentsDownloadsMusicPicturesPublicTemplatesVideos4)创建目录mkdir命令用于创建目录,效果如下所示。[xuluhui@localhost~]$mkdirTestData[xuluhui@localhost~]$lsDesktopDownloadsPicturesTemplatesVideosDocumentsMusicPublicTestData5)拷贝文件或目录cp命令用于拷贝文件,若拷贝的对象为目录,则需要使用-r参数,效果如下所示。[xuluhui@localhost~]$cp-rTestDataTestData2[xuluhui@localhost~]$lsDesktopDownloadsPicturesTemplatesTestData2DocumentsMusicPublicTestDataVideos6)移动或重命名文件或目录mv命令用于移动文件,在实际使用中,也常用于重命名文件或目录,效果如下所示。[xuluhui@localhost~]$mvTestData2TestDataxlh[xuluhui@localhost~]$lsDesktopDownloadsPicturesTemplatesTestDataxlhDocumentsMusicPublicTestDataVideos7)删除文件或目录rm命令用于删除文件,若删除的对象为目录,则需要使用-r参数,效果如下所示。[xuluhui@localhost~]$rm-rfTestDataxlh[xuluhui@localhost~]$lsDesktopDownloadsPicturesTemplatesVideosDocumentsMusicPublicTestData8)查看进程ps命令用于显示当前运行中进程的相关信息,效果如下所示。[xuluhui@localhost~]$psPIDTTYTIMECMD69780pts/000:00:00bash71680pts/000:00:00ps9)压缩与解压文件tar命令用于文件压缩与解压,参数中的c表示压缩,x表示解压缩,效果如下所示。[root@localhostlocal]#tar-zxvf/home/xuluhui/Downloads/hadoop-2.9.2.tar.gz10)查看文件内容cat命令用于查看文件内容,效果如下所示。[xuluhui@localhost~]#cat/usr/local/hadoop-2.9.2/etc/hadoop/core-site.xml11)查看机器IP配置ipaddress命令用于查看机器IP配置,效果如下所示。[xuluhui@localhost~]$ipaddress1:lo:<LOOPBACK,UP,LOWER_UP>mtu65536qdiscnoqueuestateUNKNOWNgroupdefaultqlen1000link/loopback00:00:00:00:00:00brd00:00:00:00:00:00inet/8scopehostlovalid_lftforeverpreferred_lftforeverinet6::1/128scopehostvalid_lftforeverpreferred_lftforever2:ens33:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdiscpfifo_faststateUPgroupdefaultqlen1000link/ether00:0c:29:6d:5d:c9brdff:ff:ff:ff:ff:ffinet28/24brd55scopeglobalnoprefixroutedynamicens33valid_lft1795secpreferred_lft1795secinet6fe80::6bb8:6e80:d029:10f2/64scopelinknoprefixroutevalid_lftforeverpreferred_lftforever3:virbr0:<NO-CARRIER,BROADCAST,MULTICAST,UP>mtu1500qdiscnoqueuestateDOWNgroupdefaultqlen1000link/ether52:54:00:0b:74:1bbrdff:ff:ff:ff:ff:ffinet/24brd55scopeglobalvirbr0valid_lftforeverpreferred_lftforever4:virbr0-nic:<BROADCAST,MULTICAST>mtu1500qdiscpfifo_fastmastervirbr0stateDOWNgroupdefaultqlen1000link/ether52:54:00:0b:74:1bbrdff:ff:ff:ff:ff:ffifconfig命令也可用于查看机器IP配置,效果如下所示。[xuluhui@localhost~]$ifconfigens33:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500inet28netmaskbroadcast55inet6fe80::6bb8:6e80:d029:10f2prefixlen64scopeid0x20<link>ether00:0c:29:6d:5d:c9txqueuelen1000(Ethernet)RXpackets11319bytes732632(715.4KiB)RXerrors0dropped0overruns0frame0TXpackets492bytes51674(50.4KiB)TXerrors0dropped0overruns0carrier0collisions0lo:flags=73<UP,LOOPBACK,RUNNING>mtu65536inetnetmaskinet6::1prefixlen128scopeid0x10<host>looptxqueuelen1000(LocalLoopback)RXpackets2228bytes193268(188.7KiB)RXerrors0dropped0overruns0frame0TXpackets2228bytes193268(188.7KiB)TXerrors0dropped0overruns0carrier0collisions0virbr0:flags=4099<UP,BROADCAST,MULTICAST>mtu1500inetnetmaskbroadcast55ether52:54:00:0b:74:1btxqueuelen1000(Ethernet)RXpackets0bytes0(0.0B)RXerrors0dropped0overruns0frame0TXpackets0bytes0(0.0B)TXerrors0dropped0overruns0carrier0collisions01.4.2vim编辑器vim是一个类似于vi的著名的功能强大、高度可定制的文本编辑器,在vi的基础上改进和增加了很多特性,vim是vi的加强版,比vi更容易使用,vi的命令几乎全部都可以在vim上使用。vi/vim共分为三种工作模式:命令模式(Commandmode)、输入模式(Insertmode)和末行模式(Lastlinemode)。用户刚刚启动vi/vim,便进入了命令模式,此状态下敲击键盘动作会被vim识别为命令,而非输入字符,命令模式下是常用的几个命令包括:“i”切换到输入模式,以输入字符;“x”删除当前光标所在处的字符;“:”切换到末行模式,以在最底端一行输入命令。在命令模式下按下“i”就进入了输入模式,在输入模式中,可以使用若干按键完成相应任务,例如字符按键以及Shift组合,输入字符;Insert按键切换光标为输入/替换模式,光标将变成竖线/下划线;ESC按键退出输入模式,切换到命令模式等。在命令模式下按下“:”(英文冒号)就进入末行模式,末行模式下可以输入单个或多个字符的命令,可用的命令非常多,例“q”可以退出程序,“w”用于保存文件等,按ESC键可随时退出末行模式。vi/vim三种工作模式的转换如图1-1所示。命令模式命令模式输入模式末行模式输入i,a,oESC键:ESC键vi/vim文件名进入:wq保存退出图1-1vi/vim三种工作模式vim是实验中用到最多的文件编辑命令。在命令行输入“vim文件名”后,默认进入“命令模式”,不可编辑文档,需按“i”键,方可编辑文档,编辑结束后,需按“ESC”键,先退回命令模式,再按“:”进入末行模式,接着输入“wq”方可保存退出。1.4.3Java基本命令在安装和配置Java后,可以使用Java命令来编译、运行或者打包Java程序。1)查看Java版本[root@localhost~]#java-versionjavaversion"1.8.0_191"Java(TM)SERuntimeEnvironment(build1.8.0_191-b12)JavaHotSpot(TM)64-BitServerVM(build25.191-b12,mixedmode)2)查看当前所有Java进程jps(JavaVirtualMachineProcessStatusTool)是Java提供的一个显示当前所有Java进程pid的命令,适合在linux/unix平台上简单察看当前Java进程的一些简单情况,如下所示。[root@localhost~]$jps11973Jps3)编译Java程序[root@localhost~]#javacHelloWorld.java4)运行Java程序[root@localhost~]#javaHelloWorldWelcometoJava.5)打包Java程序[root@localhost~]#jar-cvfHelloWorld.jarHelloWorld.classaddedmanifestadding:HelloWorld.class(in=430)(out=295)(deflated31%)由于打包时并没有指定manifest文件,因此该jar包无法直接运行,如下所示。[root@localhost~]#java-jarHelloWorld.jarnomainmanifestattribute,inHelloWorld.jar6)打包携带manifest文件的Java程序manifest.mf文件用于描述整个Java项目,最常用的功能是指定项目的入口类,新建文件“manifest.mf”,文件内容输入“Main-Class:HelloWorld”。[root@localhost~]#vimmanifest.mf打包时,加入-m参数,并指定manifest文件名。[root@localhost~]#jar-cvfmHelloWorld.jarmanifest.mfHelloWorld.classaddedmanifestadding:HelloWorld.class(in=430)(out=295)(deflated31%)7)运行jar包可使用“java”命令直接运行jar包。[root@localhost~]#java-jarHelloWorld.jarWelcometoJava.1.4.4SSH安全通信协议对于远程管理其它机器,一般使用远程桌面或者telnet。Linux安装时自带了telnet,但是telnet的缺点是通信不加密,存在不安全因素,只适合内网访问。为解决这个问题,推出了安全通信协议即SSH(SecureShell),通过SSH可以安全地进行网络数据传输,这得益于SSH采用的是非对称加密体系,传输内容使用RSA或者DSA加密,可以避免网络窃听。非对称加密的工作流程包括以下几个步骤:服务端接受到远程客户端登陆请求,将自己的公钥发送给客户端;客户端利用这个公钥对数据进行加密;客户端将加密的信息发送给服务端;服务端利用自己的私钥进行解密,验证其合法性;验证结果返回客户端响应。不过需要注意的是,Hadoop并不是通过SSH协议进行数据传输的,而是Hadoop控制脚本需要依赖SSH来执行针对整个集群的操作。Hadoop在启动和停止HDFS、YARN的时候,需要主节点上的进程通过SSH协议启动或停止从节点上的各种守护进程。也就是说如果不配置SSH免密登录对Hadoop的使用没有任何影响,只需在启动和停止Hadoop时输入每个从节点的用户名和密码即可。试想,若管理成百上千个节点组成的Hadoop集群,连接每个从节点时都输入密码将是一项繁杂的工作。因此,配置Hadoop主节点到各个从节点的SSH免密登录是有需要的。1.4.5HadoopHadoop是Apache开源组织提供的一个分布式存储和计算的软件框架,它具有高可用、弹性可扩展的特点,非常适合处理海量数据。Hadoop由ApacheLucence创始人道格·卡丁创建,Lucence是一个应用广泛的文本搜索系统库。Hadoop起源于开源的网络搜索引擎ApacheNutch,它本身是Lucence项目的一部分。第一代Hadoop(即Hadoop1.0)的核心由分布式文件系统HDFS和分布式计算框架MapReduce组成,为了克服Hadoop1.0中HDFS和MapReduce的架构设计和应用性能方面的各种问题,提出了第二代Hadoop(即Hadoop2.0),Hadoop2.0的核心包括分布式文件系统HDFS、统一资源管理和调度框架YARN和分布式计算框架MapReduce。HDFS是谷歌文件系统GFS的开源实现,是面向普通硬件环境的分布式文件系统,适用于大数据场景的数据存储,提供了高可靠、高扩展、高吞吐率的数据存储服务。MapReduce是谷歌MapReduce的开源实现,是一种简化的分布式应用程序开发的编程模型,允许开发人员在不了解分布式系统底层细节和缺少并行应用开发经验的情况下,能快速轻松地编写出分布式并行程序,将其运行于计算机集群上,完成对大规模数据集的存储和计算。YARN是将MapReduce1.0中JobTracker的资源管理功能单独剥离出来而形成,它是一个纯粹的资源管理和调度框架,并解决了Hadoop1.0中只能运行MapReduce框架的限制,可在YARN上运行各种不同类型计算框架包括MapReduce、Spark、Storm等。1.Hadoop版本Hadoop的发行版本有两类,一类是由社区维护的免费开源的ApacheHadoop,另一类是一些商业公司如Cloudera、Hortonworks、MapR等推出的Hadoop商业版。截止到目前,ApacheHadoop版本分为三代,分别称为Hadoop1.0、Hadoop2.0、Hadoop3.0。Hadoop商业版主要是提供对各项服务的支持,高级功能要收取一定费用,这对一些研发能力不太强的企业来说是非常有利的,公司只要出一定的费用就能使用到一些高级功能,每个发行版都有自己的特点,目前使用最多的是ClouderaDistributionHadoop(CDH)和HortonworksDataPlatform(HDP)。请读者注意,若无特别强调,本书均是围绕ApacheHadoop2.0展开描述和实验的。2.Hadoop运行环境对于大部分Java开源产品而言,在部署与运行之前,总是需要搭建一个合适的环境,通常包括操作系统和Java环境两方面。同样,Hadoop部署与运行所需要的系统环境,同样包括操作系统和Java环境,另外还需要SSH。1)操作系统Hadoop运行平台支持以下两种:(1)Windows:Hadoop支持Windows,但由于Windows操作系统本身不太适合作为服务器操作系统,所以编者不介绍Windows下安装和配置Hadoop,读者可自行参考网址/hadoop/Hadoop2OnWindows。(2)GNU/Linux:Hadoop的最佳运行环境无疑是开源操作系统Linux,Linux的发行版本众多,常见的有CentOS、Ubuntu、RedHat、Debian、Fedora、SUSE、openSUSE等。本书采用的操作系统为Linux发行版CentOS7。2)Java环境Hadoop使用Java语言编写,因此它的运行环境需要Java环境的支持。Hadoop3.x需要Java8,Hadoop2.7及以后版本需要Java7或Java8,Hadoop2.6及早期版本需要Java6。本书采用的Java为OracleJDK1.8。3)SSHHadoop集群若想运行,其运行平台Linux必须安装SSH,且sshd服务必须运行,只有这样,才能使用Hadoop脚本管理远程Hadoop守护进程。本书选用的CentOS7自带有SSH。3.Hadoop运行模式Hadoop运行模式有以下三种:(1)单机模式(Local/StandaloneMode):只在一台计算机上运行,不需任何配置,在这种模式下,Hadoop所有的守护进程都变成了一个Java进程,存储采用本地文件系统,没有采用分布式文件系统HDFS。(2)伪分布模式(Pseudo-DistributedMode):只在一台计算机上运行,在这种模式下,Hadoop所有守护进程都运行在一个节点上,在一个节点上模拟了一个具有Hadoop完整功能的微型集群,存储采用分布式文件系统HDFS,但是HDFS的名称节点和数据节点都位于同一台计算机上。(3)全分布模式(Fully-DistributedMode):在多台计算机上运行,在这种模式下,Hadoop的守护进程运行在多个节点上,形成一个真正意义上的集群,存储采用分布式文件系统HDFS,且HDFS的名称节点和数据节点位于不同计算机上。三种运行模式各有优缺点。单机模式配置最简单,但它与用户交互的方式不同于全分布模式;对于节点数目受限的初学者可以采用伪分布模式,虽然只有一个节点支撑整个Hadoop集群,但是Hadoop在伪分布模式下的操作方式与在全分布模式下的操作几乎完全相同;全分布模式是使用Hadoop的最佳方式,真实Hadoop集群的运行均采用该模式,但它需要最多的配置工作和架构所需要的机器集群。4.Hadoop2.0生态系统经过十几年的发展,目前,Hadoop已经成长为一个庞大的体系。狭义上来说,Hadoop是一个适合大数据的分布式存储和分布式计算的平台,Hadoop2.0主要由三部分构成:分布式文件系统HDFS、统一资源管理和调度框架YARN、分布式计算框架MapReduce;但广义上来讲,Hadoop是指以Hadoop为基础的生态系统,是一个庞大体系,Hadoop仅是其中最基础、最重要的部分,生态系统中每个子系统只负责解决某一特定问题。Hadoop2.0生态系统如图1-2所示。HiveHiveMapReduceSparkImpalaZooKeeperKafkaFlumeYARNHDFSCommonPigMahoutSqoopHBaseAmbariSparkSQL图1-2Hadoop2.0生态系统5.Hadoop体系架构Hadoop集群采用主从架构(Master/Slave),NameNode与ResourceManager为Master,DataNode与NodeManager为Slaves,守护进程NameNode和DataNode负责完成HDFS的工作,守护进程ResourceManager和NodeManager则负责完成YARN的工作。Hadoop2.0集群架构图如图1-3所示。NameNodeNameNodeResourceManagerDataNodeNodeManagerDataNodeNodeManagerDataNodeNodeManager…图1-3Hadoop2.0集群架构6.Hadoop配置文件Hadoop配置文件很多,配置文件位于$HADOOP_HOME/etc/hadoop,关键的几个配置文件如表1-1所示,伪分布模式和全分布模式下的Hadoop集群所需修改的配置文件有差异。表1-1Hadoop主要配置文件文件名称格式描述hadoop-env.shBash脚本记录运行Hadoop要用的环境变量yarn-env.shBash脚本记录运行YARN要用的环境变量(覆盖hadoop-env.sh中设置的变量)mapred-env.shBash脚本记录运行MapReduce要用的环境变量覆盖hadoop-env.sh中设置的变量)core-site.xmlHadoop配置XMLHadoopCore的配置项,包括HDFS、MapReduce和YARN常用的I/O设置等hdfs-site.xmlHadoop配置XMLHDFS守护进程的配置项,包括NameNode、SecondaryNameNode、DataNode等yarn-site.xmlHadoop配置XMLYARN守护进程的配置项,包括ResourceManager、NodeManager等mapred-site.xmlHadoop配置XMLMapReduce守护进程的配置项,包括JobHistoryServerslaves纯文本运行DataNode和NodeManager的从节点机器列表,每行1个主机名读者可以在Hadoop共享文档目录下找到一个导航文件$HADOOP_HOME/share/doc/Hadoop/index.html,除了左下角有4个默认配置文件的超级链接,如图1-4所示,还有Hadoop的学习教程,值得读者细读。图1-4Hadoop共享文档中导航文件界面1.5实验步骤1.5.1规划部署1.Hadoop集群部署规划全分布模式下部署Hadoop集群时,最低需要两台机器,一个主节点和一个从节点。本书拟将Hadoop集群运行在Linux上,将使用三台安装有Linux操作系统的机器,主机名分别为master、slave1、slave2,其中master作为主节点,slave1和slave2作为从节点。具体Hadoop集群部署规划表如表1-2所示。表1-2全分布模式Hadoop集群部署规划表主机名IP地址运行服务软硬件配置master(主节点)30NameNodeSecondaryNameNodeResourceManagerJobHistoryServer内存:4GCPU:1个2核硬盘:40G操作系统:CentOS7.6.1810Java:OracleJDK8u191Hadoop:Hadoop2.9.2slave1(从节点1)31DataNodeNodeManager内存:1GCPU:1个1核硬盘:20G操作系统:CentOS7.6.1810Java:OracleJDK8u191Hadoop:Hadoop2.9.2slave2(从节点2)32DataNodeNodeManager内存:1GCPU:1个1核硬盘:20G操作系统:CentOS7.6.1810Java:OracleJDK8u191Hadoop:Hadoop2.9.22.软件选择1)虚拟机工具鉴于多数用户使用的是Windows操作系统,作为Hadoop初学者,建议在Windows操作系统上安装虚拟机工具,并在其上创建Linux虚拟机。编者采用的虚拟机工具为VMwareWorkstationPro,读者也可采用其他虚拟机工具例如OracleVirtualBox等。2)Linux操作系统编者采用的Linux操作系统为免费的CentOS(CommunityEnterpriseOperatingSystem,社区企业操作系统),CentOS是RedHatEnterpriseLinux依照开放源代码规定释出的源代码所编译而成,读者也可以使用其他Linux操作系统例如Ubuntu、RedHat、Debian、Fedora、SUSE、openSUSE等。3)JavaHadoop使用Java语言编写,因此它的运行环境需要Java环境的支持。由于Hadoop2.7及以后版本需要Java7或Java8,而本书采用Hadoop2.9.2版本,因此采用的Java为OracleJDK1.8。4)SSH由于Hadoop控制脚本需要依赖SSH来管理远程Hadoop守护进程,因此Hadoop集群的运行平台Linux必须安装SSH,且sshd服务必须运行。本书选用的CentOS7自带有SSH。5)HadoopHadoop起源于2002年的Apache项目Nutch,2004年道格·卡丁开发了现在HDFS和MapReduce的最初版本,2006年ApacheHadoop项目正式启动,以支持MapReduce和HDFS的独立发展。ApacheHadoop的版本经历了1.0、2.0、3.0,目前最新稳定版本是2022年5月17日发布的Hadoop3.3.3,编者采用的是2018年11月19日发布的稳定版Hadoop2.9.2。本节部署Hadoop集群所使用的各种软件的名称、版本、发布日期及下载地址如表1-3所示。表1-3本节部署Hadoop集群使用的软件名称、版本、发布日期及下载地址软件名称软件版本发布日期下载地址VMwareWorkstationProVMwareWorkstation12.5.7ProforWindows2017年6月22日/products/workstation-pro.htmlCentOSCentOS7.6.18102018年11月26日/download/JavaOracleJDK8u1912018年10月16日/technetwork/java/javase/downloads/index.htmlHadoopHadoop2.9.22018年11月19日/releases.html1.5.2准备机器编者使用VMwareWorkstationPro共安装了3台CentOS虚拟机,分别为hadoop2.9.2-master、hadoop2.9.2-slave1和hadoop2.9.2-slave2,其中hadoop2.9.2-master的内存为4096MB,CPU为1个2核,hadoop2.9.2-slave1和hadoop2.9.2-slave2的内存均为1024MB,CPU为1个1核。关于如何使用VMwareWorkstation安装CentOS虚拟机,可参见配套教学资源“使用VMwareWorkstation安装CentOS虚拟机过程详解”。1.5.3准备软件环境3台CentOS虚拟机的软件环境准备过程相同,下文以Hadoop集群主节点的虚拟机hadoop2.9.2-master为例讲述,作为从节点的虚拟机hadoop2.9.2-slave1和hadoop2.9.2-slave2的软件环境准备不再赘述。1.配置静态IP机器不同,CentOS版本不同,网卡配置文件不尽相同。编者使用的CentOS7.6.1810对应的网卡配置文件为/etc/sysconfig/network-scripts/ifcfg-ens33,读者可自行查看个人CentOS的网卡配置文件。(1)切换到root用户,使用命令“vim/etc/sysconfig/network-scripts/ifcfg-ens33”修改网卡配置文件,为该机器设置静态IP地址。网卡ifcfg-ens33配置文件较之原始内容,变动的内容如下所示。BOOTPROTO=staticONBOOT=yesIPADDR=30NETMASK=GATEWAY=DNS1=(2)使用“reboot”命令重启机器或者“systemctlrestartnetwork.service”命令重启网络方可使得配置生效。如图1-5所示,使用命令“ipaddress”或者简写“ipaddr”查看到当前机器的IP地址已设置为静态IP“30”。图1-5使用命令“ipaddr”查看机器IP地址同理,将虚拟机hadoop2.9.2-slave1和hadoop2.9.2-slave2的IP地址依次设置为静态IP“31”、“32”。2.修改主机名切换到root用户,通过修改配置文件/etc/hostname,可以修改Linux主机名,该配置文件中原始内容为:localhost.localdomain按照部署规划,主节点的主机名为“master”,将配置文件/etc/hostname中原始内容替换为:master使用“reboot”命令重启机器方可使得配置生效,使用命令“hostname”验证当前主机名是否已修改为“master”。同理,将虚拟机hadoop2.9.2-slave1和hadoop2.9.2-slave2的主机名依次设置为“slave1”、“slave2”。3.编辑域名映射为协助用户便捷访问该机器而无需记住IP地址串,需要编辑域名映射文件/etc/hosts,在原始内容最后追加3行,内容如下所示。30master31slave132slave2使用“reboot”命令重启机器方可使得配置生效。同理,编辑虚拟机hadoop2.9.2-slave1和hadoop2.9.2-slave2的域名映射文件,内容同虚拟机hadoop2.9.2-master。至此,3台CentOS虚拟机的静态IP、主机名、域名映射均已修改完毕,用ping命令来检测各节点间是否通讯正常,可按“Ctrl+C”组合键终止数据包的发送,成功效果如图1-6所示。图1-6ping命令检测各节点间通讯是否正常4.安装和配置Java(1)卸载OracleOpenJDK。首先,通过命令“java-version”查看是否已安装Java。由于CentOS7自带了OracleOpenJDK,而更建议使用OracleJDK,因此将OracleOpenJDK卸载。其次,使用“rpm-qa|grepjdk”命令查询jdk软件,如图1-7所示。图1-7使用rpm命令查询jdk软件最后,切换到root用户下,分别使用命令“yum-yremovejava-1.8.0*”和“yum-yremovejava-1.7.0*”卸载openjdk1.8和openjdk1.7。同理,卸载节点slave1和slave2上的OracleOpenJDK。(2)下载OracleJDK。需要根据机器所安装的操作系统和位数选择相应JDK安装包下载,可以使用命令“getconfLONG_BIT”来查询Linux操作系统是32还是64位;也可以使用命令“file/bin/ls”来显示Linux版本号。由于编者安装的是CentOS64位,因此下载的JDK安装包文件名为2018年10月16日发布的jdk-8u191-linux-x64.tar.gz,并存放在目录/home/xuluhui/Downloads下。同理,在节点slave1和slave2上也下载相同版本的OracleJDK,并存放在目录/home/xuluhui/Downloads下。(3)安装OracleJDK。使用tar命令解压进行安装,例如安装到目录/usr/java下,依次使用如下命令完成。[root@master~]#cd/usr[root@masterusr]#mkdirjava[root@masterusr]#cdjava[root@masterjava]#tar-zxvf/home/xuluhui/Downloads/jdk-8u191-linux-x64.tar.gz同理,在节点slave1和slave2上也安装OracleJDK。(4)配置Java环境。通过修改/etc/profile文件完成环境变量JAVA_HOME、PATH和CLASSPATH的设置,在配置文件/etc/profile的最后添加如下内容:#setjavaenvironmentexportJAVA_HOME=/usr/java/jdk1.8.0_191exportPATH=$JAVA_HOME/bin:$PATHexportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar使用命令“source/etc/profile”重新加载配置文件或者重启机器,使配置生效,Java环境变量配置成功后的系统变量“PATH”值如图1-8所示。图1-8重新加载配置文件/etc/profile同理,在节点slave1和slave2上也配置Java环境。(5)验证Java。再次使用命令“java-version”,查看Java是否安装配置成功及其版本,如图1-9所示。图1-9查看Java是否安装配置成功及其版本5.安装和配置SSH免密登录需要注意的是,Hadoop并不是通过SSH协议进行数据传输的,而是Hadoop控制脚本需要依赖SSH来执行针对整个集群的操作。Hadoop在启动和停止HDFS、YARN的时候,需要主节点上的进程通过SSH协议启动或停止从节点上的各种守护进程。也就是说如果不配置SSH免密登录对Hadoop的使用没有任何影响,只需在启动和停止Hadoop时输入每个从节点的用户名和密码即可。试想,若管理成百上千个节点组成的Hadoop集群,连接每个从节点时都输入密码将是一项繁杂的工作。因此,配置Hadoop主节点到各个从节点的SSH免密登录是有需要的。(1)安装SSH。使用命令“rpm-qa|grepssh”查询SSH是否已经安装,如图1-10所示。图1-10查询SSH是否安装从图1-10可以看出,CentOS7已安装好SSH软件包,若没有安装好,用命令“yum”安装,命令如下所示。[root@masterjava]#yum-yinstallopenssh[root@masterjava]#yum-yinstallopenssh-server[root@masterjava]#yum-yinstallopenssh-clients(2)修改sshd配置文件。使用命令“vim/etc/ssh/sshd_config”修改sshd配置文件,原始第43行内容为:#PubkeyAuthenticationyes修改后为:RSAAuthenticationyesPubkeyAuthenticationyes同理,在节点slave1和slave2上也修改sshd配置文件。(3)重启sshd服务。使用如下命令重启sshd服务,同理,在节点slave1和slave2上也需要重启sshd服务。systemctlrestartsshd.service(4)生成公钥和私钥。首先,切换到普通用户xuluhui下,利用“cd~”命令切换回到用户xuluhui的家目录下,使用命令“ssh-keygen”在家目录中生成公钥和私钥,如图1-11所示。图1-11中,文件id_rsa是私钥,文件id_rsa.pub是公钥。图1-11使用命令“ssh-keygen”生成公钥和私钥其次,使用以下命令把公钥id_rsa.pub的内容追加到authorized_keys授权密钥文件中。[xuluhui@master~]$cat~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys最后,使用以下命令修改密钥文件的相应权限。[xuluhui@master~]$chmod0600~/.ssh/authorized_keys(5)共享公钥。经过共享公钥后,就不再需要输入密码。因为只有1主2从节点,所以直接复制公钥比较方便,将master的公钥直接复制给slave1、slave2就可以解决主节点连接从节点时需要密码的问题,过程如图1-12所示。图1-12将master公钥复制给slave1并测试ssh免密登录slave1从图1-12可以看出,已能从master机器通过“ssh”命令免密登录到slave1机器上。同理,将master的公钥首先通过命令“ssh-copy-id-i~/.ssh/id_rsa.pubxuluhui@slave2”复制给slave2,然后测试是否可以通过“ssh”命令免密登录slave2。为了使主节点master能通过“ssh”命令免密登录自身,使用“sshmaster”命令尝试登录自身,第1次连接时需要人工干预输入“yes”,然后会自动将master的key加入/home/xuluhui/.ssh/know_hosts文件中,此时即可登录到自身。第2次执行命令“sshmaster”时就可以免密登录到自身。至此,可以从master节点通过“ssh”命令免密登录到自身、slave1和slave2了,这对Hadoop已经足够,但是若想达到所有节点之间都能免密登录的话,还需要在slave1、slave2上各执行3次,也就是说两两共享密钥,这样累计共执行9次。1.5.4获取和安装Hadoop以下步骤需要在master、slave1和slave2三个节点上均要完成。1.获取HadoopHadoop官方下载地址为/releases.html,本书选用的Hadoop版本是2018年11月19日发布的稳定版Hadoop2.9.2,其安装包文件hadoop-2.9.2.tar.gz例如存放在/home/xuluhui/Downloads中。2.安装Hadoop(1)切换到root用户,将hadoop-2.9.2.tar.gz解压到目录/usr/local下,具体命令如下所示。[xuluhui@master~]$suroot[root@master~]#cd/usr/local[root@masterlocal]#tar-zxvf/home/xuluhui/Downloads/hadoop-2.9.2.tar.gz(2)将Hadoop安装目录的权限赋给xuluhui用户,输入以下命令。[root@masterlocal]#chown-Rxuluhui/usr/local/hadoop-.5配置全分布模式Hadoop集群需要说明的是,为了方便,下文中步骤1-9均在主节点master上进行,从节点slave1、slave2上的配置文件可以通过“scp”命令同步复制。1.在系统配置文件目录/etc/profile.d下新建hadoop.sh切换到root用户,使用“vim/etc/profile.d/hadoop.sh”命令在/etc/profile.d文件夹下新建文件hadoop.sh,添加如下内容。exportHADOOP_HOME=/usr/local/hadoop-2.9.2exportPATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH使用命令“source/etc/profile.d/hadoop.sh”重新加载配置文件或者重启机器,使之生效当前系统变量“PATH”值如图1-13所示。图1-13使用source命令重新加载配置文件hadoop.sh此步骤可省略,之所以将Hadoop安装目录下bin和sbin加入到系统环境变量PATH中,是因为当输入启动和管理Hadoop集群命令时,无需再切换到Hadoop安装目录下的bin目录或者sbin目录,否则会出现错误信息“bash:****:commandnotfound...”。由于上文已将Hadoop安装目录的权限赋给xuluhui用户,所以接下来的2-9步骤均在普通用户xuluhui下完成。2.配置hadoop-env.sh环境变量配置文件hadoop-env.sh主要配置Java的安装路径JAVA_HOME、Hadoop日志存储路径HADOOP_LOG_DIR及添加SSH的配置选项HADOOP_SSH_OPTS等。本书中关于hadoop-env.sh配置文件的修改具体如下。(1)第25行“exportJAVA_HOME=${JAVA_HOME}”修改为:exportJAVA_HOME=/usr/java/jdk1.8.0_191(2)第26行空行处加入:exportHADOOP_SSH_OPTS='-oStrictHostKeyChecking=no'这里要说明的是,SSH的选项“StrictHostKeyChecking”用于控制当目标主机尚未进行过认证时,是否显示信息“Areyousureyouwanttocontinueconnecting(yes/no)?”。所以当登录其它机器时,只需要设置参数“HADOOP_SSH_OPTS”的值为“-oStrictHostKeyChecking=no”就可以直接登录,不会有上面的提示信息,不需要人工干预输入“yes”,而且还会将目标主机key加到~/.ssh/known_hosts文件里。(3)第113行“exportHADOOP_PID_DIR=${HADOOP_PID_DIR}”指定HDFS守护进程号的保存位置,默认为“/tmp”,由于该文件夹用以存放临时文件,系统定时会自动清理,因此本书将“HADOOP_PID_DIR”设置为Hadoop安装目录下的目录pids,如下所示,其中目录pids会随着HDFS守护进程的启动而由系统自动创建,无需用户手工创建。exportHADOOP_PID_DIR=${HADOOP_HOME}/pids3.配置mapred-env.sh环境变量配置文件mapred-env.sh主要配置Java安装路径JAVA_HOME、MapReduce日志存储路径HADOOP_MAPRED_LOG_DIR等,之所以再次设置JAVA_HOME,是为了保证所有进程使用的是同一个版本的JDK。本书中关于mapred-env.sh配置文件的修改具体如下。(1)第16行注释“#exportJAVA_HOME=/home/y/libexec/jdk1.6.0/”修改为:exportJAVA_HOME=/usr/java/jdk1.8.0_191(2)第28行指定MapReduce守护进程号的保存位置,默认为“/tmp”,同以上“HADOOP_PID_DIR”,此处注释“#exportHADOOP_MAPRED_PID_DIR=”修改为Hadoop安装目录下的目录pids,如下所示,其中目录pids会随着MapReduce守护进程的启动而由系统自动创建,无需用户手工创建。exportHADOOP_MAPRED_PID_DIR=${HADOOP_HOME}/pids4.配置yarn-env.shYARN是Hadoop的资源管理器,环境变量配置文件yarn-env.sh主要配置Java安装路径JAVA_HOME及YARN日志存放路径YARN_LOG_DIR等。本书中关于yarn-env.sh配置文件的修改具体如下。(1)第23行注释“#exportJAVA_HOME=/home/y/libexec/jdk1.6.0/”修改为:exportJAVA_HOME=/usr/java/jdk1.8.0_191(2)yarn-env.sh文件中并未提供YARN_PID_DIR配置项,用于指定YARN守护进程号的保存位置,在该文件最后添加一行,内容如下所示,其中目录pids会随着YARN守护进程的启动而由系统自动创建,无需用户手工创建。exportYARN_PID_DIR=${HADOOP_HOME}/pids5.配置core-site.xmlcore-site.xml是hadoopcore配置文件,如HDFS和MapReduce常用的I/O设置等,其中包括很多配置项,但实际上,大多数配置项都有默认项,也就是说,很多配置项即使不配置,也无关紧要,只是在特定场合下,有些默认值无法工作,这时再找出来配置特定值。关于core-site.xml配置文件的修改如下所示。<configuration><property><name>fs.defaultFS</name><value>hdfs://30:9000</value></property><property><name>hadoop.tmp.dir</name><value>/usr/local/hadoop-2.9.2/hdfsdata</value></property><property><name>io.file.buffer.size</name><value>131072</value></property></configuration>core-site.xml中几个重要配置项的参数名、功能、默认值和设置值如表1-4所示。表1-4core-site.xml重要配置项参数说明配置项参数名功能默认值设置值fs.defaultFSHDFS的文件URIfile:///hdfs://30:9000io.file.buffer.sizeIO文件的缓冲区大小4096131072hadoop.tmp.dirHadoop的临时目录/tmp/hadoop-${}/usr/local/hadoop-2.9.2/hdfsdata关于core-site.xml更多配置项的说明,读者请参考本地帮助文档share/doc/hadoop/hadoop-project-dist/hadoop-common/core-default.xml,或者官网地址/docs/r2.9.2/hadoop-project-dist/hadoop-common/core-default.xml。6.配置hdfs-site.xmlhdfs-site.xml配置文件主要配置HDFS分项数据,如字空间元数据、数据块、辅助节点的检查点的存放路径等,不修改配置项的采用默认值即可,本书中关于hdfs-site.xml配置文件未做任何修改。hdfs-site.xml中几个重要配置项的参数名、功能、默认值和设置值如表1-5所示。表1-5hdfs-site.xml重要配置项参数说明配置项参数名功能默认值设置值.dir元数据存放位置file://${hadoop.tmp.dir}/dfs/name未修改dfs.datanode.data.dir数据块存放位置file://${hadoop.tmp.dir}/dfs/data未修改node.checkpoint.dir辅助节点的检查点存放位置file://${hadoop.tmp.dir}/dfs/namesecondary未修改dfs.blocksizeHDFS文件块大小134217728未修改dfs.replicationHDFS文件块副本数3未修改node.http-addressNameNodeWebUI地址和端口:50070未修改由于上一步对core-site.xml的修改中将Hadoop的临时目录设置为“/usr/local/hadoop-2.9.2/hdfsdata”,故本书中将元数据存放在主节点的“/usr/local/hadoop-2.9.2/hdfsdata/dfs/name”,数据块存放在从节点的“/usr/local/hadoop-2.9.2/hdfsdata/dfs/data”,辅助节点的检查点存放在主节点的“/usr/local/hadoop-2.9.2/hdfsdata/dfs/namesecondary”,这些目录都会随着HDFS的格式化、HDFS守护进程的启动而由系统自动创建,无需用户手工创建。关于hdfs-site.xml更多配置项的说明,读者请参考本地帮助文档share/doc/hadoop/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml,或者官网地址/docs/r2.9.2/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml。7.配置mapred-site.xmlmapred-site.xml配置文件是有关MapReduce计算框架的配置信息,Hadoop配置文件中没有mapred-site.xml,但有mapred-site.xml.template,读者使用命令例如“cpmapred-site.xml.templatemapred-site.xml”将其复制并重命名为“mapred-site.xml”即可,然后用vim编辑相应的配置信息,本书中对于mapred-site.xml的添加内容如下所示。<configuration><property><name></name><value>yarn</value></property></configuration>mapred-site.xml中几个重要配置项的参数名、功能、默认值和设置值如表1-6所示。表1-6mapred-site.xml重要配置项参数说明配置项参数名功能默认值设置值MapReduce应用程序的执行框架localyarnmapreduce.jobhistory.webapp.addressMapReduceWebUI端口号19888未修改mapreduce.job.maps每个MapReduce作业的map任务数目2未修改mapreduce.job.reduces每个MapReduce作业的reduce任务数目1未修改关于mapred-site.xml更多配置项的说明,读者请参考本地帮助文档share/doc/hadoop/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapreduce-default.xml,或者官网地址/docs/r2.9.2/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml。8.配置yarn-site.xmlyarn-site.xml是有关资源管理器的YARN配置信息,本书中对于yarn-site.xml的添加内容如下所示。<configuration><property><name>yarn.resourcemanager.hostname</name><value>master</value></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property></configuration>yarn-site.xml中几个重要配置项的参数名、功能、默认值和设置值如表1-7所示。表1-7yarn-site.xml重要配置项参数说明配置项参数名功能默认值设置值yarn.resourcemanager.hostname提供ResourceManager服务的主机名masteryarn.resourcemanager.scheduler.class启用的资源调度器主类org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler未修改yarn.resourcemanager.webapp.addressResourceManagerWebUIhttp地址${yarn.resourcemanager.hostname}:8088未修改yarn.nodemanager.local-dirs中间结果存放位置${hadoop.tmp.dir}/nm-local-dir未修改yarn.nodemanager.aux-servicesNodeManager上运行的附属服务mapreduce_shuffle由于之前步骤已将core-site.xml中Hadoop的临时目录设置为“/usr/local/hadoop-2.9.2/hdfsdata”,故本书中未修改配置项“yarn.nodemanager.local-dirs”,中间结果的存放位置为“/usr/local/hadoop-2.9.2/hdfsdata/nm-local-dir”,这个目录会随着YARN守护进程的启动而在由系统自动在所有从节点上创建,无需用户手工创建。另外,“yarn.nodemanager.aux-services”需配置成“mapreduce_shuffle”,才可运行MapReduce程序。关于yarn-site.xml更多配置项的说明,读者请参考本地帮助文档share/doc/hadoop/hadoop-yarn/hadoop-yarn-common/yarn-default.xml,或者官网地址/docs/r2.9.2/hadoop-yarn/hadoop-yarn-common/yarn-default.xml。9.配置slaves配置文件slaves用于指定从节点主机名列表,在这个文件中,需要添加所有的从节点主机名,每一个主机名占一行,本书中slaves文件的内容如下所示。slave1slave2需要注意的是,在slaves文件里,有一个默认值“localhost”,一定要删除,若不删除,虽然后面添加了所有的从节点主机名,Hadoop还是无法逃脱“伪分布模式”的命运。10.同步配置文件以上配置文件要求Hadoop集群中每个节点都“机手一份”,快捷的方法是在主节点master上配置好,然后利用“scp”命令将配置好的文件同步到从节点slave1、slave2上。scp是securecopy的缩写,该命令用于在Linux下进行远程文件的拷贝,该命令用于在Linux系统进行远程文件的拷贝,可以在Linux服务器之间复制文件和目录。(1)同步hadoop.sh切换到root用户下,将master节点上的文件hadoop.sh同步到其他2台从节点上,命令如下所示。[root@masterhadoop]#scp/etc/profile.d/hadoop.shroot@slave1:/etc/profile.d/[root@masterhadoop]#scp/etc/profile.d/hadoop.shroot@slave2:/etc/profile.d/(2)同步Hadoop配置文件切换到普通用户xuluhui下,将master上/usr/local/hadoop-2.9.2/etc/hadoop下的配置文件同步到其他2个从节点上。首先,通过如下命令将主节点master上的Hadoop配置文件同步到从节点slave1上,具体执行效果如图1-14所示。[xuluhui@masterhadoop]$scp-r/usr/local/hadoop-2.9.2/etc/hadoop/*xuluhui@slave1:/usr/local/hadoop-2.9.2/etc/hadoop/图1-14同步Hadoop配置文件到从节点slave1其次,通过相同方法将主节点master上的Hadoop配置文件同步到从节点slave2上,具体命令如下所示,此处略去执行效果的图片。[xuluhui@masterhadoop]$scp-r/usr/local/hadoop-2.9.2/etc/hadoop/*xuluhui@slave2:/usr/local/hadoop-2.9.2/etc/hadoop/至此,1主节点2从节点的Hadoop全分布模式集群全部配置结束,重启三台机器,使得上述配置生效。1.5.6关闭防火墙为了方便Hadoop集群间相互通信,建议关闭防火墙,若防火墙没有关闭,可能会导致Hadoop虽然可以启动,但是数据节点DataNode无法连接名称节点NameNode,如图1-15所示,Hadoop集群启动正常,但数据容量为0B,数据节点数量也是0。图1-15未关闭防火墙时Hadoop集群的数据容量和数据节点数量均为0CentOS7下关闭防火墙的方式有两种:命令“systemctlstopfirewalld.service”用于临时关闭防火墙,重启机器后又会恢复到默认状态;命令“systemctldisablefirewalld.service”用于永久关闭防火墙。编者采用在master节点上以root身份使用第2个命令,具体效果如图1-16所示。图1-16关闭防火墙重启机器,使用命令“systemctlstatusfirewalld.service”查看防火墙状态,如图1-17所示,防火墙状态为“inactive(dead)”。图1-17命令“systemctldisablefirewalld.service”关闭防火墙后再重启机器后的效果同理,关闭所有从节点slave1、slave2的防火墙。1.5.7格式化文件系统在主节点master上以普通用户xuluhui身份输入以下命令,进行HDFS文件系统的格式化。注意,此命令必须在主节点master上执行,切勿在从节点上执行。[xuluhui@master~]$hdfsnamenode-format值得注意的是,HDFS格式化命令执行成功后,按照本书以上Hadoop配置,会在主节点master的Hadoop安装目录下自动生成hdfsdata/dfs/name这个HDFS元数据目录,如图1-18所示。此时,2个从节点上Hadoop安装目录下的文件不发生变化。图1-18格式化HDFS后主节点上自动生成的目录及文件1.5.8启动和验证Hadoop启动全分布模式Hadoop集群的守护进程,只需在主节点master上依次执行以下3条命令即可。start-dfs.shstart-yarn.shmr-jobhistory-daemon.shstarthistoryserver“start-dfs.sh”命令会在节点上启动NameNode、DataNode和SecondaryNameNode服务。“start-yarn.sh”命令会在节点上启动ResourceManager和NodeManager服务。“mr-jobhistory-daemon.shstarthistoryserver”命令会在节点上启动JobHistoryServer服务。请注意,即使对应的守护进程没有启动成功,Hadoop也不会在控制台显示错误消息,读者可以利用“jps”命令一步一步查询,逐步核实对应的进程是否启动成功。1.执行命令start-dfs.sh若全分布模式Hadoop集群部署成功,执行命令start-dfs.sh后,NameNode和SecondaryNameNode会出现在主节点master上,DataNode会出现在所有从节点slave1、slave2上,运行结果如图1-19所示。这里需要注意的是,第一次启动HDFS集群时,由于之前步骤中在配置文件hadoop-env.sh中添加了一行“HADOOP_SSH_OPTS='-oStrictHostKeyChecking=no'”,所以在连接主机

温馨提示

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

评论

0/150

提交评论