mapreduce清理log的问题

我想用mapreduce的方式来清理存储在hdfs上的log文件,map和reduce的阶段需要用到redis来完成清理逻辑,请问一下mapreduece程序里可以使用redis吗
 

zp0824 - 好好学习,天天向上

赞同来自:

可以

唐半张 - 一句话介绍

赞同来自:

如果我用python来开发mapreduce,也可以用redis吗。如果我需要根据reduce的key来输出到不同的目录,这个用python可以吗。

zp0824 - 好好学习,天天向上

赞同来自:

hadoop通过streaming支持多种不同语言书写的mapreduce。对于mapper或者reducer,它其实就是nodemanager上执行的一个进程而已,这个进程要干什么事情完全取决于应用怎么写,因此在其中使用redis、读写数据库、写本地文件或者hdfs文件等等,都是可以的。 我们的课程中有streaming相关的部分,仔细学习之后可以动手做做,有具体问题我们可以一起讨论。

唐半张 - 一句话介绍

赞同来自:

谢谢老师。有个地方没搞懂,mapreduce是在数据所在的datanode上执行任务,如果我的任务中使用数据库/redis,那对应的datanode上是不是得安装相关驱动或者依赖库,否则是怎么执行的呢

zp0824 - 好好学习,天天向上

赞同来自:

首先请一定要搞清楚一个问题,mapreduce是在nodemanager上执行,不是datanode,在datanode上执行的说法非常不正确,这样提会让别人觉得我们根本不懂hadoop。 如果你需要使用其他的库,这个库相应的客户端确实需要安装,安装的方法可能是: 1. 在集群的lib(比如/user/lib/hadoop/lib)下加入依赖包。比如mysql就是这样做的,当然这得是任务是Java语言实现的,它读取lib中的jar包作为连接远端服务的入口。 2. 如果是Java写的mapreduce,使用-libjars方式将依赖包上传到集群,任务执行的时候会识别libjars中定义的那些类文件并达到连接远端的目的。 3. 使用-file参数在提交任务的时候上传依赖文件,这个依赖文件会在map或者reduce task执行的时候被解压到执行目录(相当于.),task可以直接用文件的相对路径访问这个文件。简单的例子是c/c++依赖的.so/.a等依赖包,在使用的时候就是提交任务的时候加上类似"-file a.so"这样的参数,然后任务中就可以直接调用a.so中定义的函数了。 4. 到集群所有的机器上安装相应的客户端,这个方法最简单,task能直接依赖这个安装好的客户端访问远端服务

要回复问题请先登录注册