首先最最重要的写在最前面,也是我觉得个人踩得最深的坑,刚接触hadoop的人,缺少的认识:


hadoop的输入输出,都是从hdfs读取和写入的,那么比如运行hadoop的word count例子的时候, 网上各种大坑教程中完全都没有提到要先自己准备几个input文件,文本文档随便打几个字就好,并且把文件上传到hdfs系统中:这么做的原因在理解了hdfs后很显然了--hadoop的输入输出都在hdfs中,而且例子里的命令指定的目录,指定的也是hdfs中的文件夹路径。所以网上各种治标不治本的exception explanation再回过头来看,完全就是在给新人挖坑!(不过可能别人写的时候都以为你知道,但是只有我知道我不知道而且你也不知道,话说还在运行hadoop自带例子的人能对hadoop有多么深刻的理解呢,佩服大神们的逻辑)


辣么,让我们从头来一遍:(我个人有把${hadoop_install}/bin加入path,所以我直接可以输入hadoop命令,建议大家都可以这么做。)


  1. 首先你得安装并运行起来hadoop,我不管你是集群还是单机,运行命令:ps -ef|grep hadoop查询是否有hadoop进程,如果你看到的是如下这一坨,那么你的hadoop就是在运行了。注意,我是本机运行的例子,所以如果你确定你是连别人的服务,那么请无视就好。


  1. 准备两个文件,比如text1.txt和text2.txt 里面各写上一句话,随便什么都好,反正就是拿来统计的。然后使用类似如下的命令来上传到hdfs文件系统中:hdfs dfs mkdir /input; hadoop fs -put *.txt /input ---你得先在hdfs中建立你的文件夹才能把文件往里放不是,还是那句话,它是个文件系统
  2. 执行示例程序命令

hadoop jar hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce- examples-2.7.3.jar wordcount /input /output


这里output文件夹不需要在hdfs中提前建好,而且不能提前建,否则会报output folder already exists:比如你运行了一次又想再运行一次的时候就会报这个错,很明显,就是它需要一个空的目录来存放执行结果。如果执行了想再执行一次,就用hadoop fs -rmr /output删掉这个文件夹再执行就好。命令里的我写的相对路径,各位改成自己对应的路径就好。


贴个图证明我执行成功了:

hadoop 在线查询 hadoop example_hadoop 在线查询



  1. 查看结果:hadoop fs -cat /output/part-r-00000
  2. hadoop 在线查询 hadoop example_hadoop 在线查询_02

    hadoop 在线查询 hadoop example_ubuntu_03