您的位置:首页 > 运维架构

基于HBase Hadoop 分布式集群环境下的MapReduce程序开发

2015-02-01 17:21 162 查看


  HBase分布式集群环境搭建成功后,连续4、5天实验客户端Map/Reduce程序开发,这方面的代码网上多得是,写个测试代码非常容易,可是真正运行起来可说是历经挫折。下面就是我最终调通并让程序在集群上运行起来的一些经验教训。

  一、首先说一下我的环境:

  1,集群的环境配置请见这篇博文

  2,开发客户机环境:操作系统是CentOS6.5,JDK版本是1.7.0-60,开发工具是Eclipse(原始安装是从google的ADT网站下载的ADT专用开发环境,后来加装了Java企业开发的工具,启动Flash还是ADT的:))。

  3,etc/hosts文件添加了集群的所有主机。

  二、必要准备工作:

  1,java类库准备:从集群中scp复制了Hadoop/share下所有文件,hbase/lib目录下的所有文件到开发机的/home/username/lib目录下备用(其中username是开发用户名称),打开eclipse,选择菜单window->Preferences,

在左侧树形菜单中导航至Java--Build Path--User Libraries,我添加了3个User Library,“hadoop-common”,“hadoop-yarn”,“hbase”



然后分别添加如下(这是User Libraries的导出文件,可以在上面的界面中导入)的jar包。

?
注:这个很有可能并不是运行Hbase Map/Reduce任务需要的最精简的类库,恕我没有逐一测试。

  2,新建一个Java/Application,我的名字就叫hbase1,然后在项目project视图中点击右键,选择“Build Path”--“Add Libraries...”--选择“User Library”,然后选中上面添加的三个User Library。

  3,复制集群的三个配置文件到项目的src目录下,这三个配置文件是:

?
  三、编写代码,这里基本按照我所遇挫折过程逐步完善代码(缺少类库之类的就略掉了):

   1,遭遇空指针错误--reverseDNS

主文件内容:

?
 TestHBaseMapRed.java内容:

+ View Code?
此时运行,会报如下错误:

?
看错误,不知道为什么需要调用DNS服务,hosts文件好像没有作用, 搜索很久,终于在一个老外的问题里找到答案,conf添加如下设置解决。

?
添加后,运行仍会报下面的错无,但是好像并不影响程序继续运行:

+ View Code?
   2,本地运行的问题。解决了上面的问题,程序终于可以运行了,可是我在rm的web界面中却看不到我提交的任务,再次求助bing,终于找到症结所在,需要添加设置如下:

?
   3,添加了上面语句后,新的问题又来了,运行程序出现新的错误:

+ View Code?
试着设置 job.setJarByClass(Test1.class); 无效。此问题困扰了我两天,难道只能上传到集群集群上运行吗?这样也太不方便了,N久后,终于我有幸找到了小鱼儿的博客 的这篇文章MapReduce提交作业常见问题,终于是找到了解决方法。我采用的是文中所提第三种方法,在程序开始运行前自己首先打包自己,就是调用的是写好的shell文件,这里也贴出来,以下两个文件在和src同级的dist目录中

+ View Code?
?
同时,修改了TestHBaseMapred.run方法签名,传递jar包路径,新的run方法如下:

+ View Code?
   4,在选择写入文件的Reduce方法是,同样遇到权限问题,我采用的解决方法是给所有用户授予了读写权限,这里注意/tmp也要授权,运行时用到

?
   另外,最后还有一点注意,设置log4j.properties文件中的级别为INFO,不要设置为WARN,否则看不到很多信息,不利于发现错误原因。

?
  四、At last,终于大功告成,看看map/reduce的运行过程

+ View Code?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐