




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-PAGE48-《物联网数据处理》实验指导书实验一:熟悉常用的Linux操作(2学时)一、实验目的与要求1、熟悉安装和配置Linux。2、熟悉常用的Linux操作。6、总结在调试过程中的错误。二、实验类型验证型三、实验原理及说明通过实际操作,使学生对Linux的使用有一个更深刻的理解;熟悉Linux的开发环境及程序结构。四、实验仪器安装操作系统:Linux五、实验内容和步骤熟悉常用的Linux操作请按要求上机实践如下linux基本命令。cd命令:切换目录(1)切换到目录/usr/local(2)去到目前的上层目录(3)回到自己的主文件夹ls命令:查看文件与目录(4)查看目录/usr下所有的文件mkdir命令:新建新目录(5)进入/tmp目录,创建一个名为a的目录,并查看有多少目录存在(6)创建目录a1/a2/a3/a4rmdir命令:删除空的目录(7)将上例创建的目录a(/tmp下面)删除(8)删除目录a1/a2/a3/a4,查看有多少目录存在cp命令:复制文件或目录(9)将主文件夹下的.bashrc复制到/usr下,命名为bashrc1(10)在/tmp下新建目录test,再复制这个目录内容到/usrmv命令:移动文件与目录,或更名(11)将上例文件bashrc1移动到目录/usr/test(12)将上例test目录重命名为test2rm命令:移除文件或目录(13)将上例复制的bashrc1文件删除(14)rm-rf将上例的test2目录删除cat命令:查看文件内容(15)查看主文件夹下的.bashrc文件内容tac命令:反向列示(16)反向查看主文件夹下.bashrc文件内容more命令:一页一页翻动查看(17)翻页查看主文件夹下.bashrc文件内容head命令:取出前面几行(18)查看主文件夹下.bashrc文件内容前20行(19)查看主文件夹下.bashrc文件内容,后面50行不显示,只显示前面几行tail命令:取出后面几行(20)查看主文件夹下.bashrc文件内容最后20行(21)查看主文件夹下.bashrc文件内容,只列出50行以后的数据touch命令:修改文件时间或创建新文件(22)在/tmp下创建一个空文件hello并查看时间(23)修改hello文件,将日期调整为5天前chown命令:修改文件所有者权限(24)将hello文件所有者改为root帐号,并查看属性find命令:文件查找(25)找出主文件夹下文件名为.bashrc的文件tar命令:压缩命令tar-zcvf/tmp/etc.tar.gz/etc(26)在/目录下新建文件夹test,然后在/目录下打包成test.tar.gz(27)解压缩到/tmp目录tar-zxvf/tmp/etc.tar.gzgrep命令:查找字符串(28)从~/.bashrc文件中查找字符串'examples'(29)配置Java环境变量,在~/.bashrc中设置(30)查看JAVA_HOME变量的值六、注意事项命令的名称。七、预习与思考题1、Linux操作系统的安装和使用2、常用的命令
实验二:安装Hadoop开发环境(2学时)一、实验目的与要求1.掌握Linux虚拟机安装方法或者双操作系统安装方法。Hadoop在Linux操作系统上运行可以发挥最佳性能,鉴于目前很多读者可能正在使用Windows操作系统,因此,为了完成本书的后续实验,这里有必要通过本实验让读者掌握在Windows操作系统上搭建Linux虚拟机的方法,以及安装双操作系统的方法(同时安装Windows和Linux系统,电脑开机时,可以选择登录哪个系统)。2.掌握Hadoop的伪分布式安装方法。很多读者并不具备集群环境,需要在一台机器上模拟一个小的集群,因此,需要通过本实验让读者掌握在单机上进行Hadoop的伪分布式安装方法。二、实验类型综合型三、实验原理及说明通过实际操作,使学生对Hadoop的使用有一个更深刻的理解;熟悉Hadoop的开发环境及程序结构。四、实验仪器操作系统:Windows系统或者Ubuntu(推荐)。虚拟机软件:推荐使用的开源虚拟机软件为VirtualBox。VirtualBox是一款功能强大的免费虚拟机软件,它不仅具有丰富的特色,而且性能也很优异,简单易用,可虚拟的系统包括Windows、MacOSX、Linux、OpenBSD、Solaris、IBMOS2甚至Android4.0系统等操作系统。读者可以在Windows系统上安装VirtualBox软件,然后在VirtualBox上安装并且运行Linux操作系统。本次实验默认的Linux发行版为Ubuntu14.04。五、实验内容和步骤共享文件夹设置virtualbox中ubuntu和windows共享文件夹设置先关闭ubuntu,在virtualbox“设置”中找到“共享文件夹”,点击进入,点击右边添加目录按钮,添加windows中要共享的目录,取一个名。比如我在D盘建一个名为share的文件夹,如下图:重启ubuntu,在ubuntu系统最上端“设备”中找到“共享文件夹”,点击进入,点击右边添加目录按钮,添加第二步操作的共享目录,如进入虚拟Ubuntu,在命令行终端下输入:sudomkdir/mnt/sharedsudomount-tvboxsfshare/mnt/shared其中"share"是之前创建的共享文件夹的名字。OK,现在Ubuntu和主机可以互传文件了。要想自动挂载的话,可以在/etc/fstab中添加一项share/mnt/sharedvboxsfrw,gid=100,uid=1000,auto00Java安装第一步获取安装包。到oracle官方去下载jdk安装包,选择版本时注意选择自己的系统的版本。第二步:解压安装sudotarzxvf./jdk-7-linux-i586.tar.gz-C/usr/lib/jvmcd/usr/lib/jvmsudomvjdk1.7.0/java-7-sun第三步:修改环境变量vi~/.bashrc添加:exportJAVA_HOME=/usr/lib/jvm/java-7-sunexportJRE_HOME=${JAVA_HOME}/jreexportCLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/libexportPATH=${JAVA_HOME}/bin:$PATH保存退出,输入以下命令使之立即生效。source~/.bashrc第四步:配置默认JDK版本由于ubuntu中可能会有默认的JDK,如openjdk,所以,为了将我们安装的JDK设置为默认JDK版本,还要进行如下工作。执行代码:sudoupdate-alternatives--install/usr/bin/javajava/usr/lib/jvm/java-7-sun/bin/java300sudoupdate-alternatives--install/usr/bin/javacjavac/usr/lib/jvm/java-7-sun/bin/javac300sudoupdate-alternatives--install/usr/bin/jarjar/usr/lib/jvm/java-7-sun/bin/jar300sudoupdate-alternatives--install/usr/bin/javahjavah/usr/lib/jvm/java-7-sun/bin/javah300sudoupdate-alternatives--install/usr/bin/javapjavap/usr/lib/jvm/java-7-sun/bin/javap300执行代码:sudoupdate-alternatives--configjava系统会列出各种JDK版本,如下所示:baidu@baidu:~$sudoupdate-alternatives--configjava有3个候选项可用于替换java(提供/usr/bin/java)。选择路径优先级状态*0/usr/lib/jvm/java-6-openjdk/jre/bin/java1061自动模式1/usr/lib/jvm/java-6-openjdk/jre/bin/java1061手动模式2/usr/lib/jvm/java-6-sun/jre/bin/java63手动模式3/usr/lib/jvm/java-7-sun/bin/java300手动模式要维持当前值[*]请按回车键,或者键入选择的编号:3update-alternatives:使用/usr/lib/jvm/java-7-sun/bin/java来提供/usr/bin/java(java),于手动模式中。第五步:测试baidu@baidu:~$java-versionjavaversion"1.7.0"Java(TM)SERuntimeEnvironment(build1.7.0-b147)JavaHotSpot(TM)ServerVM(build21.0-b17,mixedmode)Hadoop安装1、创建hadoop用户安装Ubuntu的时候不是用的“hadoop”用户,那么需要增加一个名为hadoop的用户。首先按ctrl+alt+t打开终端窗口,输入如下命令创建新用户:sudouseradd-mhadoop-s/bin/bash接着使用如下命令设置密码,可简单设置为hadoop,按提示输入两次密码:sudopasswdhadoop可为hadoop用户增加管理员权限,方便部署,避免一些对新手来说比较棘手的权限问题:sudoadduserhadoopsudo最后注销当前用户(点击屏幕右上角的齿轮,选择注销),返回登陆界面。在登陆界面中选择刚创建的hadoop用户进行登陆。2.安装SSH、配置SSH无密码登陆集群、单节点模式都需要用到SSH登陆(类似于远程登陆,你可以登录某台Linux主机,并且在上面运行命令),Ubuntu默认已安装了SSHclient,此外还需要安装SSHserver:sudodpkg-iopenssh-server_6.0p1-3ubuntu1_i386.debsudodpkg-issh_6.0p1-3ubuntu1_all.deb安装后,可以使用如下命令登陆本机:sshlocalhost利用ssh-keygen生成密钥,并将密钥加入到授权中:$exit#退出刚才的sshlocalhost$cd~/.ssh/#若没有该目录,请先执行一次sshlocalhost$ssh-keygen-trsa#会有提示,都按回车就可以$cat./id_rsa.pub>>./authorized_keys#加入授权$sudotar-zxf~/下载/hadoop-2.6.0.tar.gz-C/usr/local#解压到/usr/local中$cd/usr/local/$sudomv./hadoop-2.6.0/./hadoop#将文件夹名改为hadoop$sudochown-Rhadoop./hadoop#修改文件权限$cd/usr/local/hadoop$./bin/hadoopversion六、注意事项ApacheHadoop官网下载Hadoop2.7.1版本安装文件。七、预习与思考题1、在Linux环境下完成伪分布式环境的搭建,并运行Hadoop自带的WordCount实例检测是否运行正常。
实验三:熟悉Hadoop平台(2学时)一、实验目的与要求1、理解Hadoop平台运行原理。2、熟悉Hadoop的操作二、实验类型设计型三、实验原理及说明通过实际操作,使学生对Hadoop的使用有一个更深刻的理解;熟悉Hadoop的开发环境及程序结构。四、实验仪器安装Ubuntu系统的计算机若干台五、实验内容和步骤1.Hadoop单机配置(非分布式)Hadoop默认模式为非分布式模式(本地模式),无需进行其他配置即可运行。非分布式即单Java进程,方便进行调试。Hadoop附带了丰富的例子(运行./bin/hadoopjar./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar可以看到所有例子),包括wordcount、terasort、join、grep等。在此我们选择运行grep例子,我们将input文件夹中的所有文件作为输入,筛选当中符合正则表达式dfs[a-z.]+的单词并统计出现的次数,最后输出结果到output文件夹中。执行成功后如下所示,输出了作业的相关信息,输出的结果是符合正则的单词dfsadmin出现了1次注意,Hadoop默认不会覆盖结果文件,因此再次运行上面实例会提示出错,需要先将./output删除。2.Hadoop伪分布式配置Hadoop可以在单节点上以伪分布式的方式运行,Hadoop进程以分离的Java进程来运行,节点既作为NameNode也作为DataNode,同时,读取的是HDFS中的文件。Hadoop的配置文件位于/usr/local/hadoop/etc/hadoop/中,伪分布式需要修改2个配置文件core-site.xml和hdfs-site.xml。Hadoop的配置文件是xml格式,每个配置以声明property的name和value的方式来实现。修改配置文件core-site.xml(通过gedit编辑会比较方便:gedit./etc/hadoop/core-site.xml),将当中的修改为下面配置:同样的,修改配置文件hdfs-site.xml:Hadoop配置文件说明Hadoop的运行方式是由配置文件决定的(运行Hadoop时会读取配置文件),因此如果需要从伪分布式模式切换回非分布式模式,需要删除core-site.xml中的配置项。此外,伪分布式虽然只需要配置fs.defaultFS和dfs.replication就可以运行(官方教程如此),不过若没有配置hadoop.tmp.dir参数,则默认使用的临时目录为/tmp/hadoo-hadoop,而这个目录在重启时有可能被系统清理掉,导致必须重新执行format才行。所以要指定.dir和dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。配置完成后,执行NameNode的格式化:成功的话,会看到“successfullyformatted”和“Exittingwithstatus0”的提示,若为“Exittingwithstatus1”则是出错。如果在这一步时提示Error:JAVA_HOMEisnotsetandcouldnotbefound.的错误,则说明之前设置JAVA_HOME环境变量那边就没设置好,请先设置好JAVA_HOME变量,否则后面的过程都是进行不下去的。接着开启NameNode和DataNode守护进程。若出现如下SSH提示,输入yes即可。启动时可能会出现如下WARN提示:WARNutil.NativeCodeLoader:Unabletoloadnative-hadooplibraryforyourplatform…usingbuiltin-javaclasseswhereapplicableWARN提示可以忽略,并不会影响正常使用。启动Hadoop时提示Couldnotresolvehostname如果启动Hadoop时遇到输出非常多“ssh:Couldnotresolvehostnamexxx”的异常情况,如下图所示:这个并不是ssh的问题,可通过设置Hadoop环境变量来解决。首先按键盘的ctrl+c中断启动,然后在~/.bashrc中,增加如下两行内容(设置过程与JAVA_HOME变量一样,其中HADOOP_HOME为Hadoop的安装目录):保存后,务必执行source~/.bashrc使变量设置生效,然后再次执行./sbin/start-dfs.sh启动Hadoop。启动完成后,可以通过命令jps来判断是否成功启动,若成功启动则会列出如下进程:“NameNode”、”DataNode”和“SecondaryNameNode”(如果SecondaryNameNode没有启动,请运行sbin/stop-dfs.sh关闭进程,然后再次尝试启动尝试)。如果没有NameNode或DataNode,那就是配置不成功,请仔细检查之前步骤,或通过查看启动日志排查原因。成功启动后,可以访问Web界面http://localhost:50070查看NameNode和Datanode信息,还可以在线查看HDFS中的文件。六、注意事项熟悉Hadoop的配置文件。七、预习与思考题单机版与伪分布式的配置。
实验四:Hadoop初级实践(2学时)一、实验目的与要求1、理解Hadoop平台运行原理。2、熟悉wordcount程序。二、实验类型设计型三、实验原理及说明通过实际操作,使学生对Hadoop的使用有一个更深刻的理解;熟悉Hadoop的开发环境及程序结构。四、实验仪器安装Ubuntu系统的计算机若干台五、实验内容和步骤单词计数是最简单也是最能体现MapReduce思想的程序之一,可以称为MapReduce版"HelloWorld",该程序的完整代码可以在Hadoop安装包的"src/examples"目录下找到。单词计数主要完成功能是:统计一系列文本文件中每个单词出现的次数,如下图所示。以"hadoop"用户登录Hadoop服务器。1.创建本地的示例数据文件:并在这个目录下创建2个文件分别命名为【myTest1.txt】和【myTest2.txt】或者你想要的任何文件名。分别在这2个文件中输入下列示例语句:2.在HDFS上创建输入文件夹调出终端,输入下面指令:$cd/usr/local/hadoop$./bin/hadoopfs-mkdirhdfsInput执行这个命令时可能会提示类似安全的问题,如果提示了,请使用$./bin/hadoopdfsadmin-safemodeleave来退出安全模式。当分布式文件系统处于安全模式的情况下,文件系统中的内容不允许修改也不允许删除,直到安全模式结束。安全模式主要是为了系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略必要的复制或者删除部分数据块。运行期通过命令也可以进入安全模式。3.上传本地file中文件到集群的hdfsInput目录下在终端依次输入下面指令:cdhadoop-1.2.1$./bin/hadoopfs-putfile/myTest*.txthdfsInput4.运行例子:在终端输入下面指令:$./bin/hadoopjarhadoop-examples-1.2.1.jarwordcounthdfsInputhdfsOutput注意,这里的示例程序是1.2.1版本的,可能每个机器有所不一致,那么请用*通配符代替版本号$./bin/hadoopjarhadoop-examples-*.jarwordcounthdfsInputhdfsOutput应该出现下面结果:Hadoop命令会启动一个JVM来运行这个MapReduce程序,并自动获得Hadoop的配置,同时把类的路径(及其依赖关系)加入到Hadoop的库中。以上就是HadoopJob的运行记录,从这里可以看到,这个Job被赋予了一个ID号:job_201202292213_0002,而且得知输入文件有两个(Totalinputpathstoprocess:2),同时还可以了解map的输入输出记录(record数及字节数),以及reduce输入输出记录。查看HDFS上hdfsOutput目录内容:在终端输入下面指令:bin/hadoopfs-lshdfsOutput从上图中知道生成了三个文件,我们的结果在"part-r-00000"中。使用下面指令查看结果输出文件内容bin/hadoopfs-catoutput/part-r-00000输出目录日志以及输入目录中的文件是永久存在的,如果不删除的话,如果出现结果不一致,请参考这个因素。六、注意事项熟悉Hadoop常用的命令。七、预习与思考题Hadoop的执行过程。
实验五:熟悉常用的HDFS操作(2学时)一、实验目的与要求1、理解Hadoop平台运行原理。2、熟悉HDFS系统二、实验类型设计型三、实验原理及说明通过实际操作,使学生对Hadoop的使用有一个更深刻的理解;熟悉Hadoop的开发环境及程序结构。四、实验仪器安装Ubuntu系统的计算机若干台五、实验内容和步骤1.编写简单shell脚步使用gedit等任意文本编辑工具,都可以编写shell脚本。使用“gedittest.sh”在当前目录下,创建一个测试shell脚本。shell脚本的后缀习惯性写成“.sh”。2shell脚本的开始需要声明此脚本使用什么程序解析执行,首行为“#!/bin/sh
”,标明使用bash解析器解析当前shell脚本。3完成所有语言都有的入门级显示效果,使用shell脚本打印helloworld,第二行为“echo‘HelloWorld!’”。4由于新建的shell脚本没有执行权限,首先使用“chmod755test.sh”对shell脚本添加执行权限。5使用“./test.sh”命令执行新建的shell脚本。6看看自己编写第一个shell脚本执行的结果吧。利用Hadoop提供的Shell命令完成相同任务:向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,由用户指定是追加到原有文件末尾还是覆盖原有的文件;先到Hadoop主文件夹cd/usr/local/hadoop启动Hadoop服务sbin/start-dfs.shsbin/start-yarn.sh创建两个任意文本文件用于实验echo"helloworld">local.txtecho"hellohadoop">text.txt检查文件是否存在hadoopfs-test-etext.txtecho$?上传本地文件到HDFS系统(上传之后再执行一遍上一步,如果是第一次做HDFS操作第一次做这一步会出错,可以直接做一次hadoopfs-appendToFilelocal.txttext.txt就能解决)hadoopfs-puttext.txt追加到文件末尾的指令hadoopfs-appendToFilelocal.txttext.txt查看HDFS文件的内容hadoopfs-cattext.txt覆盖原有文件的指令(覆盖之后再执行一遍上一步)hadoopfs-copyFromLocal-flocal.txttext.txt以上步骤也可以用如下Shell脚步实现if$(hadoopfs-test-etext.txt);then$(hadoopfs-appendToFilelocal.txttext.txt);else$(hadoopfs-copyFromLocal-flocal.txttext.txt);fi从HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重命名;Shell命令实现:if$(hadoopfs-test-e/usr/local/hadoop/text.txt);then$(hadoopfs-copyToLocaltext.txt./text.txt);else$(hadoopfs-copyToLocaltext.txt./text2.txt);fi将HDFS中指定文件的内容输出到终端中;hadoopfs-cattext.txt显示HDFS中指定的文件的读写权限、大小、创建时间、路径等信息;hadoopfs-ls-htext.txt给定HDFS中某一个目录,输出该目录下的所有文件的读写权限、大小、创建时间、路径等信息,如果该文件是目录,则递归输出该目录下所有文件相关信息;hadoopfs-ls-R-h/user/tiny提供一个HDFS内的文件的路径,对该文件进行创建和删除操作。如果文件所在目录不存在,则自动创建目录;Shell命令实现:if$(hadoopfs-test-ddir1/dir2);then$(hadoopfs-touchzdir1/dir2/filename);else$(hadoopfs-mkdir-pdir1/dir2&&hdfsdfs-touchzdir1/dir2/filename);fi删除操作hadoopfs-rmdir1/dir2/filename提供一个HDFS的目录的路径,对该目录进行创建和删除操作。创建目录时,如果目录文件所在目录不存在则自动创建相应目录;删除目录时,由用户指定当该目录不为空时是否还删除该目录;创建目录
hadoopfs-mkdir-pdir1/dir2删除目录(如果目录非空则会提示notempty,不执行删除)
hadoopfs-rmdirdir1/dir2强制删除目录
hadoopfs-rm-rdir1/dir2向HDFS中指定的文件追加内容,由用户指定内容追加到原有文件的开头或结尾;追加到文件末尾hadoopfs-appendToFilelocal.txttext.txt追加到文件开头hadoopfs-gettext.txtcattext.txt>>local.txthadoopfs-copyFromLocal-ftext.txttext.txt删除HDFS中指定的文件;hadoopfs-rmtext.txt删除HDFS中指定的目录,由用户指定目录中如果存在文件时是否删除目录;删除目录(如果目录非空则会提示notempty,不执行删除)
hadoopfs-rmdirdir1/dir2强制删除目录
hadoopfs-rm-Rdir1/dir2在HDFS中,将文件从源路径移动到目的路径。hadoopfs-mvtext.txtinput编程实现一个类“MyFSDataInputStream”,该类继承“org.apache.hadoop.fs.FSDataInputStream”,要求如下:实现按行读取HDFS中指定文件的方法“readLine()”,如果读到文件末尾,则返回空,否则返回文件一行的文本。packagecom.zucc.tiny.hdfs;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.text.SimpleDateFormat;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.*;publicclassMyFSDataInputStreamextendsFSDataInputStream{publicMyFSDataInputStream(InputStreamin){super(in);//TODOAuto-generatedconstructorstub}publicstaticStringreadline(Configurationconf,StringremoteFilePath)throwsIOException{FileSystemfs=FileSystem.get(conf);PathremotePath=newPath(remoteFilePath);FSDataInputStreamin=fs.open(remotePath);BufferedReaderd=newBufferedReader(newInputStreamReader(in));Stringline=null;if((line=d.readLine())!=null){d.close();in.close();fs.close();returnline;}else{d.close();in.close();fs.close();returnnull;}}publicstaticvoidmain(String[]args){Configurationconf=newConfiguration();conf.set("","hdfs://localhost:9000");StringremoteFilePath="/user/tiny/text.txt";//HDFS路径try{System.out.println("读取文件:"+remoteFilePath);System.out.println(MyFSDataInputStream.readline(conf,remoteFilePath));System.out.println("\n读取完成");}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}4.查看Java帮助手册或其它资料,用“.URL”和“org.apache.hadoop.fs.FsURLStreamHandlerFactory”编程完成输出HDFS中指定文件的文本到终端中。packagecom.zucc.tiny.hdfs;importjava.io.IOException;importjava.io.InputStream;import.URL;importorg.apache.hadoop.fs.*;importorg.apache.hadoop.io.IOUtils;publicclassFsUrl{static{URL.setURLStreamHandlerFactory(newFsUrlStreamHandlerFactory());}publicstaticvoidcat(StringremoteFilePath)throwsIOException{InputStreamin=null;try{in=newURL("hdfs","localhost",9000,remoteFilePath).openStream();IOUtils.copyBytes(in,System.out,4096,false);}finally{IOUtils.closeStream(in);}}/***主函数*/publicstaticvoidmain(String[]args){StringremoteFilePath="/user/tiny/text.txt";//HDFS路径try{System.out.println("读取文件:"+remoteFilePath);FsUrl.cat(remoteFilePath);System.out.println("\n读取完成");}catch(Exceptione){e.printStackTrace();}}}六、注意事项熟悉HDFS常用的命令。七、预习与思考题HDFS的执行过程。
实验六:熟悉常用的HBase操作(2学时)一、实验目的与要求1. 理解HBase在Hadoop体系结构中的角色;2. 熟练使用HBase操作常用的Shell命令;3. 熟悉HBase操作常用的JavaAPI。二、实验类型设计型三、实验原理及说明通过实际操作,使学生对HBase的使用有一个更深刻的理解;熟悉HBase的开发环境。四、实验仪器操作系统:LinuxHadoop版本:2.6.0或以上版本HBase版本:1.1.2或以上版本JDK版本:1.6或以上版本JavaIDE:Eclipse五、实验内容和步骤把HBase压缩包放到Home文件夹中右键打开终端,解压HBase到/usr/localsudotarzxvfhbase-1.2.3-bin.tar.gz-C/usr/local重命名方便后续操作sudomv/usr/local/hbase-1.2.3//usr/local/hbase/获取文件夹权限(tiny改为你的主机名)sudochown-Rtiny/usr/local/hbase/设置环境变量sudogedit/etc/profile在最后一行添加内容:#sethbasepathexportPATH=$PATH:/usr/local/hbase/bin使环境变量生效source/etc/profile配置Hbase的配置文件进入/usr/local/hbase/conf/cd/usr/local/hbase/conf/配置hbase-env.shgedithbase-env.sh在最后一行添加内容:配置hbase-site.xmlgedithbase-site.xml在<configuration>标签中添加内容:<property><name>hbase.rootdir</name><value>hdfs://localhost:9000/hbase</value></property><property><name>hbase.cluster.distributed</name><value>true</value></property>启动Hadoop进入Hadoop主文件夹cd/usr/local/hadoop/开启Hadoop相关进程sbin/start-dfs.shsbin/start-yarn.sh启动HBase进入HBase主文件夹cd/usr/local/hbase/开启HBase相关进程bin/start-hbase.sh查看jps进入HbaseShell创建一个表以便实验使用create'student','score'用Hadoop提供的HBaseShell命令完成相同任务:列出HBase所有的表的相关信息,例如表名;以列表的形式显示所有数据表
list查看表的结构
describe'student'查询表是否存在
exists'student'查询表是否可用
is_enabled'student'在终端打印出指定的表的所有记录数据;scan'student'向已经创建好的表添加和删除指定的列族或列;put'student','s001','score:math','100'向student表,删除指定列delete'student','s001','score:math'统计表的行数。count'student'现有以下关系型数据库中的表和数据,要求将其转换为适合于HBase存储的表并插入数据:学生表(Student)学号(S_No)姓名(S_Name)性别(S_Sex)年龄(S_Age)2015001Zhangsanmale232015003Maryfemale222015003Lisimale24课程表(Course)课程号(C_No)课程名(C_Name)学分(C_Credit)123001Math2.0123002ComputerScience5.0123003English3.0选课表(SC)学号(SC_Sno)课程号(SC_Cno)成绩(SC_Score)201500112300186201500112300369201500212300277201500212300399201500312300198201500312300295同时,请编程完成以下指定功能:(1)createTable(StringtableName,String[]fields) 创建表,参数tableName为表的名称,字符串数组fields为存储记录各个域名称的数组。要求当HBase已经存在名为tableName的表的时候,先删除原有的表,然后再创建新的表。 packagecom.zucc.tiny;importjava.io.IOException;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.hbase.client.*;importorg.apache.hadoop.hbase.*;publicclassHBase{publicstaticConfigurationconfiguration;publicstaticConnectionconnection;publicstaticAdminadmin;publicstaticvoidcreateTable(StringtableName,String[]fields)throwsIOException{init();TableNametablename=TableName.valueOf(tableName);if(admin.tableExists(tablename)){System.out.println("tableisexists!");admin.disableTable(tablename);admin.deleteTable(tablename);//删除原来的表}HTableDescriptorhTableDescriptor=newHTableDescriptor(tablename);for(Stringstr:fields){HColumnDescriptorhColumnDescriptor=newHColumnDescriptor(str);hTableDescriptor.addFamily(hColumnDescriptor);}admin.createTable(hTableDescriptor);close();}publicstaticvoidinit(){configuration=HBaseConfiguration.create();configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");try{connection=ConnectionFactory.createConnection(configuration);admin=connection.getAdmin();}catch(IOExceptione){e.printStackTrace();}}//关闭连接publicstaticvoidclose(){try{if(admin!=null){admin.close();}if(null!=connection){connection.close();}}catch(IOExceptione){e.printStackTrace();}}publicstaticvoidmain(String[]args){String[]fields={"Score"};try{HBase.createTable("person",fields);}catch(IOExceptione){e.printStackTrace();}}} (2)addRecord(StringtableName,Stringrow,String[]fields,String[]values) 向表tableName、行row(用S_Name表示)和字符串数组files指定的单元格中添加对应的数据values。其中fields中每个元素如果对应的列族下还有相应的列限定符的话,用“columnFamily:column”表示。例如,同时向“Math”、“ComputerScience”、“English”三列添加成绩时,字符串数组fields为{“Score:Math”,”Score;ComputerScience”,”Score:English”},数组values存储这三门课的成绩。packagecom.zucc.tiny;importjava.io.IOException;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.hbase.client.*;importorg.apache.hadoop.hbase.*;publicclassHBase{publicstaticConfigurationconfiguration;publicstaticConnectionconnection;publicstaticAdminadmin;publicstaticvoidaddRecord(StringtableName,Stringrow,String[]fields,String[]values)throwsIOException{init();Tabletable=connection.getTable(TableName.valueOf(tableName));for(inti=0;i!=fields.length;i++){Putput=newPut(row.getBytes());String[]cols=fields[i].split(":");put.addColumn(cols[0].getBytes(),cols[1].getBytes(),values[i].getBytes());table.put(put);}table.close();close();}publicstaticvoidinit(){configuration=HBaseConfiguration.create();configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");try{connection=ConnectionFactory.createConnection(configuration);admin=connection.getAdmin();}catch(IOExceptione){e.printStackTrace();}}//关闭连接publicstaticvoidclose(){try{if(admin!=null){admin.close();}if(null!=connection){connection.close();}}catch(IOExceptione){e.printStackTrace();}}publicstaticvoidmain(String[]args){String[]fields={"Score:Math","Score:ComputerScience","Score:English"};String[]values={"99","80","100"};try{HBase.addRecord("person","Score",fields,values);}catch(IOExceptione){e.printStackTrace();}}} (3)scanColumn(StringtableName,Stringcolumn) 浏览表tableName某一列的数据,如果某一行记录中该列数据不存在,则返回null。要求当参数column为某一列族名称时,如果底下有若干个列限定符,则要列出每个列限定符代表的列的数据;当参数column为某一列具体名称(例如“Score:Math”)时,只需要列出packagecom.zucc.tiny;importjava.io.IOException;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.hbase.client.*;importorg.apache.hadoop.hbase.util.Bytes;importorg.apache.hadoop.hbase.*;publicclassHBase{publicstaticConfigurationconfiguration;publicstaticConnectionconnection;publicstaticAdminadmin;publicstaticvoidscanColumn(StringtableName,Stringcolumn)throwsIOException{init();Tabletable=connection.getTable(TableName.valueOf(tableName));Scanscan=newScan();scan.addFamily(Bytes.toBytes(column));ResultScannerscanner=table.getScanner(scan);for(Resultresult=scanner.next();result!=null;result=scanner.next()){showCell(result);}table.close();close();}//格式化输出publicstaticvoidshowCell(Resultresult){Cell[]cells=result.rawCells();for(Cellcell:cells){System.out.println("RowName:"+newString(CellUtil.cloneRow(cell))+"");System.out.println("Timetamp:"+cell.getTimestamp()+"");System.out.println("columnFamily:"+newString(CellUtil.cloneFamily(cell))+"");System.out.println("rowName:"+newString(CellUtil.cloneQualifier(cell))+"");System.out.println("value:"+newString(CellUtil.cloneValue(cell))+"");}}publicstaticvoidinit(){configuration=HBaseConfiguration.create();configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");try{connection=ConnectionFactory.createConnection(configuration);admin=connection.getAdmin();}catch(IOExceptione){e.printStackTrace();}}//关闭连接publicstaticvoidclose(){try{if(admin!=null){admin.close();}if(null!=connection){connection.close();}}catch(IOExceptione){e.printStackTrace();}}publicstaticvoidmain(String[]args){try{HBase.scanColumn("person","Score");}catch(IOExceptione){e.printStackTrace();}}}该列的数据。 (4)modifyData(StringtableName,Stringrow,Stringcolumn) 修改表tableName,行row(可以用学生姓名S_Name表示),列column指定的单元格的数据。packagecom.zucc.tiny;importjava.io.IOException;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.hbase.client.*;importorg.apache.hadoop.hbase.*;publicclassHBase{publicstaticlongts;publicstaticConfigurationconfiguration;publicstaticConnectionconnection;publicstaticAdminadmin;publicstaticvoidmodifyData(StringtableName,Stringrow,Stringcolumn,Stringval)throwsIOException{init();Tabletable=connection.getTable(TableName.valueOf(tableName));Putput=newPut(row.getBytes());Scanscan=newScan();ResultScannerresultScanner=table.getScanner(scan);for(Resultr:resultScanner){for(Cellcell:r.getColumnCells(row.getBytes(),column.getBytes())){ts=cell.getTimestamp();}}put.addColumn(row.getBytes(),column.getBytes(),ts,val.getBytes());table.put(put);table.close();close();}publicstaticvoidinit(){configuration=HBaseConfiguration.create();configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");try{connection=ConnectionFactory.createConnection(configuration);admin=connection.getAdmin();}catch(IOExceptione){e.printStackTrace();}}//关闭连接publicstaticvoidclose(){try{if(admin!=null){admin.close();}if(null!=connection){connection.close();}}catch(IOExceptione){e.printStackTrace();}}publicstaticvoidmain(String[]args){try{HBase.modifyData("person","Score","Math","100");}catch(IOExceptione){e.printStackTrace();}}}(5)deleteRow(StringtableName,Stringrow) 删除表tableName中row指定的行的记录。packagecom.zucc.tiny;importjava.io.IOException;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.hbase.client.*;importorg.apache.hadoop.hbase.*;publicclassHBase{publicstaticConfigurationconfiguration;publicstaticConnectionconnection;publicstaticAdminadmin;publicstaticvoiddeleteRow(StringtableName,Stringrow)throwsIOException{init();Tabletable=connection.getTable(TableName.valueOf(tableName));Deletedelete=newDelete(row.getBytes());//删除指定列族//delete.addFamily(Bytes.toBytes(colFamily));//删除指定列//delete.addColumn(Bytes.toBytes(colFamily),Bytes.toBytes(col));table.delete(delete);table.close();close();}publicstaticvoidinit(){configuration=HBaseConfiguration.create();configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");try{connection=ConnectionFactory.createConnection(configuration);admin=connection.getAdmin();}catch(IOExceptione){e.printStackTrace();}}//关闭连接publicstaticvoidclose(){try{if(admin!=null){admin.close();}if(null!=connection){connection.close();}}catch(IOExceptione){e.printStackTrace();}}publicstaticvoidmain(String[]args){try{HBase.deleteRow("person","Score");}catch(IOExceptione){e.printStackTrace();}}}六、注意事项HBase创建表,插入数据七、预习与思考题使用客户端调用HBase
实验七:NoSQL和关系数据库的操作比较(2学时)一、实验目的与要求1. 理解二种数据库(MySQL,HBase)的概念以及不同点;2. 熟练使用二种数据库操作常用的Shell命令;3. 熟悉二种数据库操作常用的JavaAPI。二、实验类型设计型三、实验原理及说明通过实际操作,使学生对NoSQL的使用有一个更深刻的理解;熟悉NoSQL的开发环境及结构。四、实验仪器操作系统:LinuxHadoop版本:2.6.0或以上版本MySQL版本:5.6或以上版本HBase版本:1.1.2或以上版本JDK版本:1.7或以上版本JavaIDE:Eclipse五、实验内容和步骤3.1MySQL数据库操作Student学生表NameEnglishMathComputerzhangsan698677lisi5510088根据上面给出的表格,利用MySQL5.6设计出student学生表格;设计完后,用select语句输出所有的相关信息,并给出截图;查询zhangsan的Computer成绩,并给出截图;修改lisi的Math成绩,改为95.给出截图.根据上面已经设计出的student表,用MySQL的JAVA客户端编程;添加数据:English:45 Math:89 Computer:100scofield4589100获取scofield的English成绩信息3.2HBase数据库操作Student学生表namescoreEnglishMathComputerzhangsan698677lisi5510088根据上面给出的表格,用HbaseShell模式设计student学生表格。设计完后,用scan指令浏览表的相关信息,给出截图。查询zhangsan的Computer成绩,给出截图。修改lisi的Math成绩,改为95,给出截图。根据上面已经设计出的student,用HbaseAPI编程。添加数据:English:45 Math:89 Computer:100scofield4589100获取scofield的English成绩信息六、注意事项NoSQL不是一个具体数据库,而是一类数据库的统称七、预习与思考题键值数据库、列族数据库、文档数据库、
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年注会考前心理素质提升试题及答案
- 园路仿石砖施工方案
- 项目管理质量控制试题及答案
- 资格认证考试实战秘籍试题及答案
- 项目管理作为职业发展的选择试题及答案
- 银行客户生命周期管理试题及答案
- 考生常见疑惑与解答试题及答案
- 2025年注会备考流程的详细解析试题及答案
- 2024年项目管理资格的重要复习阶段试题及答案
- 橡胶制品在汽车安全气囊的快速充气性能考核试卷
- 电商行业10万字PRD
- 2024-2025学年八年级下学期道德与法治期中模拟试卷(一)(统编版含答案解析)
- 防溺水工作布置教师会议上校长讲话:全力防溺水守护学生生命“生命线”
- 高一下学期《双休时代自由时间背后暗藏残酷筛选+你是“猎手”还是“猎物”?》主题班会
- 湖南省永州市祁阳市茅竹镇中心学校2024-2025学年下学期期中监测八年级下册《物理》试卷(含答案)
- GB/T 26354-2025旅游信息咨询服务
- 交互式影像中叙事与视觉表达的融合及其观众体验研究
- SL631水利水电工程单元工程施工质量验收标准第1部分:土石方工程
- 情绪的管理课件
- 重难点05 涉及二次函数的图形变化类问题与二次函数有关的创新类问题(2种命题预测+77种题型汇-总+专题训练+3种解题方法)(解析版)
- 江苏省外国语学校2024-2025学年度高二下学期期中考试历史试题
评论
0/150
提交评论