hadoop的MR如何实现动态替换算法包

最近是用hadoop遇到些需求,要想抽离出reduce里面的某个算法包,从而能够动态改动算法


(1)如何动态调用抽离出的算法包Jar

这里就涉及到URLClassLoader的东西

loader = new URLClassLoader(new URL[]{
						new URL(jarFile)
				}, Thread.currentThread().getContextClassLoader());
				Class<? extends Commander> myClass = (Class<? extends Commander>) loader.loadClass("com.out.CommanderImpl");
				cmd = myClass.newInstance();

当然这里有个前提,就是要让算法包和调用者都是用同一个接口来实现实例化和调用。


(2)如何在hadoop的MR上实现

MR要读取文件,当然是放在hdfs集群上,所以需要调用hdfs://xxxx的路径。

因为URL解析需要protocol,而原始的Java是没有hdfs解析协议的,所以需要加上一句

URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());

这个就放在static{}语句块里执行就好了


(3)如何告诉MR我的算法包url位置

现在url如果写死在程序,是可以直接调用的,但是如果想要动态存入,就需要传入参数。

想要在 Job和Mapper/Reducer之间传递参数,需要用到Conf.set() Conf.get()


OK,万事具备,MR写好,动态更新算法包就可以了。

附上几个有用的链接:

http://blog.csdn.net/wawmg/article/details/17961815

http://blog.csdn.net/wisgood/article/details/17080207



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值