Я бег этого кода, используя oozie рабочего процесс и получить ошибку несоответствия типов:Тип несовпадение значения с карты
public static class mapClass extends Mapper<Object, Text, LongWritable, LongWritable> {
public void map(Object, Text, Context..)
..
context.write(<LongWritable type> , <LongWritable type>)
}
public static class reduceClass extends Reducer<LongWritable, LongWritable,LongWritable, LongWritable> {
public void reduce(LongWritable, LongWritable, context)
..
context.write(<LongWritable type>, <LongWritable type>)
{
}
java.io.IOException: Type mismatch in value from map: expected org.apache.hadoop.io.LongWritable, recieved org.apache.hadoop.io.Text
Я использую новый-API в моем рабочем процессе. Тот же код отлично работает без использования oozie.
Любая помощь будет оценена по достоинству. Благодарю.
----- образец кода ---
package org.apache.hadoop;
import java.io.IOException;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
public class MapperLong extends Mapper<LongWritable, Text, LongWritable, LongWritable> {
public final static int COL_ZERO = 0;
public final static int COL_ONE = 1;
public final static int COL_TWO = 2;
public final static int COL_THREE = 3;
@Override
public void map(LongWritable offset, Text line, Context context)
throws IOException, InterruptedException {
String[] parts = (line.toString()).split(" ");
LongWritable one = new LongWritable(Integer.parseInt(parts[COL_ONE]));
LongWritable two = new LongWritable(Integer.parseInt(parts[COL_TWO]));
context.write(one, two);
}
}
package org.apache.hadoop;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.mapreduce.Reducer;
public class ReducerLong extends Reducer<LongWritable, LongWritable, LongWritable, LongWritable> {
@Override
public void reduce(LongWritable colOneKey, Iterable<LongWritable> values,
Context context) throws IOException, InterruptedException{
Set<Integer> colTwo = new HashSet<Integer>();
for (LongWritable val : values) {
colTwo.add(Integer.valueOf((int)val.get()));
}
context.write(colOneKey, new LongWritable(colTwo.size()));
}
}
}
java.io.IOException: Несоответствие типов в стоимости от карты: ожидается org.apache.hadoop.io.LongWritable, org.apache за полученный. hadoop.io.Text at org.apache.hadoop.mapred.MapTask $ MapOutputBuffer.collect (MapTask.java:876) at org.apache.hadoop.mapred.MapTask $ NewOutputCollector.write (MapTask.java:574) на org.apache.hadoop.mapreduce.TaskInputOutputContext.write (TaskInputOutputContext.java:80) на org.apache.hadoop.mapreduce.Mapper.map (Mapper.java:124) на org.apache.hadoop.mapreduce .Mapper.run (Mapper.java:144) на org.apache.hadoop.mapred.MapTask.runNewMapper (MapTask.java:647) на org.apache.hadoop.mapred.MapTask.run (MapTask.java:323) at org.apache.hadoop.mapred.Child $ 4.run (Child.java:270) at java.security.AccessController.doPrivileged (собственный метод) at javax.security.auth.Subject.doAs (Subject.java : 396) на org.apache.hadoop.security.UserGroupInformation.doAs (UserGroupInformation.java:1127) на org.apache.hadoop.mapred.Child.main (Child.java:264)
Input :
34 342 1 1
45 23 0 1
..
..
Примечание. Я изменил тип объекта на LongWritable, который не имел никакого значения , Вышеупомянутое исключение выбрасывается при использовании следующего свойства в workflow.xml. Без следующего свойства код выполняет вывод вывода так же, как вход с префиксом смещения!
<property>
<name>mapred.output.key.class</name>
<value>org.apache.hadoop.io.LongWritable</value>
</property>
<property>
<name>mapred.output.value.class</name>
<value>org.apache.hadoop.io.LongWritable</value>
</property>
Опубликованный код выглядит хорошо. Не могли бы вы выслать полный код? –
В общем, не забывайте, что Java-генераторы * не * принудительно применяются во время выполнения, поэтому любой может поместить любой объект на карту по своему усмотрению. в экземпляре Hadoop Text вместо Hadoop LongWritable, вы получите это сообщение. Дополнительный код, полный stacktrace исключения будет helpf ул. –
Согласовано с owlstead. Мне было бы лучше, если первый элемент шаблона Mapper не является «Object». –