设为首页 加入收藏

TOP

Hadoop Job 按组分资源池执行的方式
2014-11-23 20:28:57 来源: 作者: 【 】 浏览:18
Tags:Hadoop Job 资源 执行 方式


mapred.jobtracker.taskScheduler
org.apache.hadoop.mapred.FairScheduler


mapred.fairscheduler.poolnameproperty
group.name


mapred.fairscheduler.allocation.file
/home/jjt/platform/config/hadoop/pools.xml



在pools.xml中可定义了各个组可分配的资源情况:


< xml version="1.0" >


100
50
20
20
10.0
300


20
15
400
200
1.0
300




这样用户在提交job执行时即可根据所在group从所属的pool获取mapreduce资源,那么hadoop是如何确定用户所属的group呢?


hadoop的core-defauft.xml配置中hadoop.security.group.mapping:



hadoop.security.group.mapping


org.apache.hadoop.security.JniBasedUnixGroupsMappingWithFallback



指明是通过JNI的方式获取用户所属的组,也可以指定value为org.apache.hadoop.security.ShellBasedUnixGroupsMapping通过shell命令id -Gn username的方式获取group.


然而现实中用户可能属于多个组,hadoop默认以返回值中的第一个组作为分配资源的依据,如果我们想指定用户group不是第一个怎么办了?


第一种解决方式是提供自己的id命令,将自己的id所在的PATH路径放在系统id命令PATH之前,让id -Gn username 返回的的第一个组为我们需要的特定组,这种方式相当于覆盖了系统id命令,可能影响系统中依赖id命令的部分。


第二种方式则是修改org.apache.hadoop.security.ShellBasedUnixGroupsMapping.java源码,在代码中对group进行过滤,这种方式需要每次cdh升级时替换hadoop-common.jar,hadoop cdh4.5采用maven管理,本人在编译过程中也遇到一些麻烦。


下载含有源码的cdh4.5 hadoop, 进入src,跳过可能出错的test,执行mvn install -Dmaven.test.skip=true即可进行所有项目的编译,cdh4.5 hadoop RPC依赖于protobuf2.4, 因此需要先安装protobuf2.4。本人在windows下通过Cygwin编译成功,然而替换掉测试环境中Linux 集群上的hadoop-common.jar后,出现了jobtracker无法启动、rpc异常错误,因此还必须在Linux平台上进行编译。


在Linux上通过源码安装protobuf2.4, 执行 make install 时 出现了错误:


/usr/bin/ld: /usr/local/lib/libz.a(deflate.o): relocation R_X86_64_32S against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libz.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
libtool: install: error: relink `libprotoc.la' with the above command before installing it


这样通过以上方式就可以指定hadoop job所属用户组了。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇如何在JS中捕获console.log()的输.. 下一篇为什么学习Python及Python环境安装

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: