Eclipse下运行Hadoop (测试WordCount) upon Ubuntu12.04 + JDK1.7.0

来源:互联网 发布:nba2k球星数据 编辑:程序博客网 时间:2024/05/25 05:36

××××××××××××××××××××××××××××××××自述  可忽略×××××××××××××××××××××××××××××××××××××××

       大数据,分布式近年来被炒得非常热,而Hadoop作为一种开源的分布式平台也越来越受人关注,其热度从CSDN的主页上的曝光率就可知一二。 我最早接触Hadoop是在大二的时候,听香港理工的曹建农教授介绍Hadoop这个开源的新武器,当时来蹭讲座的我怎么也不会想到两年后我要用这个平台做我的毕业设计。上学期在做课程设计的时候的大胆挑战了分布式这个课题,然后选择了Hadoop这个平台,实现了一个7节点的distributed cluster。现在毕设更上一层,要在Hadoop上作出一套系统,免不了要用Eclipse这个神器来写程序,所以花了几天时间查阅资料,实现了Eclipse下运行Hadoop程序WordCount。

×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××

目标: 用Eclipse控制Hadoop文件系统HDFS, 在Eclipse下写程序直接在Hadoop上运行

环境参数:

OS: ubuntu 12.04 (most updated) 32 bit

JVM: JDK1.7.0

Eclipse: eclipse-java-juno-SR1-linux-gtk

Hadoop: hadoop-1.4.0

P.S.以上所有的资料都是开源的,都是从开源官网下的。(真心喜欢开源啊)

为了简单及不失普遍性,所搭建的Hadoop平台为伪分布式系统。

特别注意:

        Eclipse所属用户必须对HADOOP_HOME具有可执行的权限,最简单的就是让这两者属于同一个用户。我就是一开始没有注意这点,一直失败。

***************************************************************************************************************************

前期准备工作: 实现Hadoop伪分布式系统

       如何实现Hadoop伪分布式,有很多很好的博文可以借鉴,但是网上也有很多文章没有将清楚细节,所以我这里将我自己参考的资料列出来:

   http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster/ 这个外国哥们写得很详细,很多操作的原因也写得笔记清楚, 但是有一些细节还是要照着自己的环静该一下,比如: java的Path, Hadoop 的Path,你自己的用户名等。

      我也把我自己的步骤贴出来,但是由于是很早以前写在实验报告里的,所以没有截图,而且格式比较乱。

JAVA环境设置(离线安装jdk7)

1.首先解压压缩包

     

   $tarzxf jdk-7-linux-i586.tar.gz

将得到的jdk1.7.0存到/usr/local/java

2.配置环境变量

/etc/environment中添加如下内容:

exportJAVA_HOME=/usr/local/java/jdk1.7.0

exportJRE_HOME=/usr/local/java/jdk1.7.0/jre

exportCLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

/etc/profile下,添加以下四行

exportJAVA_HOME=/usr/local/java/jdk1.7.0

exportJRE_HOME=/usr/local/java/jdk1.7.0/jre

exportCLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

exportPATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin

umask022

  1. 验证java环境配置成功

重启系统,然后在命令行输入:

$java-version

如果显示一下内容则成功:

javaversion "1.7.0"

Java(TM)SE Runtime Environment (build 1.7.0)

JavaHotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing)

添加Hadoop系统的用户

$sudo addgroup hadoop$sudo adduser --ingroup hadoop hduser

配置SSH远程免密登录

1.在线安装SSH

$sudoapt-get install openssh-server

2.生成SSH密钥:

$su - hduser$ssh-keygen -t rsa -P ""

  1. 将公钥添加到服务器上:

$cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys

  1. 这样就完成了SSH远程登录设置,下面尝试一下SSH远程登录:

$ssh localhost

如果无需输入密码就可以登录到localhost下面的话就完成了SSH设置

禁用ipv6功能

  1. /etc/sysctl.conf 下面添加如下内容实现ipv6禁用:

net.ipv6.conf.all.disable_ipv6= 1

net.ipv6.conf.default.disable_ipv6= 1

net.ipv6.conf.lo.disable_ipv6= 1

  1. 重启,然后输入如下指令,如果输出结果为1,则ipv6禁用成功,如果结果为0,则没有禁用ipv6

    $cat /proc/sys/net/ipv6/conf/all/disable_ipv6

    安装Hadoop包

    1.在/usr/local路径下解压hadoop包,并且更换hadoop文件夹的用户:

    $sudo tar xzf hadoop-1.0.4.tar.gz$sudo mv hadoop-1.0.4 hadoop$sudo chown -R hduser:hadoop hadoop


    #更换用户一定不能忘记,linux下就是用户权限最要注意

    2.hduser用户的主文件夹下的.bashrc内添加内容,如下:

    #Set Hadoop-related environment variables

    exportHADOOP_HOME=/usr/local/hadoop


    #Set JAVA_HOME (we will also configure JAVA_HOME directly for Hadooplater on)

    exportJAVA_HOME=/usr/local/java/jdk1.7.0


    #Some convenient aliases and functions for running Hadoop-relatedcommands

    unaliasfs &> /dev/null

    aliasfs="hadoop fs"

    unaliashls &> /dev/null

    aliashls="fs -ls"

    lzohead() {

    hadoopfs -cat $1 | lzop -dc | head -1000 | less

    }

    #Add Hadoop bin/ directory to PATH

    exportPATH=$PATH:$HADOOP_HOME/bin

    配置Hadoop系统

    1.确定SecondaryNameNode的主机名,修改/usr/local/hadoop/conf/master文件:

    localhost

    2.确定SecondaryNameNode的主机名,修改/usr/local/hadoop/conf/slaves文件:

    localhost

    3.修改core-site.xml文件,配置NameNode的主机名和端口号:

    <property>

                <name>hadoop.tmp.dir</name>

                <value>/app/hadoop/tmp</value>

    </property>

    <property>

                 <name>fs.default.name</name>

                 <value>hdfs://localhost:9000</value>

    </property>

    4.修改mapred-site.xml:,配置JobTracker的主机名和端口号:

    <property>

       <name>mapred.job.tracker</name>

       <value>localhost:54311</value>

    </property>

    5.修改hdfs-site.xml, 配置HDFS的默认副本数:

    <property>

       <name>dfs.replication</name>

       <value>1</value>

    </property>

    格式化HDFS

    切换到/usr/local/hadoop目录下:

    $bin/hadoop namenode -format

    启动Hadoop

    1.同样在/usr/local/hadoop目录下:

    $bin/start-all.sh

    再输入指令查看守护进程:

    $jps

    如果输出如下六个守护进程则hadoop启动成功,否则失败。

    TaskTracker

    JobTracker

    DataNode

    SecondaryNameNode

    Jps

    系统监控窗口

    Hadoop系统给用户提供了三个监控窗口实时监测系统状态,分别是:

    (NameNode主机名):50030#TaskTracker Status

    (NameNode主机名):50060#MapReduce Status

    (NameNode主机名):50070#NameNode Status

    ************************************伪分布式Hadoop配置完毕*********************************************

    ***********************************Eclipse 安装插件**************************************************

    为Eclipse添加Hadoop插件 hadoop-{version}-eclipse-plugin.jar

           在hadoop-1.0.4的安装包里没有提供包装好的hadoop-eclipse-plugin, 但是在它的 HADOOP_HOME/src/contrib/eclipse-plugin下面有插件的源码,网上有一些教程是教你如何用这个源码做出插件,我按照他们的步骤是了一下,我自己生成的插件无法使用,就索性用网上高手提供的插件。

           http://www.linuxidc.com/Linux/2013-01/77921.htm   这篇文章里既有生成插件的教程又有做好的插件 hadoop-eclipse-plugin-1.0.4.jar 。

           这个插件可以放在eclipse_home目录下的两个地方:plugins 和dropins。 但是有一点他们没有说清楚,如果插件放在 plugins下面,插件名改为: hadoop-1.0.4-eclipse-plugin.jar,如果是在dropins下面,维持原来的插件名: hadoop-eclipse-plugin-1.0.4.jar 。

           安装完插件后一定要重启Eclipse。

    Eclipse里设置MapReduce Location

             由于前面提到的权限问题,我下面提到的HADOOP_HOME和用户都变掉了,请按照自己的环境设置。

           1. 打开Window-->Preferences,你会发现Hadoop Map/Reduce选项,在这个选项里你需要配置Hadoop installation directory。配置完成后退出。

                   2. 在Window-->Show View-->Other-->MapReduce Tools中打开Map/Reduce Locations, 在Window-->Other Perspective-->Other--> MapReduce。

           3. 在Map/Reduce Locations中新建一个Hadoop Location。在这个View中,右键-->New Hadoop Location。在弹出的对话框中你需要配置Location name,还有Map/Reduce Master和你在mapred-site.xml中设置一样; DFS Master和core-site.xml中配置的地址及端口一样。

              4. 在Advanced parameters页面里,一般教程都没有说如何设置,可我觉得有一项必须要设置, 其中所有的文件夹地址都是默认的/tmp/hadoop-{username}/... 这个地址其实是HDFS在本地的地址,要和core-site.xml中设置一致。我这里为了方便,直接采用他默认的地址,因为后面还有很多选项的地址内都含有这个目录,如果要用这个系统做点什么,还是不要用/tmp的目录。

                   5. 配置完后退出。点击DFS Locations-->myubuntu如果能最后显示 jobtracker.info,说明配置正确。

                下面是就新建MapReduce 工程,跑 WordCount程序了。

    *********************************************************************

    *************************运行 WordCount*******************************

    运行WordCount

    1. 新建MapReduce工程

     File->New->Project, 选择MapReduce Project 。

      2. 复制 hadoop安装目录/src/example/org/apache/hadoop/example/WordCount.java到刚才新建的项目的src下面, 如上图所示。

      3. 在外面新建一个文本文档input.txt,里面随便写点什么,然后在HDFS下新建文件夹 wordcount,将input.txt上传到wordcount下,也如上图所示。

          新建文件夹既可以直接在Eclipse里选中hadoop-napoleongjc,然后选择Create New Directory...,也可以在hadoop安装目录下输入命令:

          bin/hadoop fs -mkdir /tmp/hadoop-napolepngjc/wordcount

          上传文件也是如此, 命令是: bin/hadoop fs -copyFromLocal /home/input.txt  /tmp/hadoop-napoleongjc/wordcount/input.txt

       4. 运行项目

          选中WordCount,右击, Run AS--> Run Configuration.   在Java Application内选择WordCount ,可能第一次打开这个没有这个选项,你就先随便选,点击Run,肯定会出错,然后再打开这个对话框就可以在Java Application里看到WordCount。

                      还是则那个对话框内,Arguments那里写 hdfs://localhost:9000/tmp/hadoop-napoleongjc/wordcount/input.txt   hdfs://localhost:9000/tmp/hadoop-napoleongjc/wordcount/output.txt

                         这样就完成了, 点击Run 就可以执行了。执行结果可以在output下面看到。

    **************************************The End******************************************

    下面把参考的几个网址再列一下:

    http://xiaofancn.iteye.com/blog/1435099

    http://phz50.iteye.com/blog/932373

    http://ebiquity.umbc.edu/Tutorials/Hadoop/00%20-%20Intro.html

    http://www.cnblogs.com/wly603/archive/2012/04/18/2454936.html