




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实训2.1基础实训环境准备1.实训目的通过本实训对大数据实训环境配置做一个前期准备操作,了解各个节点之间的基础通信原理。2.实训内容该实训主要针对集群配置做前期的域名映射、SSH免密登陆工作,对SSH安全通信协议以及通信方式有所了解,对大数据服务组件之间安全通信有所了解。3.实训要求以小组为单元进行实训,每小组5人,小组自协商选一位组长,由组长安排和分配实训任务,具体参加实训内容中的实训过程。4.准备知识本实训任务可以配套大数据实训平台,由平台分发三台裸机服务器。如果没有使用大数据实训平台,则首先需要先你的电脑上安装好VMware或者VirtualBox等相类似的软件,然后装一台Centos7虚拟机,然后克隆三台出来,并配置好ip地址,可自行查阅相关资料,或者查看本书后面的附录页。同学们需要提前学习一些简单的Linux基础知识、网络基础知识、云计算基础知识,如果是学会配置虚拟机之间的网络等等,如基础比较薄弱,可以在老师的指导下进行学习。由于涉及面比较广,建议同学之间加多交流,打下良好基础,为后面的学习做准备。5.实训步骤(1)搭建集群服务器老师按照平台操作手册,分发给学生初始裸机环境。一共是三台服务器,一台是主节点,两台是从节点。角色、ip地址、用户名、密码等信息初始化情况如图2-3所示。角色ip地址cpu内存用户名密码master312核1.5groothadoopslave1322核1groothadoopslave2332核1groothadoop图2-3所提供的服务器基本情况(2)MobaXterm的使用如果想要操作服务器,一般都会使用第三方工具进行连接操作,第三方工具如MobaXterm、XShell、SecureCRT等等,工具的使用大同小异,此处使用目前比较主流的MobaXterm,由于MobaXterm具有绿色版本,所以不需要安装,直接双击即可打开使用页面,如图所示2-4所示。图2-4MobaXterm软件首页(3)新建会话①点击页面中部的“Newsession”即可打开新建回话页面,此时默认选择是“SSH”类型,不需要选择,直接输入远程主机的ip地址(此时输入master的ip地址),然后勾选“指定用户名”,输入用户名(此时为root用户),其余保持默认不变,如图2-5所示。图2-5设置会话接着,点击窗口下方的“OK”按钮。此时会提示输入root用户密码,如图2-6所示。图2-6提示输入密码输入密码后,会提示是否保存密码,点击“Yes”,如图2-7所示。图2-7保存密码此后即可连接上master服务器,如图2-8所示。图2-8连接上服务器页面点击左上角菜单栏的“终端”,选择“打开新标签”,跟上面一样的操作连接上slave1和slave2节点,如下图2-17所示。图2-17各节点均需连接上连接好后,可以右击会话,将会话名称分别改为master、slave1、slave2,以方便辨识。修改master主机名(如果主机名已经修改好,可忽略此操作)命令格式:hostnamectlset-hostname主机名hostnamectlset-hostnamemaster
bash结果如图所示:图2-17修改主机名slave1、slave2的主机名也分别修改好。添加域名映射①先安装好加强版vi编辑器,使编辑页面更加美观在三台节点上执行:yuminstall-yvim提示以下页面则表示安装成功,如图2-所示:②使用vim命令编辑/etc/hosts文件在三台节点上执行:vim/etc/hosts然后添加三台主机ip地址和主机名映射关系,内容为:31master32slave133slave2如图2-18所示。图2-18配置域名映射配置好之后可以通过主机名来代替ip进行一系列的操作。③保存退出后,使用cat命令查看配置的文件是否配置好:cat/etc/hosts如果查看到/etc/hosts文件里面有映射关系,则表示配置好了。如下图2-19所示。图2-19校验域名映射④同理,在slave1、slave2上也要配置好域名映射,域名映射的内容是一样的。(5)配置三台服务器的SSH免密码登录①生成服务器的密钥。在master上执行:ssh-keygen②输入之后连续按三次回车,则可以生成服务器的密钥,如图2-20所示。图2-20生成服务器密钥③在slave1、slave2上也要执行上面两步来生成密钥。(6)配置公钥到authorized_keys文件(slave1、slave2节点)①将master的公钥id_rsa.pub写入到authorized_keys文件。在master上执行:cd~/.sshcatid_rsa.pub>>authorized_keysls执行结果如图2-21所示。图2-21写入公钥到authorized_keys文件②将slave1的公钥id_rsa.pub写入到authorized_keys1文件,此处是authorized_keys1文件,因为等下要拷贝到master节点,所要需要做一下区分,使用其他文件名也可以。在slave1上执行:cd~/.sshcatid_rsa.pub>>authorized_keys1执行结果如图2-22所示。图2-22写入公钥到authorized_keys1文件③将slave2的公钥id_rsa.pub写入到authorized_keys2文件。在slave1上执行:cd~/.sshcatid_rsa.pub>>authorized_keys2执行结果如图2-23所示。图2-23写入公钥到authorized_keys2文件④将authorized_keys1文件拷贝到master节点,此处注意ip地址需要修改成自己的master节点的ip地址,所以也可以使用master节点的主机名代替。在slave1上执行:scpauthorized_keys1root@master:~/.ssh/执行结果如图2-24所示。图2-24拷贝slave1公钥到master⑤将authorized_keys2文件拷贝到master节点。在slave2上执行:scpauthorized_keys2root@master:~/.ssh/执行结果如图2-25所示。图2-25拷贝slave2公钥到master⑥此时,master上其实已经有了slave1和slave2的公钥。需要对公钥进行整合,然后再分发到slave1和slave2,这样才能实现各节点间能够进行免密码登录。 在master上执行:catauthorized_keys1>>authorized_keyscatauthorized_keys2>>authorized_keys执行步骤如图2-26所示。图2-26汇集三台服务器的公钥⑦查看authorized_keys文件是否已经有各节点的公钥。在master上执行:catauthorized_keys执行结果如图2-27所示。图2-27查看汇集结果⑧将master的authorized_keys文件拷贝到slave1、slave2节点的/root/.ssh/目录下,以达到互相可以免密码访问的目的。在master上执行:scpauthorized_keysroot@slave1:~/.ssh/scpauthorized_keysroot@slave2:~/.ssh/执行步骤如图2-28所示。图2-28分发公钥到slave1、slave2⑨测试免密码登陆校验的命令为(ssh后面有一个空格):命令格式:ssh主机名ssh登录进去后,务必记得使用exit命令退出再测试其他节点。可以发现,从master节点ssh到master、slave1、slave2均不用输入密码(如出现需要输入yes/no,输入yes即可,下次再重新执行就不会再出现),表示免密码登录是成功的。校验结果如图2-29所示。图2-29校验master是否能够免密码登录slave1和slave2⑩测试slave1和slave2能否免密码登录到master,如果没有问题,也是可以免密码登录的,此处不再截图。6.实训总结前期的基础配置准备工作,为之后的环境搭建做好充分的准备。该实训主要通过SSH免密码登陆配置,使学生对实操节点之间的这种SSH通信方式有所感知。本实训课程对于初学者而言,最难的是没有接触过Linux操作,如果接触过的话上手会很快。其实也可以不使用XShell工具,但是为了刚好地操作,此处使用了远端登录工具,直接在Windows上就可以操作集群,如果没有使用工具,则应该直接进去操作集群。免密码登录是大数据集群的大前提,如果没有进行免密码,节点之间是无法进行友好通信的,而域名映射,是为了替代ip,方便集群的管理与相关配置的迁移等等。学习的时候,需要理解好实训的目的。每个人的用户名及ip都会有所不同,本书的用户名和ip需要特别留意,后期会一直使用,先记住以便不在学习中混淆。如果是自己搭建的虚拟机,可以取一个短的名字和设置一个便于记忆的ip,以便学习。最后,总结一下同学们在操作过程中比较容易遇到的错误:①如果是自己搭建的环境,可能会没有scp命令,此时可以自己安装一下。②需要特别注意的是,生成的公钥文件其实只有一行内容,在实操的时候,不要将authorized_keys里面的内容复制出来,然后再编辑,最好是跟着实训步骤一步一步复制,否则很容易出错,比如文件格式发生改变、会自动换行等。配置好后,每台服务器authorized_keys文件里面的内容,其实是一样的。③最后测试是否配置成功时,记得测试完后,需要执行exit命令进行退出。否则,很可能会影响你后面的操作,比如你在master上用ssh登录上了其他节点,忘记退出了,你之后的操作其实是在操作其他节点的,而你却没发现,以为还是在操作master,所以务必记得使用exit命令。实训2.2HDFS的安装部署与配置1.实训目的通过本实训理解HDFS的架构以及安装与部署;学会启动HDFS集群,懂得上传文件到HDFS。2.实训内容该实训主要是进行HDFS集群的相关操作,包括HDFS的安装部署和配置,并且懂得查看HDFS的WebUI界面和上传文件到HDFS。但在部署之前需要安装好HDFS的运行前提环境JDK,然后再在master上部署NameNode服务,在slave上部署DataNode服务。3.实训要求以小组为单元进行实训,每小组5人,小组自协商选一位组长,由组长安排和分配实训任务,具体参考实训操作环节。4.准备知识(1)HDFS内容回顾①分布式文件系统分布式文件系统是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。该系统架构于网络之上,势必会引入网络编程的复杂性,因此分布式文件系统比普通磁盘文件系统更为复杂。②HDFS架构HDFS为大数据平台其它所有组件提供了基本的存储功能。它具有高容错、高可靠、可扩展、高吞吐率等特征,为大数据存储和处理提供了强大的底层存储架构。HDFS是一个主从结构的分布式文件系统,具有分布式存储的特点,HDFS集群拥有一个NameNode和多个DataNode,NameNode管理文件系统的元数据,DataNode存储实际的数据。从用户的角度来看,其与传统的文件系统类似,可通过目录路径对其上的文件执行增删改查操作。由于是分布式存储,所以HDFS集群除了拥有一个NameNode,还有多个DataNode,NameNode管理着文件系统的元数据,DataNode存储实际的数据。HDFS开放文件系统的命名空间以便用户以文件形式存储数据,秉承“一次写入、多次读取”的原则。客户端通过NameNode和DataNode的交互访问文件系统,联系NameNode以获取文件的元数据,而真正的文件I/O操作是直接和DataNode进行交互的。(2)HDFS基本命令HDFS的基本命令与Linux的命令非常相似,可以结合Linux的命名进行对比学习。HDFS基本命令格式如下(cmd为具体的操作,args为参数):hdfsdfs-cmdargs部分HDFS命令示例如下:hdfsdfs-mkdir/user/trunk#建立目录/user/trunkhdfsdfs-ls/user#查看/user目录下的目录和文件hdfsdfs-lsr/user#递归查看/user目录下的目录和文件hdfsdfs-puttest.txt/user/trunk#上传test.txt文件至/user/trunkhdfsdfs-get/user/trunk/test.txt#获取/user/trunk/test.txt文件hdfsdfs-cat/user/trunk/test.txt#查看/user/trunk/test.txt文件内容hdfsdfs-tail/user/trunk/test.txt#查看/user/trunk/test.txt文件的最后1000行hdfsdfs-rm/user/trunk/test.txt#删除/user/trunk/test.txt文件hdfsdfs-helpls#查看ls命令的帮助文档5.实训操作(1)安装包准备①下载好的JDK和Hadoop的安装包,可以直接使用MobaXterm工具上传安装包到各个节点。点击MobaXterm软件左侧的sftp可以进入传输文件页面,点击下方的“跟随终端文件夹”可以让显示的内容跟随操作的路径。如图2-30所示。图2-30切换到上传文件页面②将需要上传的软件拖拉到MobaXterm窗口空白处,如图2-所示。图2-30上传JDK与Hadoop安装包到master等待软件上传完后,继续往下操作。JDK安装配置三台节点均操作①将JDK移动到指定文件夹放置好,如图2-31所示。mkdirpackagemvhadoop-3.3.4.tar.gzjdk-8u161-linux-x64.tar.gzpackage/cdpackage/ll②创建/opt/software文件夹放置需要安装的软件,然后解压JDKmkdir/opt/softwaretar-zxvfjdk-8u161-linux-x64.tar.gz-C/opt/software/解压好后,如图2-所示。③需要配置环境变量(本次实训在/etc/profile文件中配置),如图2-33所示。vim/etc/profileexportJAVA_HOME=/opt/software/jdk1.8.0_161exportPATH=$PATH:$JAVA_HOME/bin图2-33配置环境变量注意:添加配置的位置是文件最后一行。③配置好后,需要使环境变量在当前会话生效,如图2-34所示。source/etc/profile图2-34使配置环境生效④校验是否设置成功,可以查看到JDK的版本号,如图2-35所示。java-version注意:三台节点均需要安装JDK。(3)HDFS相关配置①解压Hadoop包文件至/opt/software目录,然后查看是否解压成功。如图2-36所示。tar-zxvfhadoop-3.3.4.tar.gz-C/opt/software/图2-36查看是否解压成功②修改HDFS配置文件设置JDK安装目录编辑文件“/opt/software/hadoop-3.3.4/etc/hadoop/hadoop-env.sh”cd/opt/software/hadoop-3.3.4/etc/hadoopvimhadoop-env.sh找到如下一行:#exportJAVA_HOME=在其下方添加内容:exportJAVA_HOME=/opt/software/jdk1.8.0_161操作结果如图2-37所示。图2-37设置JAVA_HOME此处的“/opt/software/jdk1.8.0_161”即是JDK安装位置,如果不同,请根据实际情况更改。指定HDFS主节点编辑文件为“/opt/software/hadoop-3.3.4/etc/hadoop/core-site.xml”,修改编辑文件:vimcore-site.xml将如下内容添加到最后两行的<configuration></configuration>标签之间: <property> <name>hadoop.tmp.dir</name> <value>/opt/software/hadoop/tmp</value> </property> <property> <name>fs.defaultFS</name> <value>hdfs://master:8020</value> </property>位置如图2-38所示。图2-38配置core-site.xml指定HDFS相关配置编辑文件为“/opt/software/hadoop-3.3.4/etc/hadoop/hdfs-site.xml”,将指定HDFS集群存储的副本系数、Namenode元数据和DataNode数据的存储位置、,修改编辑文件:vimhdfs-site.xml将如下内容添加到最后两行的<configuration></configuration>标签之间: <property> <name>.dir</name> <value>/opt/software/hadoop-3.3.4/dfs/name</value><description>Namenode元数据存储位置</description> </property> <property> <name>dfs.datanode.data.dir</name> <value>/opt/software/hadoop-3.3.4/dfs/data</value><description>DataNode数据存储位置</description> </property> <property> <name>dfs.replication</name> <value>2</value><description>块存储的副本系数</description> </property> <property> <name>node.secondary.http-address</name> <value>master:9868</value><description>SecondaryNameNode地址</description> </property><property><name>dfs.webhdfs.enabled</name><value>true</value><description>开启webhdfs服务</description></property>指定HDFS从节点编辑worker文件,路径为“/opt/software/hadoop-3.3.4/etc/hadoop/workers”文件夹里,将slave节点的文件名加入此文件中,本实训的slave节点为slave1和slave2,所以添加的内容为slave1和slave2:vimworkersslave1slave2注意:①原本文件中默认有localhost,记得删除掉。②此文件中不要包含多余的空行或者空格。最终配置内容如图2-39所示。图2-39查看workers文件内容(4)拷贝master上的配置文件到slave1、slave2在master机上执行下列命令,将配置好的hadoop文件目录拷贝至slave1、slave2。本实训使用附录中提供的脚本实现拷贝操作,可以查看后面的附录内容。~/shell/scp_call.sh/opt/software/hadoop-3.3.4/拷贝结束后,slave1和slave2节点将会有相应的文件目录。如图2-、图2-所示。图2-39查看slave1节点文件夹图2-39查看slave2节点文件夹(5)启动HDFS①配置环境变量为了方便方便后面操作,可以先将Hadoop主目录下的bin和sbin目录配上环境变量。vim/etc/profileexportHADOOP_HOME=/opt/software/hadoop-3.3.4exportPATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin同时,Hadoop3.3.4版本对用户做了限制,所以还需要添加定义用户的变量。exportHDFS_NAMENODE_USER=rootexportHDFS_DATANODE_USER=rootexportHDFS_SECONDARYNAMENODE_USER=rootexportYARN_RESOURCEMANAGER_USER=rootexportYARN_NODEMANAGER_USER=root最终配置结果如图2-所示:最后还需要使环境变量在当前会话生效。source/etc/profile为了方便操作,可以拷贝master上的环境变量文件到slave1、slave2节点。在master节点执行:~/shell/scp_call.sh/etc/profile拷贝完成后,需要在slave1、slave2节点上执行source操作。②格式化HDFS首次使用HDFS需要先进行格式化,可以在/opt/software/hadoop-3.3.4/bin目录执行格式化命令。在master节点执行:hdfsnamenode-format如果没有发生意外,则会提示格式化成功,并且NameNode元数据的存储位置是hdfs-site.xml配置文件中指定的位置。如图2-40所示。图2-40格式化HDFS成功标识③启动HDFS在master节点执行,如图2-41所示。start-dfs.sh图2-41启动HDFS④通过查看进程的方式验证HDFS启动成功分别在master、slave1、slave2三台机器上执行jps命令,查看HDFS服务是否已经启动。若启动成功,在master上会看到相应的NameNode、SecondaryNameNode进程信息。如图2-42所示。图2-42查看master进程在slave1、slave2上会看到相应的DataNode进程信息。如图2-43、图2-44所示。图2-43查看slave1进程图2-44查看slave2进程此操作也可以使用提供的脚本文件进行查看,结果如图2-所示。~/shell/jps_all.sh图2-44使用脚本查看进程相关脚本请查看附录的jps_all.sh内容。(6)通过Shell指令上传文件到HDFS①新建一个测试文件在master节点上执行,效果如图2-所示:mkdir/root/datascd/root/datasecho123>>data.txt②上传data.txt文件到HDFS集群,如图2-45所示:hdfsdfs-put/root/datas/data.txt/hdfsdfs-ls/图2-45上传文件到HDFS③查看WebUI页面在浏览器中打开master的ip地址加端口:31:9870格式:master的ip:9870。如图2-46所示。图2-46查看WebUI界面点击WebUI界面上方菜单栏的“Utilities”,选择“Browsethefilesystem”,可以看到上传到HDFS集群根路径的data.txt文件。如图2-47所示。图2-47查看HDFS的文件接着,可以按照图2-所示的步骤,查看具体data.txt的内容。具体操作步骤为:先点击①,会弹出窗口,再点击②,则会提示③的内容。④设置Windows电脑与三台节点的映射关系为了方便后期操作,可以配置Windows电脑与三台节点的映射关系,以达到直接通过主机名和端口号达到访问效果。配置文件路径为:C:\Windows\System32\drivers\etc\hosts修改此文件,将映射关系添加上:31master32slave133slave2此时在浏览器地址栏输入地址:http://master:9870。则一样可以访问NameNode的WebUI页面。6.实训总结本实训通过安装部署HDFS集群以及创建相关目录、上传相关的数据文件到HDFS等操作,对HDFS分布式文件系统的基础配置及操作有了一定的认识。总览整一个操作流程,下面总结一下大家在操作过程中比较容易遇到的错误:①需要特别注意的是JDK是安装在三台服务器上的。②最后配置好Hadoop的时候,每一台服务器上的Hadoop目录里的内容其实是一样的,因为是从master节点复制到另外两台slaves上的,所以如果在操作过程中,如果发现master上的配置文件有配置错,那么一定要记得将master上的正确文件也同步到slaves节点上去。③如果在操作的时候,发现格式化后发现自己配置错了,需要重新配置,记得将配置文件core-site.xml里的hadoop.tmp.dir配置项所配置的目录以及hdfs-site.xml里配置的NameNode元数据存储目录和DataNode数据存储目录全部删除掉,再重新格式化,否则会报错,如遇其他方法,请自行上网查阅资料了解。实训2.3HDFS的读写API操作1.实训目的通过本实训使学生学会在本地(Windows环境)编写Java代码,学会用离线工程编写HDFS的读写操作,并且学会打包工程上传到服务器执行。2.实训内容该实训需要每位学生在已搭建HDFS开发环境上编写了HDFS写、读程序代码;并打包项目,在集群环境上执行该程序。3.实训要求以小组为单元进行实训,每小组5人,小组自协商选一位组长,由组长安排和分配实训任务,具体参考实训操作环节。4.准备知识(1)IDEA编辑器介绍IDEA全称是IntelliJIDEA,是Java语言开发的集成环境(也可用于其他语言),IntelliJ在业界被公认为最好的java开发工具之一,特别是在智能代码助手、代码自动提示、重构、SFTP、FTP、J2EE支持、代码审查、Ant、JUnit、CVS整合、创新的GUI设计等方面,发挥着巨大的作用。IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。IDEA的版本分为商业版本与开源版本,对比如图2-50所示。图2-50IDEA编辑器版本对比(2)Java实现文件读写在操作HDFS的读写操作之前,我们最好有一点Java基础,比如说Java是怎么实现Java的文件读写的。下面列举几种Java的读写文件方式,供大家自行搜索资料学习。方式一:InputStream、OutputStream方式二(缓存字节流):BufferedInputStream、BufferedOutputStream使用方式与字节流差不多,但是效率比后者更高(推荐使用)。方式三:InputStreamReader、OutputStreamWriter方式四:BufferedReader、BufferedWriter方式五:Reader、PrintWriter建议使用第二种方式BufferedInputStream、BufferedOutputStream。5.实训步骤(1)前提工作①需要提前安装好Windows系统上的JDK,本实训教程安装的版本为:jdk-11.0.6。②需要将Hadoop的安装包解压在Windows系统上的某一路径。③需要安装好IDEA编辑器,本次实训使用的版本为:ideaIC-2022.2.3。(2)新建Java项目①打开IDEA后,新建一个项目,点击“NewProject”,如图2-51所示。图2-51项目类型选择在弹出的窗口中,完成以下配置,如图2-52所示。项目名称:hadoop-projectJDK:选择自己Windows上安装的JDK图2-52完成相应配置然后点击窗口下方的“Create”,接着会新建好项目。(3)项目配置①右击“src”,选择“New”,点击“Package”,建一个包,名为:“com.bigdata”,如图2-53所示。图2-53新建包②然后编辑项目结构,点击“File”,点击“ProjectStructure”按钮,如图2-54所示。图2-54编辑项目结构③点击“Libraries”,引入编写HDFS程序相关的jar包依赖。具体操作:点击“Libraries”→“+”→“Java”,然后找到解压后的Hadoop安装包,导入一个是公共依赖包,如图2-57所示。图2-57导入HDFS公共依赖包导入HDFS其他的相关依赖包,如图5-58所示。图2-58导入HDFS相关依赖包(4)编写HDFS代码在com.bigdata包里新建一个WriteFile类,编写WriteFile类代码,代码如下:packagecom.bigdata;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FSDataOutputStream;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;importjava.io.IOException;import.URI;publicclassWriteFile{publicstaticvoidmain(String[]args)throwsIOException{Stringcontent="Hello,bigdata!";Stringdest="hdfs://master:8020/test.txt";Configurationconfiguration=newConfiguration();FileSystemfileSystem=FileSystem.get(URI.create(dest),configuration);FSDataOutputStreamout=fileSystem.create(newPath(dest));out.write(content.getBytes("UTF-8"));out.close();}}注意:请按照实际情况修改master的主机名!(5)编写HDFS读操作代码在com.bigdata包里新建一个ReadFile类,编写ReadFile类,代码如下:packagecom.bigdata;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FSDataInputStream;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;importjava.io.*;import.URI;publicclassReadFile{publicstaticvoidmain(String[]args)throwsIOException{Stringdest="hdfs://master:8020/test.txt";Configurationconfiguration=newConfiguration();FileSystemfileSystem=FileSystem.get(URI.create(dest),configuration);FSDataInputStreamin=fileSystem.open(newPath(dest));BufferedReaderbufferedReader=newBufferedReader(newInputStreamReader(in));Stringline=null;while((line=bufferedReader.readLine())!=null){System.out.println(line);}in.close();}}(6)打包代码到服务器①点击“ProjectStructure”→“Artifacts”→“+”→“JAR”→“Frommoduleswithdependencies...”,如图2-59所示。图2-59添加JAR②点击之后会弹出设置界面,如图2-60所示。图2-60jar包配置因为我们有几个main方法,所以我们可以不选择“MainClass”,直接点击“OK”即可。③因为服务器上已经有了相应的jar包,所以需要排除掉再打包。点击“Artifacts”→“hadoop-project:jar”→“OutputLayout”,勾选相应的jar包,点击“-”进行移除。如图2-61所示。图2-61删除多余的JAR包然后一直点击“OK”即可。(7)打包操作①打包之前,有一点需要特别注意,如果你的服务器上的JDK版本是8,而在Windows的版本为jdk11的话,需要设置一下打包的项目语言级别才能兼容。点击“ProjectStructure”→“Project”,在“LanguageLevel”选择服务器上相应的语言级别,JDK8对应的是8级别,如图2-62所示。图2-62选择对应的语言级别②点击菜单栏的“Build”→“BuildArtifacts...”,在弹出的选项中,选择“Build”即可。如图2-64所示。图2-64构建jar包④稍等一会,执行完后就可以看到out目录生成了一个jar包,如图2-65所示。图2-65查看生成的jar包(8)上传服务器并执行①使用MobaXterm工具上传jar包到master节点的/root/jars文件夹(没有此目录则新建创建)。如图2-所示。图2-查看jar包上传结果②启动HDFS(如果启动则无需进行)start-dfs.sh③执行jar包(在jar包所在的路径下,此处路径为:/root/jars)
先执行HDFS的写操作代码(如HDFS上已有/test.txt文件会报错,请先删除或者更换代码里的文件名):hadoopjarhadoop-project.jarcom.bigdata.WriteFile查看是否写内容进去,查看结果如图2-67所示。hdfsdfs-cat/test.txt图2-67查看写文件结果展示执行完后发现已经可以查看到有写入了数据,然后执行读取HDFS数据的代码,读取结果如图6-68所示。hadoopjarhadoop-project.jarcom.bigdata.ReadFile图2-68执行读文件结果展示可以看到有结果输出。6.实训总结本次实训主要是在IDEA上编写HDFS读、写操作程序代码,并打包在集群环境上执行;学生通过本次实训的学习,可以加深对HDFS的读写逻辑以及编程原理的认识。本实训不用联网也可以执行HDFS的读写操作,此外,一样也可以执行Spark、机器学习等案例。本实训非常关键,因为网络不好或者是简单的项目,这种传统的方式也是非常简单方便的。总览整一个操作流程,下面总结一下同学们在操作过程中比较容易遇到的错误:同学们可能分不清Windows、Client、服务器、HDFS集群的相关概念,此处做一个简单的说明以便同学们理解,后面还会遇到很多相关的概念,所以务必要理清思路。Windows:指的是你的个人电脑或者学校里的实训室的电脑,是提供给你学习的,此电脑上应该安装好了JDK,而且也应该先安装好代码编辑工具,本次实训使用的编辑工具是IDEA。如果是使用Eclipse或者其他编辑工具,也是可以的。服务器:服务器在工作上一般指的是物理服务器或者云服务器。因为在学习的时候,如果使用此类服务器,需要投入的资金成本会很高,所以学习的时候,可以选择其他服务器。比如说在个人电脑上安装多台虚拟机,通过VMWare等软件,安装好一台虚拟机,然后复制多两台或者更多台出来,那这些虚拟机就是所说的服务器,也可以称之为节点或者机器。如果是使用大数据学习平台的话,平台会默认分发三台服务器给每位学生。HDFS集群:指的是安装在服务器上的软件。在三台服务器上都安装了Centos操作系统,然后在系统之上,又部署好了HDFS,组成了一个集群。类似于三台电脑,都安装了Windows系统,然后又在此三台电脑上又安装上了通讯软件。Client:此处指的是所提交作业的那台服务器,本次实训过程中,将写好的代码进行打成jar包,然后再上传到master机器上,最后执行jar包,在哪里执行jar包,哪里就充当着Client的角色。实训3.1部署YARN集群1.实训目的通过本实训熟悉如何构建YARN分布式集群,并能够使用YARN集群提交一些简单的任务,理解YARN在Hadoop生态中的作用与意义。2.实训内容构建YARN集群,并使用YARN集群提交简单的任务,观察任务提交之后YARN的执行过程。3.实训要求以小组为单元进行实训,每小组5人,小组自协商选一位组长,由组长安排和分配实训任务,具体参考实训操作环节。4.准备知识需要有计算机基础及Linux基础能力,可参考教材后面的Linux附件资料。5.实训步骤(1)在master机器上进行YARN配置①编辑YARN的配置文件修改文件为“/opt/software/hadoop-3.3.4/etc/hadoop/yarn-site.xml”在master节点执行:cd/opt/software/hadoop-3.3.4/etc/hadoopvimyarn-site.xml将如下内容添加到最后两行的<configuration></configuration>标签之间: <property><name>yarn.resourcemanager.hostname</name><value>master</value><description>表示ResourceManager服务器</description></property><property><name>yarn.resourcemanager.address</name><value>master:8032</value><description>表示ResourceManager监听的端口</description></property><property><name>yarn.nodemanager.local-dirs</name><value>/opt/software/hadoop-3.3.4/yarn/local-dir1,/opt/software/hadoop-3.3.4/yarn/local-dir2</value><description>表示NodeManager中间数据存放的地方</description></property><property><name>yarn.nodemanager.resource.memory-mb</name><value>1024</value><description>表示这个NodeManager管理的内存大小</description></property><property><name>yarn.nodemanager.resource.cpu-vcores</name><value>2</value><description>表示这个NodeManager管理的cpu个数</description></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value><description>为MapReduce应用打开shuffle服务</description></property><property><name>yarn.nodemanager.vmem-pmem-ratio</name><value>4</value><description>配置虚拟内存与物理内存比例,默认值是2.1</description></property>yarn-site.xml是YARN守护进程的配置文件,将虚拟内存与物理内存的比例调整成4倍,避免执行任务时报错。②拷贝配置文件到slave1、slave2~/shell/scp_call.shyarn-site.xml(2)启动HDFS和YARN在master节点执行(如已启动则无需启动)。操作效果如图2-所示。start-dfs.shstart-yarn.sh图3-4启动HDFS和YARN图示(3)验证YARN启动成功查看各节点的进程情况图3-4查看各节点的进程(4)查看YARN的WebUI界面在浏览器中打开master的ip地址加端口:31:8088格式:master的ip:8088。如图2-46所示。图3-4查看YARN的WebUI界面(5)提交MapReduce任务①编辑MapReduce配置文件修改文件为“/opt/software/hadoop-3.3.4/etc/hadoop/mapred-site.xml”在master节点执行:vimmapred-site.xml编辑此文件,在此文件的configuration标签间中加入以下内容:<property><name></name><value>yarn</value></property><property><name>mapreduce.jobhistory.address</name><value>master:10020</value></property><property><name>mapreduce.jobhistory.webapp.address</name><value>master:19888</value></property><property><name>yarn.app.mapreduce.am.resource.mb</name><value>1024</value></property><property><name>yarn.app.mapreduce.am.resource.cpu-vcores</name><value>1</value></property><property><name>yarn.app.mapreduce.am.env</name><value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value></property><property><name>mapreduce.map.env</name><value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value></property><property><name>mapreduce.reduce.env</name><value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value></property>此配置指定了MapReduce作业运行在YARN上,同时对JobHistoryserver进行配置,方便查看相关日志;MapReduce作业需要的内存和虚拟cpu数;并且配置了MapReduce作业相关的环境变量。②拷贝配置文件到slave1、slave2~/shell/scp_call.shmapred-site.xml③提交MapReduce任务接下来提交Hadoop内置的估算π值的任务。在master节点执行:hadoopjar$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jarpi510命令最后两个两个参数的含义:第一个参数是指要运行map的次数,这里是5次;第二个参数是指每个map任务,取样的个数;而两数相乘即为总的取样数。执行过程如图3-5所示。图3-5提交PI任务过程(6)实训结果①提交PI任务之后WebUI界面上看到的信息。如图3-6、图3-7所示。图3-6提交PIMR任务图3-7计算结果6.实训总结通过本实训构建YARN集群,并且使用YARN集群提交任务,观察结果;使学生了解YARN框架,以及YARN运行流程,理解YARN作为Hadoop生态中的资源管理器的意义。大家在实训结束后,应自行查阅资料了解YARN的相关配置含义,并且熟悉WebUI界面的组成与作用。实训3.2单词计数1.实训目的基于MapReduce编程思想,编写WordCount程序。2.实训内容理解MapReduce编程思想,掌握编写MapReduce版本WordCount,了解该程序的执行流程,结合执行过程与结果,理解MapReduce的原理。3.实训要求以小组为单元进行实训,每小组5人,小组自协商选一位组长,由组长安排和分配实训任务,具体参考实训操作环节。小组成员需要具备HDFS分布式存储基础相关知识,并确保具备前面的实训环境。4.准备知识(1)MapReduce编程编写在Hadoop中依赖YARN框架执行的MapReduce程序,大部分情况下只需要编写相应的Map处理和Reduce处理过程的业务程序即可,因为大部分的代码,Hadoop已经帮我们写好了。所以编写一个MapReduce程序并不复杂,关键点在于掌握分布式的编程思想和方法,主要将计算过程分为以下五个步骤:①迭代。遍历输入数据,并将之解析成<Key,Value>键值对。②将输入的<Key,Value>键值对映射(map)成新的<Key,Value>键值对。③依据Key对中间数据进行分组。④以组为单位对数据进行Reduce。⑤迭代。将最终产生的<Key,Value>键值对保存到输出文件中。(2)JavaAPI解析①InputFormat:用于描述输入数据的格式,常用为TextInputFormat,其提供如下两个功能:数据切分:按照某种策略将输入数据切分成若干个数据块,以便确定MapTask个数以及对应的数据分片。为Map任务提供数据:给定某个数据分片,能将其解析成一个个的<Key,Value>键值对。②OutputFormat:用于描述输出数据的格式,它能够将用户提供的<Key,Value>键值对写入特定格式的文件中。③Mapper/Reducer:封装了应用程序的数据处理逻辑。④Writable:Hadoop自定义的序列化接口,实现该类的接口可以用作MapReduce过程中的Value数据使用。⑤WritableComparable:在Writable基础上继承了Comparable接口,实现该类的接口可以用作MapReduce过程中的Key数据使用。因为Key包含了比较和排序的操作。5.实训步骤本实训包含四大步骤:准备运行环境、准备统计数据、编写MapReduce程序、打包并运行代码。查看运行结果这几个步骤,详细如下:(1)准备运行环境启动三台节点,然后在master中启动HDFS和YARN:start-dfs.shstart-yarn.sh(2)准备统计数据新建待统计文件word.txt,并上传数据到HDFS上vim/root/datas/word.txt内容如下:hellohdfshadoophivehellomapreducehellosparksparkaibigdata将word.txt文件上传到HDFS集群hdfsdfs-put/root/datas/word.txt/查看是否上传成功,如图3-所示则表示上传成功。图3-查看上传结果(3)引入编写MapReduce程序相关的jar包本次实训继续使用实训2.3的环境,但编写MapReduce程序需要引入相关的jar包,此时继续引入hadoop-mapreduce-client-core.jar包。如图3-所示。图3-导入MapReduce依赖包(4)编写MapReduce程序编写MapReduce程序主要是编写Map类和Reduce类,其中Map过程需要继承org.apache.hadoop.mapreduce包中Mapper类,并重写其map方法;Reduce过程需要继承org.apache.hadoop.mapreduce包中Reducer类,并重写其reduce方法。在com.bigdata包(没有则新建)下新建WordCount类,添加以下代码:packagecom.bigdata;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.io.IntWritable;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.Job;importorg.apache.hadoop.mapreduce.Mapper;importorg.apache.hadoop.mapreduce.Reducer;importorg.apache.hadoop.mapreduce.lib.input.TextInputFormat;importorg.apache.hadoop.mapreduce.lib.output.TextOutputFormat;importorg.apache.hadoop.mapreduce.lib.partition.HashPartitioner;importjava.io.IOException;importjava.util.StringTokenizer;publicclassWordCount{publicstaticclassTokenizerMapperextendsMapper<Object,Text,Text,IntWritable>{privatefinalstaticIntWritableone=newIntWritable(1);privateTextword=newText();//map方法,划分一行文本,读一个单词写出一个<单词,1>publicvoidmap(ObjectKey,Textvalue,Contextcontext)throwsIOException,InterruptedException{StringTokenizeritr=newStringTokenizer(value.toString());while(itr.hasMoreTokens()){word.set(itr.nextToken());context.write(word,one);//写出<单词,1>}}}//定义reduce类,对相同的单词,把它们<K,VList>中的VList值全部相加publicstaticclassIntSumReducerextendsReducer<Text,IntWritable,Text,IntWritable>{privateIntWritableresult=newIntWritable();publicvoidreduce(TextKey,Iterable<IntWritable>values,Contextcontext)throwsIOException,InterruptedException{intsum=0;for(IntWritableval:values){sum+=val.get();//相当于<Hello,1><Hello,1>,将两个1相加}result.set(sum);context.write(Key,result);//写出这个单词,和这个单词出现次数<单词,单词出现次数>}} publicstaticvoidmain(String[]args)throwsException{//主方法,函数入口 //TODOAuto-generatedmethodstub Configurationconf=newConfiguration();//实例化配置文件类Jobjob=newJob(conf,"WordCount");//实例化Job类job.setInputFormatClass(TextInputFormat.class);//指定使用默认输入格式类TextInputFormat.setInputPaths(job,args[0]);//设置待处理文件的位置job.setJarByClass(WordCount.class);//设置主类名job.setMapperClass(TokenizerMapper.class);//指定使用上述自定义Map类job.setCombinerClass(IntSumReducer.class);//指定开启Combiner函数job.setMapOutputKeyClass(Text.class);//指定Map类输出的<K,V>,K类型job.setMapOutputValueClass(IntWritable.class);//指定Map类输出的<K,V>,V类型job.setPartitionerClass(HashPartitioner.class);//指定使用默认的HashPartitioner类job.setReducerClass(IntSumReducer.class);//指定使用上述自定义Reduce类job.setNumReduceTasks(Integer.parseInt(args[2]));//指定Reduce个数job.setOutputKeyClass(Text.class);//指定Reduce类输出的<K,V>,K类型job.setOutputValueClass(Text.class);//指定Reduce类输出的<K,V>,V类型job.setOutputFormatClass(TextOutputFormat.class);//指定使用默认输出格式类TextOutputFormat.setOutputPath(job,newPath(args[1]));//设置输出结果文件位置System.exit(job.waitForCompletion(true)?0:1);//提交任务并监控任务状态 }}(5)打包并运行代码打包后的文件名为hadoop-project.jar,上传到master节点的/root/jars目录。主类WordCount位于包com.bigdata下,则可使用如下命令向YARN集群提交本应用。yarnjarhadoop-project.jarcom.bigdata.WordCount/word.txt/wc_output1其中“yarn”为命令,“jar”为命令参数,后面紧跟打包后的代码地址,“com.bigdata”为包名,“WordCount”为主类名,第一个参数“/word.txt”为输入文件在HDFS中的位置,第二个参数“/wc_output”为输出文件在HDFS中的位置,第三个参数“1”表示需要统计成Reduce文件的个数。注意:“/word.txt”、“/wc_output”、“1”之间都有一个空格。同时需要启动HDFS和YARN。(6)实训结果程序运行成功控制台上的显示内容如图3-15、图3-16所示。图3-15向YARN集群提交应用图3-16程序运行结果在HDFS上查看结果,如图3-17、图3-18所示。hdfsdfs-ls/wc_output图3-17查看/wc_output目录下的目录和文件hdfsdfs-cat/wc_output/part-r-00000图3-18HDFS上显示结果6.实训总结实训基于MapReduce编程思想,编写MRJava版本的WordCount程序,并且在集群上执行;通过分析执行过程,对MapReduce编程思想、JavaAPI调用有所认知和学习。本实训需要注意的地方有下面三点:(1)本实训是进行分布式计算,统计的是HDFS集群上的数据,所以应该先安装好HDFS集群,然后再将数据放到HDFS上。(2)使用的计算引擎为MapReduce,资源调度框架为YARN,所以均需要配置好,如有遗忘,请翻阅上次实训任务。(3)执行作业的时候,请注意查看源码,需要传入的是多少个参数,不要漏参数。此外,自己可以尝试一下故意少写一个参数,然后查看报错信息和日志,学会去分析错误,然后解决错误。实训4.1HBase安装与配置1.实训目的通过本实训任务,理解Zookeeper的概念、掌握Zookeeper完全分布式环境搭建、认识HBase的基本架构、理解HBase的原理、完成HBase的安装与部署。2.实训内容安装和配置Zookeeper,学会分布式Zookeeper的安装;安装HBase,配置部署HBase,WebUI查看HBase。3.实训要求以小组为单元进行实训,每小组5人,小组自协商选一位组长,由组长安排和分配实训任务,具体参考实训操作环节。4.准备知识(1)Zookeeper的使用场景①HA机制(高可用机制)适合于HDFS、HBase等的HA,如在前面HBase的master、backup_master,两台节点都去ZK里面创建持久节点,当一个节点创建成功,另外一个就会创建失败。另外一种是创建临时顺序节点,比如说第一个连接的叫znode1、第二个连接的就会叫znode2、第三个连接的就会叫znode3,连接的节点会按照名词排序,此时我们定义节点最小的为master,当如果节点最小的节点(znode1)宕机,则znode2就是最小,此时,这个znode2所连接的服务器就切换成master角色了。②配置文件同步分布式系统中会有很多台服务器,服务器的配置文件要一直,如果其中某个配置发生了变化,那么每一台也应该改一样,操作起来十分繁琐,此时我们可以使用Zookeeper来同步配置。利用Zookeeper监控此配置文件,如果发生了变化,则执行另外的同步配置的代码即可。③分布式锁使用Zookeeper可以解决分布式环境下多个程序对一个共享资源的竞争的关系,防止同一资源在同一时刻被多个程序更改,实现过程一样可以使用与HA相类似的操作。(2)HBase HBase的数据模型如表4-4所示。表4-4HBase的数据模型RowKeyTimeStampCF1CF2CF3“RK000001”T1CF2:q1=val3CF3:q2=val2T2CF1:q3=val4T3CF2:q4=val5(3)RowKey与其它Nosql数据库一样,RowKey是用来检索记录的主键。访问HBasetable中的行,只有3种方式:①通过单个RowKey访问②通过RowKey的range③全表扫描RowKey行键(RowKey)可以是任意字符串(最大长度是64KB,实际应用中长度一般为10-100bytes),在HBase内部,RowKey保存为字节数组。存储时,数据按照RowKey的字典序(byteorder)排序存储。设计Key时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。注意:字典序对int排序的结果是:1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,…,9,91,92,93,94,95,96,97,98,99。要保持整形的自然序,行键必须用0作左填充。行的一次读写是原子操作(不论一次读写多少列)。这个设计决策能够使用户很容易的理解程序在对同一个行进行并发更新操作时的行为。(4)列族HBase表中的每个列,都归属与某个列族。列族是表的chema的一部分(而列不是),必须在使用表之前定义。列名都以列族作为前缀。例如”courses:history”,”courses:math”都属于”courses”这个列族。访问控制、磁盘和内存的使用统计都是在列族层面进行的。实际应用中,列族上的控制权限能帮助我们管理不同类型的应用:我们允许一些应用可以添加新的基本数据、一些应用可以读取基本数据并创建继承的列族、一些应用则只允许浏览数据(甚至可能因为隐私的原因不能浏览所有数据)。(5)时间戳HBase中通过row和columns确定的为一个存贮单元称为cell。每个cell都保存着同一份数据的多个版本。版本通过时间戳来索引。时间戳的类型是64位整型。时间戳可以由HBase(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值。如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。每个cell中,不同版本的数据按照时间倒序排序,即最新的数据排
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 健康数据标准化与人工智能的协同发展
- 医疗卫生行业探秘
- 电化学储能电站项目建设条件
- 2025年机械治疗及病房护理设备项目规划申请报告模板
- 骨科气压治疗仪应用指南
- 2025年高效余热回收装置项目规划申请报告模板
- 狱警面试题目及答案
- 17时事试题及答案
- 压疮护理措施试题及答案
- 管理问题面试题目及答案
- 中药饮片临方炮制规范-公示稿
- 2023-2024学年江西省吉安市高二下学期期末教学质量检测数学试题(含答案)
- 云南省澄江一中2025届数学高一下期末学业水平测试模拟试题含解析
- 2024年01月东莞滨海湾新区管理委员会下属事业单位2024年公开选聘1名人员笔试历年典型考题及考点研判与答案解析
- 异丙醇体检方案
- 测量工程施工设备安装施工测量
- MT-T 1199-2023 煤矿用防爆柴油机无轨胶轮运输车辆安全技术条件
- 道路清扫保洁及垃圾清运服务投标方案技术标
- 2024国家能源集团宁夏煤业有限责任公司校园招聘笔试参考题库含答案解析
- 山东省烟草专卖局(公司)笔试试题2023
- 配电网居民客户端低电压治理方案探讨
评论
0/150
提交评论