如何让你的作业在Hadoop集群中真正实现分布式运行?

运维 系统运维 分布式 Hadoop
搭建过hadoop之后,如何让程序在hadoop集群中分布式运行成了一件令人头痛的事。如何让你的作业在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集群运行分布式作业问题终于解决!

责任编辑:黄丹 来源: 博客
相关推荐

2019-09-26 15:43:52

Hadoop集群防火墙

2017-08-10 10:17:32

Hadoop分布式搭建

2010-06-03 14:42:47

Hadoop分布式集群

2018-07-17 15:05:34

京东Hadoop集群分布式资源管理

2024-02-20 09:50:02

Redis分布式

2010-06-03 19:46:44

Hadoop

2018-08-28 15:47:03

人工智能深度学习机器学习

2022-03-21 19:44:30

CitusPostgreSQ执行器

2012-09-19 14:09:20

Hadoop开源

2023-08-21 19:10:34

Redis分布式

2012-05-21 16:28:29

LinuxHadoop

2011-09-28 11:22:52

Hadoop

2017-12-07 15:24:10

Hadoop大数据服务器

2024-01-31 09:54:51

Redis分布式

2012-05-21 10:19:31

Hadoop

2012-09-06 09:36:17

谷歌NatiShalom数据处理

2011-12-22 09:21:04

云计算Hadoop大数据

2022-10-27 10:44:14

分布式Zookeeper

2017-02-28 09:48:30

2024-06-03 14:17:00

点赞
收藏

51CTO技术栈公众号