hadoop学习之hadoop集群功能简单测试验证

注:本文的主要目的是为了记录自己的学习过程,也方便与大家做交流。转载请注明来自:

http://blog.csdn.net/ab198604

 

 

        前几天对hadoop分布式集群的安装过程进行了总结,对hadoop的集群搭建只是学习hadoop中的艰难的一步,后面还需要学习更多的知识,不知道自己能不能坚持下去,不知道后面还会遇到多少困难,不过,我想,只要努力坚持下去,困难总是能够解决的。这次主要总结对hadoop集群测试相关的内容,对每个程序员而言,实践是最好的老师,这个过程就好比初学编程时,学了很多理论知识,表面上知道是那么一回事,一旦实践起来,就手忙脚乱了,如果不实践总觉得欠缺了什么,下面来测试一下对前几天安装好的hadoop集群,看看它到底好不好使?

        这次测试主要分两步,hdfs和map-reduce,看这两个部分的功能是否正常:

        一验证hadoop的hdfs文件系统功能是否正常

        但是,应该如何验证呢?我们知道,一个文件系统是用于处理文件相关的系统,包括文件的复制,删除,查看等,如果说它有这些功能,那就表示文件系统是正常的。但是在我面前还是有一个问题,目前安装好的hadoop集群环境,它的hdfs文件系统上应该是空的,首先得给它加点料才行,换句话说,从linux角度看,就是如何从linux的文件系统将文件拷贝至hadoop的hdfs中,这显然是最基本的操作。其实这些问题,hadoop已经帮我们想好了,这里,我们先把料准备好,也就是要上传到hadoop的hdfs系统上的内容,过程如下:

        功能

        在这里,先建立两个普通的文件test1.txt和test2.txt,里面编写了几个单词。将这两个文件存放在linux的input目录下。紧接着,需要以某种方式将这两个文件上传至hdfs文件系统中,这个过程主要靠以下命令完成:

        测试

        hadoop:为程序名称

        dfs: 程序带的一个参数,这个参数主要表示要操作的是dfs文件系统

        -put: 程序带的一个参数,这个参数表示要将“上传”这个动作

        ./: 程序带的一个参数,这个参数表示上传的源文件路径,在本例中,表示要将input目录下的文件上传,所以为./

        in: 这个参数表示上传文件的目的地址(路径), 此时上传至hdfs的主目录下的in目录中

 

        第二条指令为显示hdfs文件系统中in目录下的文件内容。这些操作和linux有点类似,区别在于,hadoop系统将linux系统中的shell命令操作作为hdfs文件系统的参数来执行操作,我认为这是一个好的思路,至少可以让熟悉linux的朋友对hadoop感觉比较友好。通过第二条命令的显示,可以看出,我们已经成功地将两个文件test1.txt和test2.txt上传了,也成功在hadoop的hdfs文件系统中显示in目录下的文件操作。

        但是还是不够,我得试着看看能否在hdfs中实现文件的复制功能,如下:

        验证

        上述命令将test1.txt文件生成一个拷贝,名称为test1.txt.bak,通过看hdfs系统中的in目录,可以看到这步操作是成功的。那么,在hdfs文件系统中如何删除一个文件呢?其实也很简单,如下图:

        功能

        到这里,我们简单地总结一下前面的操作:

        1 成功将linux文件系统中的文件拷贝至hdfs文件系统中的某一个路径下: hadoop dfs -put  linux源文件路径   hadoop的hdfs文件路径

        2 知道如何显示hdfs文件系统中的文件: hadoop dfs -ls hdfs的文件路径

        3 知道如何在hdfs文件系统制作文件的副本: hadoop dfs -cp 原文件  目标文件

        4 知道如何在hdfs文件系统中删除某一个文件: hadoop dfs -rm 要被删除的目标文件

 

        通过以上步骤的实践,已经可以证明前次安装的hadoop集群中的hdfs文件系统是能正常工作的。

         二验证hadoop的map-reduce功能是否正常

        hadoop的hdfs实现文件的管理操作,map-reduce主要实现作业的处理。如何来验证map-reduce的功能正常与否呢?原理其实很简单,可以利用hadoop自带的一个测试用例,我们输入一个作业,然后执行map-reduce程序,让它去处理操作作业,然后查看操作的结果是否正确,如果正确就可以表示map-reduce功能是正常的。首先,我们在hadoop上执行一个map-reduce程序(主要是实现对test1.txt和test2.txt文件中出现的单词进行计数):

        简单

        对上图中的命令作一个简单的解释,如下:

        hadoop     jar         ../hadoo/hadoop-0.20.2-examples.jar          wordcount                        in               out

        程序名    java程序          java包                                                java包中的wordcount函数   输入路径   输出路径 

        实际上以上操作可以看成给hadoop集群输入一些材料,让其处理,输入的条件有两个(这里应该指的是文件:test1.txt和test2.txt),然后map-reduce分配至各个结点进行作业的处理工作。如果不出现一些警告或错误就表示执行成功了。

        执行完程序后再次查看hdfs文件系统:

        集群

        可以看出,hdfs文件系统上多出一个out目录,这是执行map-reduce程序后输出结果的存放目录。查看一下out目录下有哪些内容:

        测试 

       如上图所示,out目录中主要有两项内容,其中一个是目录,主要存放一些过程的日志信息,另一个是文件,用于存放map-reduce的执行结果。

       下面查看一下map-reduce执行的结果:

        hadoop学习之hadoop

        通过查看文件内容,我们已经看到了程序的输出结果,是正确的。因此这也就证明了map-reduce的功能是正常的。

 

        以上是通过hadoop的hdfs文件系统来查看文件数据,这是很自然的事,但是如果从linux文件系统的角度来查看hadoop中hdfs上的文件数据时,是怎样的呢?如下图:

        hadoop学习之hadoop

        由于在hdfs文件系统中,数据是存放在datanode中,因此应该从slave结点中查看。由上图可以看出,hdfs系统上的文件如果从linux角度上来看,主要是一些元数据和一些数据项,这两者才构成一个完整的文件,也就是说在linux角度查看hdfs文件的数据内容时,是一堆乱七八糟的东西,是没有任何意义的。

        最后,提醒下自己,查看hadoop的hdfs情况及集群namenode情况也可以在web网站中查看,在安装集群中显示的那两个网站,这个主要是从视图上方便查看。

       http://192.168.1.100:50030

       http://192.168.1.100:50070

      

 

您的回应...

也许你感兴趣

换一批

热门标签

更多