MapReduce二次排序中遇到的问题,及解决方法

来源:互联网 发布:电脑垃圾清理软件排名 编辑:程序博客网 时间:2024/05/17 06:25

遇到的问题

-mapreduce_shuffle does not exist
-EOF Exception

解决方法

mapreduce_shuffle does not exist

Container launch failed for container_1446452318872_0002_01_000002 : org.apache.hadoop.yarn.exceptions.InvalidAuxServiceException: The auxService:mapreduce_shuffle does not exist        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)        at java.lang.reflect.Constructor.newInstance(Constructor.java:526)        at org.apache.hadoop.yarn.api.records.impl.pb.SerializedExceptionPBImpl.instantiateException(SerializedExceptionPBImpl.java:152)        at org.apache.hadoop.yarn.api.records.impl.pb.SerializedExceptionPBImpl.deSerialize(SerializedExceptionPBImpl.java:106)        at org.apache.hadoop.mapreduce.v2.app.launcher.ContainerLauncherImpl$Container.launch(ContainerLauncherImpl.java:155)        at org.apache.hadoop.mapreduce.v2.app.launcher.ContainerLauncherImpl$EventProcessor.run(ContainerLauncherImpl.java:369)        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)        at java.lang.Thread.run(Thread.java:745)

在yarn-site.xml配置文件中添加如下配置:

<configuration><!-- Site specific YARN configuration properties -->        <property>            <name>yarn.nodemanager.aux-services</name>            <value>mapreduce_shuffle</value>        </property>        <property>            <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>            <value>org.apache.hadoop.mapred.ShuffleHandler</value>        </property></configuration>

EOF Exception

Error: java.lang.RuntimeException: java.io.EOFException        at org.apache.hadoop.io.WritableComparator.compare(WritableComparator.java:135)        at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.compare(MapTask.java:1245)        at org.apache.hadoop.util.QuickSort.fix(QuickSort.java:35)        at org.apache.hadoop.util.QuickSort.sortInternal(QuickSort.java:87)        at org.apache.hadoop.util.QuickSort.sort(QuickSort.java:63)        at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.sortAndSpill(MapTask.java:1575)        at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.flush(MapTask.java:1462)        at org.apache.hadoop.mapred.MapTask$NewOutputCollector.close(MapTask.java:700)        at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:770)        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:340)        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:415)        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1556)        at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162)Caused by: java.io.EOFException        at java.io.DataInputStream.readInt(DataInputStream.java:392)        at com.wowSpark.secondarySort.NewKey.readFields(NewKey.java:29)        at org.apache.hadoop.io.WritableComparator.compare(WritableComparator.java:129)        ... 14 more

问题原因:

public class NewKey implements WritableComparable<NewKey> {    ...    @Override    public void readFields(DataInput in) throws IOException {        first = in.readInt();        second = in.readInt();    }    @Override    public void write(DataOutput out) throws IOException {        /**原来是这样写的          out.write(first);          out.write(second);          因为上面的readFields方法中用的是          in.readInt() 读取四个输入字节并返回一个 int 值。简单的说它要读取4个字节的数据。          如果这里使用 out.write() 将指定字节(参数 b 的八个低位)写入基础输出流。它只写1个字节的数据,因此会导致上面异常         */        out.writeInt(first);        out.writeInt(second);    }

  • 遇到的问题
  • 解决方法
    • mapreduce_shuffle does not exist
    • EOF Exception

0 0
原创粉丝点击