如何让你的作业在Hadoop集群中真正实现分布式运行?
来源:互联网 发布:脑死亡有奇迹吗 知乎 编辑:程序博客网 时间:2024/06/06 19:32
搭建过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.jar2.设置HADOOP_CLASSPATH到hbase-0.94.3.jar3.设置HADOOP_CLASSPATH到HBASE_HOME4.把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集群运行分布式作业问题终于解决!
- 如何让你的作业在Hadoop集群中真正实现分布式运行?
- 如何让你的作业在 Hadoop集群中真正实现分布式运行
- Spark提交作业的流程以及作业是如何被触发在集群中运行的
- 如何在eclipse中编写好程序,然后打包成jar文件,在hadoop分布式集群上运行
- 在Hadoop分布式集群中安装hive
- 如何在Hadoop集群运行JNI程序
- 如何在Hadoop集群运行JNI程序
- 如何让Hadoop运行在OpenStack之上
- 在Docker中运行Hadoop+Spark集群
- 搭建Hadoop并在集群中运行
- 如何让你的web应用运行在80端口
- 王家林 第四讲Hadoop图文训练课程:实战构建真正的Hadoop分布式集群环境
- MCU 如何实现让部分代码运行在 RAM 中
- 如何部署hadoop分布式集群
- 如何监控你的Hadoop+Hbase集群?
- 如何监控你的Hadoop+Hbase集群?
- 让你的QTP在运行过程中“收入自如”
- Hadoop集群中wordcount的运行命令
- eas 中由 ssl.c 文件中 SSL_close_all 引发的 bug
- 给程序员新手的一些建议
- (Python学习1) Python对象初探
- HTML文档对象的事件以及addEventListener与attachEvent介绍
- 安卓中ELF文件格式的几点总结
- 如何让你的作业在Hadoop集群中真正实现分布式运行?
- HashSet与TreeSet的介绍
- Android的3D旋转
- window rsync server 安装使用
- iPhone KVO、KVC、KVB介绍
- Quartz CronTrigger最完整触发时间配置说明
- node to traverse cannot be null! -- hibernate
- Maven-6:问题:Unable to locate the Javac Compiler in:
- IOS设计模式学习(16)装饰