前几天对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文件系统中如何删除一个文件呢?其实也很简单,如下图:
可以看到,前面文件的拷贝test1.txt.bak已经被成功删除了。竟然我们可以将文件上传到hadoop的文件系统中,那也应该可以将hadoop中的hdfs中的文件给下载下来,这种实现也很简单,与上传类似,只要将参数-put,改为-get即可,如下图:
上述命令中,先创建一个空目录,名为dir_from_hdfs,然后从hdfs中下载刚上传的两文件,并将其成功下载至dir_from_hdfs中。
到这里,我们简单地总结一下前面的操作:
1 成功将linux文件系统中的文件拷贝至hdfs文件系统中的某一个路径下: hadoop dfs -put linux源文件路径 hadoop的hdfs文件路径
2 成功将hdfs文件系统中的文件拷贝至linux文件系统中的某一个路径下: hadoop dfs -get hadoop的hdfs文件路径 linux源文件路径
3 知道如何显示hdfs文件系统中的文件: hadoop dfs -ls hdfs的文件路径
4 知道如何在hdfs文件系统制作文件的副本: hadoop dfs -cp 原文件 目标文件
5 知道如何在hdfs文件系统中删除某一个文件: hadoop dfs -rm 要被删除的目标文件
6 如果要删除hdfs上的文件目录呢?这里不再展示,直接命令:hadoop dfs -rmr hdfs系统上的文件目录名