MR中map task进行到100%仍然为RUNNIN的问题解决办法(record full或buffer full)

1. 问题描述

运行MR的时候,发现进展到一定程序后,进度停滞,一段时间后,因为task超时而中断。

打开jobtacker,查看对应的MR,发现运行的map数量等于集群所配置的task数量,并且这些map task进度为100%,但仍处于RUNNING状态。


图1:MR进度


图2:RUNNING状态的task,进度都是100%。



图3:点开某个task,log内容如下:



2. 解决办法

从日志中可以看出,是由于 record 满了。
解决办法是调整下述3个参数:



文件来源:http://wenku.baidu.com/view/40d63e0a16fc700abb68fcf0.html




{ int show_len = strlen(showInfo); if (show_len == 0) return ERR_BAD_PARAM; //pthread_mutex_lock(&g_print_mutex); //char bufferPrint[show_len * 2]; int g_preserve_len = strlen(g_bufferPreserve); // 当前保留的数据长度 // 构造完整待处理字符串:[上次保留] + [本次新数据] char full_input[BUFFER_SIZE]; int full_input_len = 0; // 1. 拼接:旧保留部分 + 新数据 memcpy(full_input, g_bufferPreserve, g_preserve_len); memcpy(full_input + g_preserve_len, showInfo, show_len); full_input_len = g_preserve_len + show_len; if (full_input_len >= BUFFER_SIZE) { full_input_len = BUFFER_SIZE - 1; // 截断保护 } full_input[full_input_len] = '\0'; char parsed_output[BUFFER_SIZE]; memset(parsed_output, 0, sizeof(parsed_output)); swIpiproxyPrintStrParse(full_input, parsed_output, BUFFER_SIZE, TRUE); int parsed_len = strlen(parsed_output); // 2. 确定本次要打印的部分:从开头到倒数第50字节(如果够) int print_len = (parsed_len > PRESERVE_SIZE) ? (parsed_len - PRESERVE_SIZE) : 0; if (print_len > 0) { //printf("[Print] Output (excluding last %d bytes):\n%.*s\n", PRESERVE_SIZE, print_len, full_input); } // 3. 更新全局 buffer:保留最后 PRESERVE_BYTES 字节(用于下次拼接) if (parsed_len > PRESERVE_SIZE) { // 复制最后 PRESERVE_SIZE 字节到保留区 memmove(g_bufferPreserve, parsed_output + parsed_len - PRESERVE_SIZE, PRESERVE_SIZE); g_bufferPreserve[PRESERVE_SIZE] = '\0'; // 确保字符串安全 // --- 步骤2:从 parsed_output 中“移除”这 PRESERVE_SIZE 字节 --- parsed_output[parsed_len - PRESERVE_SIZE] = '\0'; // 截断! // ✅ 现在 parsed_output 只包含前面的部分,最后 PRESERVE_SIZE 被逻辑删除 } else { // 如果总长度 ≤ PRESERVE_SIZE,说明整个内容都完整,全部保留 memmove(g_bufferPreserve, parsed_output, parsed_len); g_bufferPreserve[parsed_len] = '\0'; // --- 完全清空 parsed_output --- parsed_output[0] = '\0'; // 相当于“全部移除” } printf("\n---parsed_output:%s--- \n", showInfo); // 4. 重置超时计时器 //reset_timer(); //pthread_mutex_unlock(&g_print_mutex); return ERR_NO_ERROR; } 结合该函数实现定时器
最新发布
09-30
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值