在2节点集群中使用压缩时,Hadoop映射任务失败。但当作为单个节点运行时,这两个节点都可以正常工作

在2节点集群中使用压缩时,Hadoop映射任务失败。但当作为单个节点运行时,这两个节点都可以正常工作,hadoop,mapreduce,compression,Hadoop,Mapreduce,Compression,节点1:hadoop2.5.2 RedhatLinux.el6 64位 构建64位本机库并运行正常 节点2:hadoop2.5.2 RedhatLinux.el5 32位 构建32位本机库,它正在工作 当作为单个节点运行map reduce任务时,它会与压缩一起工作 作为多节点,它也可以在没有压缩的情况下工作 但作为带压缩的多节点,它不起作用 映射任务仅在节点1的一个节点中完成,在另一个节点的节点2中的某个时间,映射任务失败,出现错误,作业失败 错误:java.io.IOException:溢出

节点1:hadoop2.5.2 RedhatLinux.el6 64位 构建64位本机库并运行正常

节点2:hadoop2.5.2 RedhatLinux.el5 32位 构建32位本机库,它正在工作

当作为单个节点运行map reduce任务时,它会与压缩一起工作

作为多节点,它也可以在没有压缩的情况下工作

但作为带压缩的多节点,它不起作用

映射任务仅在节点1的一个节点中完成,在另一个节点的节点2中的某个时间,映射任务失败,出现错误,作业失败

错误:java.io.IOException:溢出在失败 org.apache.hadoop.mapred.MapTask$MapOutputBuffer.checkSpillExceptionMapTask.java:1535 在原因:java.lang.RuntimeException:本机lz4库未运行 可在 org.apache.hadoop.io.compress.Lz4Codec.getCompressorTypeLz4Codec.java:124 在 org.apache.hadoop.io.compress.codepool.getCompressorCodecPool.java:148 在

我试过了

<name>mapreduce.admin.user.env</name>
 <value>LD_LIBRARY_PATH=$HADOOP_HOME/lib/native</value>
在mapred-site.xml中 但还是不起作用


请提出一个解决方案

在引发异常的计算机中启用hadoop的调试日志。 重新启动hadoop进程,发布您应该能够根据NativeCodeLoader的日志找出本机库未加载的原因

您可以使用下面的命令验证是否加载了本机库

hadoop checknative -a

将这些属性添加到Hadoop节点的mapred-site.xml中(作业在其中提交)解决了问题

    <property>
            <name>yarn.app.mapreduce.am.admin.user.env</name>
            <value>LD_LIBRARY_PATH={{HADOOP_COMMON_HOME}}/lib/native</value>
    </property>
    <property>
            <name>yarn.app.mapreduce.am.env</name>
            <value>LD_LIBRARY_PATH={{HADOOP_COMMON_HOME}}/lib/native</value>
    </property>
    <property>
            <name>mapreduce.admin.user.env</name>
            <value>LD_LIBRARY_PATH={{HADOOP_COMMON_HOME}}/lib/native</value>
    </property>

Node1:hadoop checknative-a 2017-01-16 14:02:09041信息[main]bzip2.Bzip2Factory Bzip2Factory.java:isNativeBzip2Loaded70-成功加载并初始化native-bzip2库系统native 2017-01-16 14:02:09049信息[main]zlib.ZlibFactory ZlibFactory.java:49-成功加载并初始化本机zlib库本机库检查:hadoop:true/home/ruleuser/hadoop/hadoop-2.5.2/lib/native/libhadoop.so.1.0.0 zlib:true/usr/lib/libz.so.1 snapy:true/usr/lib/libsnapy.so.1 lz4:true修订版:99 bzip2:true/usr/lib/libz2.so.1在节点2中也都是本机版本库已加载。它适用于单节点,但在多节点中会出现问题hadoop checknative的输出是什么?在多节点中部署时,这是两个节点中的一个命令?它们是否相同。输出hadoop checknative-a在节点1本机库检查:hadoop:true/home/ruleuser/hadoop/hadoop-2.5.2/lib/Native/libhadoop.so.1.0.0 zlib:true/usr/lib/libz.so.1 snapy:true/usr/lib/libsnapy.so.1 lz4:true修订:99 bzip2:true/usr/lib/libbz2.so.1------在节点2中hadoop:true/home/admin/hadoop-2.5.2/lib/native/libhadoop.so.1.0.0 zlib:true/lib64/libz.so.1 snappy:true/usr/lib64/libsnappy.so.1 lz4:true修订版:99 bzip2:true/lib64/libbz2.so.1------一个库是64位的,另一个是32位的,32位机器的输出是什么。