当前位置: 首页 > article >正文

Hadoop 请求数据长度 Requested Data length 超过配置的最大值

一、问题

现象

Spark 任务速度变慢,也不失败。

DataNode 内存足够 CPU 负载不高 GC 时间也不长。

查看 DataNode 日志,发现有些日志出现很多 Netty RPC 超时。超时的 destination 是一个 NameNode 节点,然后查看 NameNode 节点的日志,报错如下:

在这里插入图片描述

二、解决方案

查找对应 Hadopo 源码

源码
org.apache.hadoop.ipc.Server.Connection#checkDataLength

    private void checkDataLength(int dataLength) throws IOException {
      if (dataLength < 0) {
        String error = "Unexpected data length " + dataLength +
                       "!! from " + getHostAddress();
        LOG.warn(error);
        throw new IOException(error);
      } else if (dataLength > maxDataLength) { 
        String error = "Requested data length " + dataLength +
              " is longer than maximum configured RPC length " + 
            maxDataLength + ".  RPC came from " + getHostAddress();
        LOG.warn(error);
        throw new IOException(error);    // <-------------- 异常从此处抛出来
      }
    }

this.maxDataLength = conf.getInt(CommonConfigurationKeys.IPC_MAXIMUM_DATA_LENGTH,
       CommonConfigurationKeys.IPC_MAXIMUM_DATA_LENGTH_DEFAULT);

  /** Max request size a server will accept. */
  public static final String IPC_MAXIMUM_DATA_LENGTH =
      "ipc.maximum.data.length";
  /** Default value for IPC_MAXIMUM_DATA_LENGTH. */
  public static final int IPC_MAXIMUM_DATA_LENGTH_DEFAULT = 64 * 1024 * 1024;


修改NameNode的hdfs-site.xml配置文件,添加以下配置:

<property>
  <name>ipc.maximum.data.length</name>
  <value>67108864</value>
  <description>This indicates the maximum IPC message length (bytes) that can be
    accepted by the server. Messages larger than this value are rejected by the
    immediately to avoid possible OOMs. This setting should rarely need to be
    changed.
  </description>
</property>

64M -> 256M

67108864 * 4 = 268435456

允许ipc通讯最大的数据包为256MB,默认配置为64MB。

最后重启 NameNode,再重启 DataNode。


http://www.kler.cn/a/107989.html

相关文章:

  • 【PPTist】公式编辑、插入音视频、添加动画
  • 【数据链电台】洛克希德·马丁(Lockheed Martin)
  • 【git】在服务器使用docker设置了一个gogs服务器,访问和现实都不理想
  • C++ STL 中的 vector 总结
  • 在iStoreOS上安装Tailscale
  • api开发如何在代码中使用京东商品详情接口的参数?
  • Macos文件图像比较工具:Kaleidoscope for Mac
  • Tomcat最大并发数及在线用户数
  • 负载均衡--Haproxy
  • Vuex模块化(modules)与namespaced(命名空间)的搭配
  • Redis(05)| 数据结构-哈希表
  • 071:mapboxGL上传含shp的zip文件,在map上解析显示图形
  • 当前JavaEE初阶的阶段知识总结
  • 【Python】【Flask】flask_login的初始化
  • 【Unity小技巧】可靠的相机抖动及如何同时处理多个震动
  • 【计算机视觉】相机
  • C语言char的取值范围以及溢出情况
  • vue源码分析(四)——vue 挂载($mount)的详细过程
  • 【计算机视觉】3D视觉
  • 机器学习(五)如何理解机器学习三要素
  • shell脚本实战案例---数据库的备份
  • 【C++】STL容器——探究不同 [ 迭代器 ] 种类&在STL中的使用方式(15)
  • html5怎么实现语音搜索
  • Android系统的特性
  • RPC远程调用加密方法获取返回值
  • 线扫相机DALSA--常见问题一:软件安装顺序