hadoop的MR如何实现动态替换算法包
2015-08-12 18:12
447 查看
最近是用hadoop遇到些需求,要想抽离出reduce里面的某个算法包,从而能够动态改动算法
(1)如何动态调用抽离出的算法包Jar
这里就涉及到URLClassLoader的东西
当然这里有个前提,就是要让算法包和调用者都是用同一个接口来实现实例化和调用。
(2)如何在hadoop的MR上实现
MR要读取文件,当然是放在hdfs集群上,所以需要调用hdfs://xxxx的路径。
因为URL解析需要protocol,而原始的Java是没有hdfs解析协议的,所以需要加上一句
这个就放在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
(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
相关文章推荐
- 详解HDFS Short Circuit Local Reads
- Hadoop_2.1.0 MapReduce序列图
- 使用Hadoop搭建现代电信企业架构
- 单机版搭建Hadoop环境图文教程详解
- hadoop常见错误以及处理方法详解
- hadoop 单机安装配置教程
- hadoop的hdfs文件操作实现上传文件到hdfs
- hadoop实现grep示例分享
- Apache Hadoop版本详解
- linux下搭建hadoop环境步骤分享
- hadoop client与datanode的通信协议分析
- hadoop中一些常用的命令介绍
- Hadoop单机版和全分布式(集群)安装
- 用PHP和Shell写Hadoop的MapReduce程序
- hadoop map-reduce中的文件并发操作
- Hadoop1.2中配置伪分布式的实例
- java结合HADOOP集群文件上传下载
- 用python + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
- Hadoop安装感悟
- hadoop安装lzo