转载请注明原作者: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.0Main-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/9ddaf2fca32315b230c199a7http://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