分享

mapreduce优化,map task太多问题

cloudcat 发表于 2016-12-3 20:23:26 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 1 8654
场景:分析web日志(最小的日志有25G),根据ip查找对应地区。我的步骤是
1 在map setup 方法,创建ip字典,通过二分法查找对应国家或者城市。 由于ip库有28M,每次加载需要8秒左右。

运行mapreduce,由于block是128M,所以他默认分为 200左右的 map  task,导致一个25G的文件初始化都要24分钟。。

问题1:由于map 的setup需要创建ip字典,200个 map task 就需要创建200次,每次9秒,这样是不是浪费的半小时创建时间,还是在集群中 map 的setup方法就创建一次?

问题2:由于我输出的文件是一个文件,所以 map输出的key我设置为1,由于数据几十个G,这样一个reduce,是不是会内存溢出?

我对reduce原理不太了解,他向map 拉数据,都是放到内存,还是一部分存在磁盘,如果数据太大,都放到内存,肯定会出现oom,如果会放到磁盘,最后我们遍历就不会内存溢出。

问题3:我在网上查询了,减少map task个数可以提高性能。我在mapred-site.xml中添加属性
mapred.min.split.size ,设置为512M如下:
<property>
<name>
mapred.min.split.size </name>
<value>54525952</value>
</property>

但是启动map reduce,task 依然是200个左右,没起作用,求解。

本帖被以下淘专辑推荐:

已有(1)人评论

跳转到指定楼层
qcbb001 发表于 2016-12-3 21:51:46
问题1:由于map 的setup需要创建ip字典,200个 map task 就需要创建200次,每次9秒,这样是不是浪费的半小时创建时间,还是在集群中 map 的setup方法就创建一次?
这个应该是创建一次就可以了
在执行Map任务前,进行相关变量或者资源的集中初始化工作,被MapReduce框架仅且执行一次


问题2:由于我输出的文件是一个文件,所以 map输出的key我设置为1,由于数据几十个G,这样一个reduce,是不是会内存溢出?

我对reduce原理不太了解,他向map 拉数据,都是放到内存,还是一部分存在磁盘,如果数据太大,都放到内存,肯定会出现oom,如果会放到磁盘,最后我们遍历就不会内存溢出。

在拉取的时候,尽量多用内存,可以提高效率,当然也可以放到磁盘。
推荐参考
彻底了解mapreduce核心Shuffle--解惑各种mapreduce问题
http://www.aboutyun.com/forum.php?mod=viewthread&tid=7078

问题3:我在网上查询了,减少map task个数可以提高性能。我在mapred-site.xml中添加属性 mapred.min.split.size ,设置为512M如下:
<property>
<name>mapred.min.split.size </name>
<value>54525952</value>
</property>

但是启动map reduce,task 依然是200个左右,没起作用,求解。

没起作用 应该是正常的,因为好像不是某一个参数控制,推荐参考
如何确定 Hadoop map和reduce的个数--map和reduce数量之间的关系是什么?

http://www.aboutyun.com/forum.php?mod=viewthread&tid=6945
hadoop中map和reduce的数量设置



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条