如何让你的作业在Hadoop集群中真正实现分布式运行
2013-05-09 14:35
585 查看
如何让你的作业在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集群运行分布式作业问题终于解决!
以上各种拙计,有高手指正不吝感激!
本文系原创,转载请注明出处:/article/6469245.html
相关文章推荐
- 如何让你的作业在Hadoop集群中真正实现分布式运行?
- 如何让你的作业在 Hadoop集群中真正实现分布式运行
- 如何让你的作业在Hadoop集群中真正实现分布式运行
- 如何在eclipse中编写好程序,然后打包成jar文件,在hadoop分布式集群上运行
- 如果遇到Hadoop集群正常,MapReduce作业运行出现错误,如何来查看作业运行日志(图文详解)
- 用python + hadoop streaming 编写分布式程序(二) -- 在集群上运行与监控
- Hadoop(十二):从源码角度分析Hadoo是如何将作业提交给集群的
- 如何向hadoop集群定时提交一个jar作业?
- hadoop集群,如何运行Java jar包---如何运行mapreduce程序
- hadoop+hbase+zookeeper 分布式集群搭建 + eclipse远程连接hdfs 完美运行
- 【Hadoop】集群之外的机器如何连接到集群并与HDFS交互,提交作业给Hadoop集群
- hadoop+hbase+zookeeper 分布式集群搭建 + eclipse远程连接hdfs 完美运行
- 王家林 第四讲Hadoop图文训练课程:实战构建真正的Hadoop分布式集群环境
- 如何在Centos6.5下部署Hadoop2.2的完全分布式集群(三)
- 【干货】Apache Hadoop 2.8 完全分布式集群搭建超详细过程,实现NameNode HA、ResourceManager HA高可靠性...
- hadoop 单机、伪分布式及集群下的运行测试总结
- Ubuntu12.04+Hadoop2.6.5实现全分布式集群搭建
- 如何在Hadoop集群运行JNI程序
- Spark提交作业的流程以及作业是如何被触发在集群中运行的
- Elasticsearch:分布式集群时增删改查是如何实现的?