R的MapReduce库问题,怎么解决

MapReduce程式调用第三方包和本地库

在MP程式中如何在不同的TaskTracker节点上调用第三方jar包和读取一些只读的文件

我们知道,在Hadoop中有一个叫做DistributedCache的东东它是用来分发应用特定的只读文件和┅个jar包的,以供Map-Reduce框架在启动任务和运行的时候使用这些缓冲的文件或者是把第三方jar包添加到其classpath路径中去要注意的是DistributedCache的使用是有一个前提嘚,就它会认为这些通过urls来表示的文件已经在hdfs文件系统里面所以这里在使用的时候第一步就是要把这些文件上传到HDFS中。

然后Hadoop框架会把这些应用所需要的文件复制到每个准备启动的节点上去它会把这些复制到mapred.temp.dir配置的目录中去,以供相应的Task节点使用

这里要注意的DistriubtedCache分发的文件分成公有与私有文件,公有文件可以给HDFS中的所有用户使用而私有文件只能被特定的用户所使用,用户可以配置上传文件的访问权限来達到这种效果

1. 配置应用程序的cache,把需要使用的文件上传到DFS中去

使用新的MP接口要注意的地方:

1. 我们知道,新的MP接口使用了Job这个类来对MP任务进荇配置这里使用的时候要注意一点

// 对conf加入配置信息 - 正确方法

// 对conf加入配置信息 - 这是有问题的,这些配置不会生效因为这里生成Job的时候它會对conf进行复制,这个看一下Job的源代码就知道

2. 如果你在启动MP任务之前调用了第三方jar包的类,那这就会有问题会在启动任务的时候找不到這个类。这个问题我还没有找到好的解决办法一个办法就是把这些类想办法移到MP任务中,如果有朋友知道更加好的办法请告诉我一下,多谢了我感觉Nutch中也会有同样的问题,什么时候研究一下Nutch的代码说不定会有很多关于Hadoop方面的收获。

2、MapReduce有哪些角色各自的作用是什麼?

MapReduce是一种并行可扩展计算模型并且有较好的容错性,主要解决海量离线数据的批处理实现下面目标

(7) 与此同时,TaskTracker不断地向JobTracker汇报心跳信息并且返回要执行的任务。

(3)中资源具体指什么主要包含:

    ● 输入划分信息,决定作业该启动多少个map任务

输入数据经过map阶段处理后的中間结果会写入内存缓冲区并且决定数据写入到哪个partitioner,当写入的数据到达内存缓冲

区的的阀值(默认是0.8)会启动一个线程将内存中的数据溢寫入磁盘,同时不影响map中间结果继续写入缓冲区在溢写过程中,

MapReduce框架会对key进行排序如果中间结果比较大,会形成多个溢写文件最后嘚缓冲区数据也会全部溢写入磁盘形成一个溢写

文件(最少有一个溢写文件),如果是多个溢写文件则最后合并所有的溢写文件为一个文件。

当所有的map task完成后每个map task会形成一个最终文件,并且该文件按区划分reduce任务启动之前,一个map task完成后

就会启动线程来拉取map结果数据到相应嘚reduce task,不断地合并数据为reduce的数据输入做准备,当所有的map tesk完成后

数据也拉取合并完毕后,reduce task 启动最终将输出输出结果存入HDFS上。

我们对Shuffle过程嘚期望是:

★ 跨界点拉取数据时尽量减少对带宽的不必要消耗

split被送入map task后,程序库决定数据结果数据属于哪个partitioner写入到内存缓冲区,到达閥值开启溢写过程,进行key排序

如果有combiner步骤,则会对相同的key做归并处理最终多个溢写文件合并为一个文件。

多个map task形成的最终文件的对應partitioner会被对应的reduce task拉取至内存缓冲区对可能形成多个溢写文件合并,最终

Partitioner类:在shuffle过程中将按照key值将中间结果分为R份,每一份都由一个reduce去完荿

Reducer类:对所有的map中间结果,进行合并

★ JobTracker挂掉,整个作业挂掉存在单点故障

★ JobTracker既负责资源管理又负责作业控制,当作业增多时JobTracker内存昰扩展的瓶颈

YARN设计考虑以上缺点,对MapReduce重新设计:

我要回帖

更多关于 R= 的文章

 

随机推荐