今天做的是hadoop中wordcount的测试。那么对unix等等不熟悉的我渐渐觉得坑有点深了,呵呵。
Hadoop2.6.0的环境是老早就搭好了的,首先启动它吧,唉start-all.sh命令也不知怎么就弃用了,只写一句多方便啊,现在的规范用法是start-dfs.shand start-yarn.sh。好的启动完成,这一次简单地使用一下bin/hdfsdfs命令。
由于学长给的参考资料是hadoop0.20版本的,这些命令都更新到十万八千里去了,都得自己留心,不然瞎兜圈子。首先切换到hadoop目录下,新建一个文件夹mkdirinput,然后cdinput,在里面创建两个文本文件echo”helloworld”>text1.txt;echo”hellohadoop”>test2.txt.
接着要放到hadoop自己的文件系统hdfs里,了解到这是一个虚拟的文件系统组织,在unix资源管理下是看不到任何内容的。。这里来了一个坑,使用bin/hdfsdfs –put input in命令想把文件放直hdfs根目录是不能成功的,应该在其下先创建用户的文件目录才行,使用命令bin/hdfsdfs –mkdir /user/lyourmarc/in,然后执行bin/hdfsdfs –put input /user/lyoumarc/in。
然后就要执行wordcount进行测试了。还是由于hadoop的更新,命令细节有变:bin/hadoopjar ./share/hadoop/mapreduce/sources/hadoop-mapreduce-
examples-2.6.0-sources.jarorg.apache.hadoop.examples.WordCount/user
/lyoumarc/in/*/user/lyoumarc/out,其中in后面如果没有/*,则会被指出提供的路径不是文件的问题,同时out也变成必须不存在才可执行(即使是空文件夹),删除这个文件夹的方法,-rmdir是不行的,应该bin/hdfsdfs -rmr /user/
lyoumarc/out。
最后成功执行,查看结果用这条命令bin/hdfs dfs -cat out/*,终于出现了结果:
hello 2
wolrd 1
world 1
一点小知识补充:
l ./代表当前目录下
l 文件夹后追加/*代表目录下所有文件