linux下eclipse中运行hadoop过程总结

  转载请注明原作者:http://www.cnblogs.com/beanmoon

  最近在研究大数据的课题,不可避免要用到hadoop,于是开始看《hadoop: the definite guide 2》,在遇到分析天气数据时,遇到一个实例,然后就动手试试运行命令  

% export HADOOP_CLASSPATH=build/classes
% hadoop MaxTemperature input/ncdc/sample.txt output

  HADOOP_CLASSPATH是用来指明经编译过的class文件所在的位置(我是通过eclipse来编译的,不知道书中作者是怎么编译的,直接用javac会报很多出错信息,当然是因为没有加额外的jar包的缘故,这个问题待解~~^_^),如果你没有指明HADOOP_CLASSPATH,即使在当前文件夹下执行Hadoop命令,他仍然报错:Could not find or load main class MaxTemperature,还可以通过"jar cmf manifest MaxTemperature.jar *.class"命令来生成一个jar包,然后通过"hadoop jar MaxTemperature.jar input output"命令来运行jar包(这时候不指明HADOOP_CLASSPATH也没事),如果打包的时候没有通过manifest文件指明main-class,那么还要在执行的时候加上主类的声明:“hadoop jar MaxTemperature.jar MaxTemperature input output”。manifest文件的内容见下面:  

Manifest-Version: 1.0
Main-Class: MaxTemperature

  如果使用eclipse,那就需要先安装eclipse,在debian下第一次是通过aptitude install eclipse来安装的(安装的位置在/usr/lib/eclipse),安装的版本是galileo版的,嫌它太旧,就自己下了一个juno版的,安装过程如下:

(1)把eclipse-java-juno-SR2-linux-gtk.tar.gz解压到某个目录中,我解压到的是主目录,得到eclipse目录

(2)在/usr/bin目录下创建一个启动脚本eclipse,执行下面的命令来创建:
sudo gedit /usr/bin/eclipse

然后在该文件中添加以下内容:
#!/bin/sh
export MOZILLA_FIVE_HOME="/usr/lib/mozilla/"
export ECLIPSE_HOME="/home/wangxing/Development/eclipse"
$ECLIPSE_HOME/eclipse $*($*什么东东??

(3)修改该脚本的权限,让它变成可执行,执行下面的命令:
sudo chmod a+x /usr/bin/eclipse

   (4)在Applications(应用程序)菜单上添加一个图标

sudo gedit /usr/share/applications/eclipse.desktop

然后在文件中添加下列内容:
[Desktop Entry]
Encoding=UTF-8
Name=Eclipse Platform
Comment=Eclipse IDE
Exec=eclipse
Icon=/home/bean/eclipse/icon.xpm
Terminal=false
StartupNotify=true
Type=Application
Categories=Application;Development;

  通过终端启动eclipse挺好的,可通过鼠标就不行,报如下错:

A Java RunTime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Eclipse. No java virtual machine was found after searching the following locations:…

  网上搜了一下,解决办法如下:

在终端进入你的eclipse目录,然后输入:

mkdir jre
cd jre
ln -s 你的JDK目录/bin bin

  现在开始把hadoop集成到eclipse中去,网上找到的方法如下:   

http://blog.sina.com.cn/s/blog_62186b4601012acs.html

  这是网上的解决办法,可具体到我这里执行的时候又遇到了问题,首先我的hadoop是1.0.4最新版的,它不直接给你hadoop-eclipse-plugin-1.0.4.jar,它需要你自己具体导出,网上方法如下:  

1、在Eclipse中选择File-->Import-->Existing Projects into Workspace导入已有项目,假设路径为:

/download/hadoop-1.0.1/src/contrib/eclipse-plugin,默认的项目名称是MapReduceTools 

2、默认项目名称为MapReduceTools,然后在项目MapReduceTools中新建lib目录,并把hadoop的hadoop-core、commons-cli-1.2.jar、commons-lang-2.4.jar、commons-configuration-1.6.jar、jackson-mapper-asl-1.8.8.jar、jackson-core-asl-1.8.8.jar、commons-httpclient-3.0.1.jar拷贝到该目录。 

3、修改../build-contrib.xml (这是存放在项目所在位置的上一层吗??)

  <property name="version" value="1.0.1"/>
  <property name="hadoop.root" location="/download/develop/hadoop-1.0.1"/>
  <property name="eclipse.home" location="/download/eclipse" /> 

4、修改build.xml

  <target name="jar" depends="compile" unless="skip.contrib">

    <mkdir dir="${build.dir}/lib"/>
    <copy file="${hadoop.root}/hadoop-core-${version}.jar" tofile="${build.dir}/lib/hadoop-core.jar" verbose="true"/>
    <copy file="${hadoop.root}/lib/commons-cli-1.2.jar"  todir="${build.dir}/lib" verbose="true"/>
    <copy file="${hadoop.root}/lib/commons-lang-2.4.jar"  todir="${build.dir}/lib" verbose="true"/>
    <copy file="${hadoop.root}/lib/commons-configuration-1.6.jar"  todir="${build.dir}/lib" verbose="true"/>
    <copy file="${hadoop.root}/lib/jackson-mapper-asl-1.8.8.jar"  todir="${build.dir}/lib" verbose="true"/>
    <copy file="${hadoop.root}/lib/jackson-core-asl-1.8.8.jar"  todir="${build.dir}/lib" verbose="true"/>
    <copy file="${hadoop.root}/lib/commons-httpclient-3.0.1.jar"  todir="${build.dir}/lib" verbose="true"/>

    <jar
      jarfile="${build.dir}/hadoop-${name}-${version}.jar"
      manifest="${root}/META-INF/MANIFEST.MF">
      <fileset dir="${build.dir}" includes="classes/ lib/"/>
      <fileset dir="${root}" includes="resources/ plugin.xml"/>
    </jar>
  </target> 

5、右键选择项目-->Export,类型选择JAR file,把plugin.xml文件、classes目录、lib目录和resources目录选上,选择导出的jar目录,即可导出hadoop-eclipse-plugin-1.0.0.jar文件 

6、把该文件放到eclipse/plugin目录下面,重启eclipse

  最后一步步的终于导出来了jar包(由于浮躁没有好好看上面的过程,中间遇到很多错误而无法导出jar包,浪费了很多时间),可始终无法让在windows->preference中让eclipse识别出hadoop map/reduce,应该还是我的jar包导出有问题吧,于是到网上下载了一个这样的jar包,终于如愿以偿(期间我还想过使用其他的早期的hadoop版本,因为他们内置的又hadoop-eclipse-plugin-***.jar,我下的是hadoop-0.22.0版本,不过其中的很多类和接口由于不安全的原因都deprecated了,只得重新使用hadoop-1.0.4)。

  其次,在配置hadoop location的时候又出问题了,点击右键不管新建或者编辑hadoop location时都没有反应,试了几次时就不试了,直接新建map/reduce工程,在MaxTemperature.java上右键run configuration中指定了输入文件输出文件的参数(输入输出文件放在项目的根目录下)后,开始运行,然后一个窗口就跳出来了让我配置hadoop location~~真是太贱了~~

  最后输出内容跟原文一样,大功告成~~

  参考链接:

http://hi.baidu.com/ihsauqaxblbdmwq/item/9ddaf2fca32315b230c199a7
http://blog.csdn.net/lmc_wy/article/details/6053580
http://blog.sina.com.cn/s/blog_62186b4601012acs.html
http://blog.sina.com.cn/s/blog_62186b4601011c6a.html
http://www.oschina.net/code/snippet_176897_7976
http://blog.sina.com.cn/s/blog_6daadb2f01015rb7.html
原文地址:https://www.cnblogs.com/beanmoon/p/2759218.html