zoukankan      html  css  js  c++  java
  • 如何让你的作业在Hadoop集群中真正实现分布式运行

      搭建过hadoop之后,如何让程序在hadoop集群中分布式运行成了一件令人头痛的事。

      可能有人会说在eclipse的类文件中右键点击-》“run on hadoop”不就行了嘛,注意:eclipse中的“run on hadoop”默认只是运行在单机上的,因为要想在集群中让程序分布式运行还要经历上传类文件、分发到各个节点等过程的,一个简单的“run on hadoop”只是启动了本地hadoop类库来运行你的程序而已,在Hadoop JobTracker的web管理页面(http://localhost:50030)上是看不到任何作业信息的,因为你的作业根本就没有运行在集群上。

      《Hadoop:the Definitive Guide 3rd edition》上介绍的是使用打jar包的方式,然后用hadoop脚本命令的jar选项来运行分布式程序。如下所示:
      hadoop jar hadoop-examples.jar v3.MaxTemperatureDriver -conf conf/hadoop-cluster.xml input/ncdc/all max-temp

      但问题是这本书里面是使用maven来编译类文件的,通过pom.xml他很容易就解决了jar包的依赖问题,这让我等平常使用eclipse来编程的灰常依赖IDE的程序猿们情何以堪啊,maven的配置及使用方法到现在还没搞懂,索性不学了,自己打jar包吧

      自己打jar包就要解决类文件引用的问题,以我在程序中使用的Hbase的jar包(hbase-0.94.3.jar)为例,我先后尝试了各种试图解决类文件引用及打jar包的方法,无论如何,总会提示我找不到org.apache.hadoop.hbase.util.Bytes class文件(它就在hbase-0.94.3.jar中),以下为我尝试的各种方法:

    1.设置classpath到hbase-0.94.3.jar
    2.设置HADOOP_CLASSPATH到hbase-0.94.3.jar
    3.设置HADOOP_CLASSPATH到HBASE_HOME
    4.把hbase-0.94.3.jar打包到运行的jar包中(其中包括了1.直接打进jar包;2.放入lib文件夹再打入jar包;3.通过manifest文件设置Class-Path选项指向hbase-0.94.3.jar)
    5.把hbase-0.94.3.jar复制到HADOOP_HOME/lib下面

    直至这个时候我已要接近崩溃了,要知道光是解决这个问题已花费了我接近三天的时间,仍是一无所获,索性不做了改弄其他东西,如此10多天过去了。

      等忙完这10多天,另一个解决问题的角度出现了,既然自己在命令行下打包不行,为何不使用eclipse呢(说到底还是屈服于IDE了,我鄙视我自己!)。刚开始是直接把整个项目导出成jar包,但这样只是包含了自己编写的源文件及lib文件夹下的依赖jar包,并没有包含hadoop-core之类的引用第三方jar包,按着这个思路就去google了下如何完整的把引用的第三方jar包也包含进来的打包方式,还真给找到了:Fat-jar!下载地址

      下载之后解压缩,会得到一个名为net.sf.fjep.fatjar_0.0.31.jar(版本不同,名字可能不同)的jar包,把它拷到eclipse_home/plugins中然后重启eclipse,如果在Windows=>prefernce=>fat jar preference看到它就说明已经安装成功了。

      接下来,在需要导出的Java项目上右击,选择“导出”,选择”其他”中的”Fat Jar EXporter”,即可进行打包操作。注意选择好”Main-class”以及需要打包的文件。“finish”之后你就会得到一个完整的jar包了,这样便可以在任何地方通过hadoop jar命令来运行了,以我的程序为例:
      hadoop jar HDG3.jar cf/RateDataImporter  //HDG3.jar为我的jar包的名字,共64Mb,cf/RateDataImporter为我要运行的类文件名字

      在jobtracker的web管理界面可以很清楚的看到此作业的信息,以及正在运行的进度、状态等,感觉很爽的有木有(虽然我的集群只有两个节点)!!
      

      

      至此,折腾了许久的hadoop集群运行分布式作业问题终于解决!

      以上各种拙计,有高手指正不吝感激!

      Ps: 评论中DeeFOX给我支持了一个更简单的方法,那就是直接导出为Runnable Jar,赞一个!

      本文系原创,转载请注明出处:http://www.cnblogs.com/beanmoon/archive/2013/05/09/3068729.html



    作者:beanmoon
    出处:http://www.cnblogs.com/beanmoon/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
    该文章也同时发布在我的独立博客中-豆月博客

  • 相关阅读:
    HDU 2236 无题Ⅱ
    Golden Tiger Claw(二分图)
    HDU 5969 最大的位或 (思维,贪心)
    HDU 3686 Traffic Real Time Query System (图论)
    SCOI 2016 萌萌哒
    Spring Boot支持控制台Banner定制
    构建第一个Spring Boot程序
    Spring Boot重要模块
    Java fastjson JSON和String互相转换
    BCompare 4 Windows激活方法【试用期30天重置】
  • 原文地址:https://www.cnblogs.com/beanmoon/p/3068729.html
Copyright © 2011-2022 走看看