记一次mapreduce排错经历

在进行HDP性能测试时遇到任务挂掉问题,错误信息显示为'NumberFormatException'。通过排查发现失败任务集中于特定节点,疑似环境变量或二进制文件损坏导致。采取了从功能相似节点复制文件修复问题。

背景

最近要基于hdp做一次性能测试,早上提交任务时,发下,一直挂掉

具体报错如下:

java.lang.NumberFormatException: For input string: "32M"
# 查看所有的任务
yarn application -list -appStates ALL
# 找到最近失败的url,后台查看,发现失败的job全部集中在node8上,怀疑是2进制或者环境变量的问题
  1. 命令行调用接口上传测试
hadoop fs -put testfile s3a://hdp26/
报错
-put For input string: "32M"
  1. 怀疑2进制被破坏

  2. 修复

# 从功能相似的节点copy 全部文件
cd /usr/hdp/2.6.4.0-91/
scp -r * node8:/usr/hdp/2.6.4.0-91/
  1. 恢复
### MapReduce 过程中排序次数详解 MapReduce 是一种用于大规模数据集并行处理的编程模型,其中排序是一个核心环节。以下是关于 MapReduce 阶段中排序次数的具体分析。 #### 1. **Map 端的排序** 在 MapTask 阶段,当 Mapper 输出键值对后,这些数据会被缓存到内存缓冲区中。一旦缓冲区达到一定阈值(默认为 `io.sort.mb` 参数设置的比例),后台线程会将这部分数据写入磁盘前先对其进行分区和排序[^3]。因此,在 Map 端会发生一次按键值的排序操作。 此阶段的主要目的是: - 将属于同一 Reduce 的数据划分为相同的分区。 - 对每个分区内的数据按键值进行初步排序,便于后续 Shuffle 和 Combine 操作。 ```java // 设置 Map 端排序内存大小 Configuration conf = new Configuration(); conf.setInt("mapreduce.task.io.sort.mb", 200); ``` #### 2. **Shuffle 阶段的排序** 进入 Shuffle 阶段后,Reducer 从多个 MapTask 获取对应的分区数据。在获取过程中,Reducer 并不会简单地拼接这些数据流,而是会对所有来自不同 MapTask 的数据再次按键值进行全局排序[^5]。这是因为在 Map 端完成的排序仅限于单个分区内部,而 Reducer 收到的是跨多个 MapTask 的分区数据,需要统一整理顺序。 此阶段的特点是: - 数据来源于不同的 MapTask,可能存在交错无序的情况。 - 排序完成后,数据才能按 Key 分组传递给 Reducer 处理。 #### 3. **总结:总排序次数** 综上所述,MapReduce 流程中共发生两次主要的排序操作: - **第一次排序**发生在 Map 端,针对每个分区的数据按键值进行局部排序[^3]。 - **第二次排序**发生在 Shuffle 阶段,由 Reducer 统一对来自多个 MapTask 的数据进行全局排序[^5]。 尽管 Combiner 可能会在 Map 端进一步优化中间结果,但它并不影响排序本身的逻辑或次数[^4]。 --- ### 示例代码片段 以下是一段简单的配置代码示例,展示了如何通过调整参数优化 Map 端的排序性能: ```java // 增加 Map 端排序使用的内存比例 conf.setInt("mapreduce.task.io.sort.mb", 256); // 开启中间数据压缩以减少 I/O 开销 conf.setBoolean("mapreduce.map.output.compress", true); conf.setClass("mapreduce.map.output.compress.codec", org.apache.hadoop.io.compress.GzipCodec.class, org.apache.hadoop.io.compress.CompressionCodec.class); ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值