hadoop异常之 reduce拉取数据失败  (error in shuffle in fetcher)

主要错误信息:Error: org.apache.hadoop.mapreduce.task.reduce.Shuffle$ShuffleError: error
in shuffle in fetcher#43

解决办法:限制reduce的shuffle内存使用

hive:set mapreduce.reduce.shuffle.memory.limit.percent=0.1;

MR:job.getConfiguration().setStrings("mapreduce.reduce.shuffle.memory.limit.percent", "0.1");

原理分析:reduce会在map执行到一定比例启动多个fetch线程去拉取map的输出结果,放到reduce的内存、磁盘中,然后进行merge。当数据量大时,拉取到内存的数据就会引起OOM,所以此时要减少fetch占内存的百分比,将fetch的数据直接放在磁盘上。

mapreduce.reduce.shuffle.memory.limit.percent:每个fetch取到的map输出的大小能够占的内存比的大小。默认是0.25。因此实际每个fetcher的输出能放在内存的大小是reducer的java heap size*0.9*0.25。

完整的错误日志

INFO mapreduce.Job: Task Id : attempt_xxxxxx, Status : FAILED

Error: org.apache.hadoop.mapreduce.task.reduce.Shuffle$ShuffleError: error in shuffle in fetcher#43

at org.apache.hadoop.mapreduce.task.reduce.Shuffle.run(Shuffle.java:134)

at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:376)

at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:167)

at java.security.AccessController.doPrivileged(Native Method)

at javax.security.auth.Subject.doAs(Subject.java:396)

at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1550)

at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162)

Caused by: java.lang.OutOfMemoryError: Java heap space

at org.apache.hadoop.io.compress.BlockDecompressorStream.getCompressedData(BlockDecompressorStream.java:123)

at org.apache.hadoop.io.compress.BlockDecompressorStream.decompress(BlockDecompressorStream.java:98)

at org.apache.hadoop.io.compress.DecompressorStream.read(DecompressorStream.java:85)

at org.apache.hadoop.io.IOUtils.readFully(IOUtils.java:192)

at org.apache.hadoop.mapreduce.task.reduce.InMemoryMapOutput.shuffle(InMemoryMapOutput.java:97)

at org.apache.hadoop.mapreduce.task.reduce.Fetcher.copyMapOutput(Fetcher.java:434)

at org.apache.hadoop.mapreduce.task.reduce.Fetcher.copyFromHost(Fetcher.java:341)

at org.apache.hadoop.mapreduce.task.reduce.Fetcher.run(Fetcher.java:165)

时间: 2024-08-24 23:39:49

hadoop异常之 reduce拉取数据失败  (error in shuffle in fetcher)的相关文章

网页滚动到底部,拉取数据

网页滚动模式 //滚到到底部自动拉取数据 //页面滚到底部异步加载下一页数据 $(window).scroll(function () { //已经滚动到上面的页面高度 var scrollTop = parseFloat($(this).scrollTop()), //页面高度 scrollHeight = $(document).height(), //浏览器窗口高度 windowHeight = parseFloat($(this).height()), totalHeight = scr

Spark Streaming中向flume拉取数据

在这里看到的解决方法 https://issues.apache.org/jira/browse/SPARK-1729 请是个人理解,有问题请大家留言. 其实本身flume是不支持像KAFKA一样的发布/订阅功能的,也就是说无法让spark去flume拉取数据,所以老外就想了个取巧的办法. 在flume中其实sinks是向channel主动拿数据的,那么就让就自定义sinks进行自监听,然后使sparkstreaming先和sinks连接在一起, 让streaming来决定是否拿数据及拿数据的频

终端对平台推送拉取数据选型

开会讨论了一个问题,就是我们平台从终端获取到数据,经过我们的处理后,传输给另一个平台做展示,这个是实时的(要求必须经过我们平台,所以杠精住嘴~~),在这个传输过程中,给出了一下三个方案来传输数据, tcp: websocket: API: 最后还是选取了API的方式,不太了解这几个,需要考虑的问题是,实时性高,数据量较大,今天没时间了,以后再整理~~ 原文地址:https://www.cnblogs.com/shuaidong/p/11025304.html

QQ群文件拉取列表失败,怎么办?

关于您的问题请您在电脑左下角的"开始"=>"运行"中,输入命令: ping pan.qun.qq.com,若提示如图信息,建议您第二天尝试即可. 若提示"检查名称后重试"建议您联系您网管或网络运营商咨询网络无法链接pan.qun.qq.com的原因.谢谢! 如果ping pan.qun.qq.com它的ip时能ping通就是DNS的问题.

拉取数据经典版

1 #! /usr/bin/env python 2 # coding=utf-8 3 import pymysql 4 import json 5 import urllib 6 import time 7 import urllib2 8 import urllib 9 import datetime 10 11 url='http://engine.dashboard.sh2.ctripcorp.com:8080/jsonp/getgroupeddatapoints?reqdata={"v

Https web Api 拉取数据踩坑记录

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;//提供安全证书 using (var http = new HttpClient()) { 在遇到HTTPS 接口时,如果POSTMAN可以随意访问,但是程序调试会遇到服务器拒绝的情况时,可以考虑是否为以上问题 原文地址:https

创建 deployment时 从 私有仓库 拉取镜像失败的解决办法 ErrImagePull

我刚开始的 ssm-deployment.yml 文件如下 使用 kubectl get deploy  结果如下 居然没有起来 因为我 pull  和push 镜像都没有问题 .然后我看 具体的Pod的状态如下 Failed to pull image "10.136.195.150:80/micro/ssm:latest": rpc error: code = Unknown desc = Error response from daemon: pull access denied

Git与远程仓库交互,拉取与提交数据

一.项目维护者建立一个中心数据远程仓库,用git init 初始化一个仓库. 二.其他developer,以该数据仓库为中心,提交各自的代码供项目维护者确认. ## 建立对远程仓库的镜像:## git remote add Wiki [email protected]:/project/ ## 拉取数据到本地:## git pull 这个命令会直接将远程仓库的分支合并到当前分支,没有经过developer确认,不人性化. 2.git fetch 这个命令将远程数据拉取到本地,可经过确认后再合并,

解决 MySQL 比如我要拉取一个消息表中用户id为1的前10条最新数据

我们都知道,各种主流的社交应用或者阅读应用,基本都有列表类视图,并且都有滑到底部加载更多这一功能, 对应后端就是分页拉取数据.好处不言而喻,一般来说,这些数据项都是按时间倒序排列的,用户只关心最新的动态,而不关心几个月甚至几年前消息,所以后端返回给客户端的数据是不会一次性传递全部内容的(不仅耗费流量,而且还给服务器带来巨大压力). 举个例就说MySQL,它已经给我们提供了相应的语句来支持这一功能,那就是limit关键字.比如我要拉取一个消息表中用户id为1的前10条最新数据,SQL语句如下: s