- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
过去几天,我一直在自学Hadoop,并根据this webpage提供的信息尝试实现基本的BFS算法。我必须做一些修改和补充才能编译代码。我在运行时遇到以下错误,即使经过数小时的调试,我仍无法解决。有人可以帮我吗?
错误:
15/05/11 03:04:20 WARN mapred.LocalJobRunner: job_local934121164_0001
java.lang.Exception: java.io.IOException: Type mismatch in key from map: expected org.apache.hadoop.io.Text, received org.apache.hadoop.io.LongWritable
at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:462)
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:522)
Caused by: java.io.IOException: Type mismatch in key from map: expected org.apache.hadoop.io.Text, received org.apache.hadoop.io.LongWritable
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.collect(MapTask.java:1072)
at org.apache.hadoop.mapred.MapTask$NewOutputCollector.write(MapTask.java:715)
at org.apache.hadoop.mapreduce.task.TaskInputOutputContextImpl.write(TaskInputOutputContextImpl.java:89)
at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.write(WrappedMapper.java:112)
at org.apache.hadoop.mapreduce.Mapper.map(Mapper.java:125)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:146)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:787)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:243)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
15/05/11 03:04:21 INFO mapreduce.Job: Job job_local934121164_0001 running in uber mode : false
15/05/11 03:04:21 INFO mapreduce.Job: map 0% reduce 0%
import java.io.IOException;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Mapper.Context;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.LongWritable;
public class SearchMapper extends Mapper<Object, Text, Text, Text> {
// Types of the input key, input value and the Context object through which
// the Mapper communicates with the Hadoop framework
public void map(Object key, Text value, Context context, Node inNode)
throws IOException, InterruptedException {
// For each GRAY node, emit each of the adjacent nodes as a new node
// (also GRAY) if the adjacent node is already processed
// and colored BLACK, the reducer retains the color BLACK
// Note that the mapper is not differentiating between BLACK GREY AND WHITE
if (inNode.getColor() == Node.Color.GRAY) {
for (String neighbor : inNode.getEdges()) {
Node adjacentNode = new Node();
// Remember that the current node only has the value the id
// of its neighbour, and not the object itself. Therefore at
// this stage there is no way of knowing and assigning any of
// its other properties. Also remember that the reducer is doing
// the 'clean up' task and not the mapper.
adjacentNode.setId(neighbor);
adjacentNode.setDistance(inNode.getDistance() + 1);
adjacentNode.setColor(Node.Color.GRAY);
adjacentNode.setParent(inNode.getId());
context.write(new Text(adjacentNode.getId()), adjacentNode.getNodeInfo()); // Get nodeinfo returns a Text Object
}
inNode.setColor(Node.Color.BLACK);
}
// Emit the input node, other wise the BLACK color change(if it happens)
// Wont be persistent
context.write(new Text(inNode.getId()), inNode.getNodeInfo());
}
}
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.io.Text;
import java.io.IOException;
public class SearchReducer extends Reducer<Text, Text, Text, Text> {
// Types of the input key, the values associated with the key, the Context object for Reducers communication
// with the Hadoop framework and the node whose information has to be output
// the return type is a Node
public Node reduce(Text key, Iterable<Text> values, Context context, Node outNode)
throws IOException, InterruptedException {
// set the node id as the key
outNode.setId(key.toString());
// TODO : (huh?) Since the values are of the type Iterable, iterate through the values associated with the key
// for all the values corresponding to a particular node id
for (Text value : values) {
Node inNode = new Node(key.toString() + "\t" + value.toString());
// Emit one node after combining all the mapper outputs
// Only one node(the original) will have a non-null adjascency list
if (inNode.getEdges().size() > 0) {
outNode.setEdges(inNode.getEdges());
}
// Save the minimum distance and parent
if (inNode.getDistance() < outNode.getDistance()) {
outNode.setDistance(inNode.getDistance());
outNode.setParent(inNode.getParent());
}
// Save the darkest color
if (inNode.getColor().ordinal() > outNode.getColor().ordinal()) {
outNode.setColor(inNode.getColor());
}
}
context.write(key, new Text(outNode.getNodeInfo()));
return outNode;
}
}
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.io.Text;
import java.io.IOException;
public abstract class BaseJob extends Configured implements Tool {
protected Job setupJob(String jobName,JobInfo jobInfo) throws Exception {
Job job = new Job(new Configuration(), jobName);
job.setJarByClass(jobInfo.getJarByClass());
job.setMapperClass(jobInfo.getMapperClass());
if (jobInfo.getCombinerClass() != null)
job.setCombinerClass(jobInfo.getCombinerClass());
job.setReducerClass(jobInfo.getReducerClass());
// TODO : set number of reducers as required
job.setNumReduceTasks(3);
job.setOutputKeyClass(jobInfo.getOutputKeyClass());
job.setOutputValueClass(jobInfo.getOutputValueClass());
/*
job.setJarByClass(SSSPJob.class);
job.setMapperClass(SearchMapper.class);
job.setReducerClass(SearchReducer.class);
job.setNumReduceTasks(3);
job.setOutputValueClass(Text.class);
job.setOutputKeyClass(Text.class);*/
return job;
}
// Implement an abstract class for JobInfo object
protected abstract class JobInfo {
public abstract Class<?> getJarByClass();
public abstract Class<? extends Mapper> getMapperClass();
public abstract Class<? extends Reducer> getCombinerClass();
public abstract Class<? extends Reducer> getReducerClass();
public abstract Class<?> getOutputKeyClass();
public abstract Class<?> getOutputValueClass();
}
}
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Counters;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.fs.Path;
public class SSSPJob extends BaseJob {
// method to set the configuration for the job and the mapper and the reducer classes
private Job getJobConf(String[] args)
throws Exception {
// Defining the abstract class objects
JobInfo jobInfo = new JobInfo() {
@Override
public Class<? extends Reducer> getCombinerClass() {
return null;
}
@Override
public Class<?> getJarByClass() {
return SSSPJob.class;
}
@Override
public Class<? extends Mapper> getMapperClass() {
return SearchMapper.class;
}
@Override
public Class<?> getOutputKeyClass() {
return Text.class;
}
@Override
public Class<?> getOutputValueClass() {
return Text.class;
}
@Override
public Class<? extends Reducer> getReducerClass() {
return SearchReducer.class;
}
};
return setupJob("ssspjob", jobInfo);
}
// the driver to execute the job and invoke the map/reduce functions
public int run(String[] args) throws Exception {
int iterationCount = 0;
Job job;
// No of grey nodes
long terminationValue = 1;
while( terminationValue >0){
job = getJobConf(args);
String input, output;
// Setting the input file and output file for each iteration
// During the first time the user-specified file will be the
// input whereas for the subsequent iterations
// the output of the previous iteration will be the input
// NOTE: Please be clear of how the input output files are set
// before proceding.
// for the first iteration the input will be the first input argument
if (iterationCount == 0)
input = args[0];
else
// for the remaining iterations, the input will be the output of the previous iteration
input = args[1] + iterationCount;
output = args[1] + (iterationCount + 1);
FileInputFormat.setInputPaths(job, new Path(input));
FileOutputFormat.setOutputPath(job, new Path(output));
job.waitForCompletion(true);
Counters jobCntrs = job.getCounters();
terminationValue = jobCntrs.findCounter(MoreIterations.numberOfIterations).getValue();
// if the counter's value is incremented in the reducer(s), then there are more
// GRAY nodes to process implying that the iteration has to be continued.
iterationCount++;
}
return 0;
}
public static void main(String[] args) throws Exception {
int res = ToolRunner.run(new Configuration(), new SSSPJob(), args);
if(args.length != 2){
System.err.println("Usage: <in> <output name> ");
System.exit(1);
System.out.println("Huh?");
}
System.exit(res);
}
}
最佳答案
MR作业中的键应实现WritableComparable,而值应实现Writable。我认为您的映射器代码使用的是“对象”类型的实例。
只需在 map 之前添加@Override批注并减少方法,以便它们显示错误。
否则,您不会看到任何错误,但是由于签名不匹配,因此将调用默认的IdentityMapper,从而导致错误。
如果要处理文本文件,则map方法的键应为LongWritable,如果要使用自定义键,则应实现WritableComparable。
关于java - Hadoop-MapReduce中的调试。映射器没有被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30157077/
为了让我的代码几乎完全用 Jquery 编写,我想用 Jquery 重写 AJAX 调用。 这是从网页到 Tomcat servlet 的调用。 我目前情况的类似代码: var http = new
我想使用 JNI 从 Java 调用 C 函数。在 C 函数中,我想创建一个 JVM 并调用一些 Java 对象。当我尝试创建 JVM 时,JNI_CreateJavaVM 返回 -1。 所以,我想知
环顾四周,我发现从 HTML 调用 Javascript 函数的最佳方法是将函数本身放在 HTML 中,而不是外部 Javascript 文件。所以我一直在网上四处寻找,找到了一些简短的教程,我可以根
我有这个组件: import {Component} from 'angular2/core'; import {UserServices} from '../services/UserService
我正在尝试用 C 实现一个简单的 OpenSSL 客户端/服务器模型,并且对 BIO_* 调用的使用感到好奇,与原始 SSL_* 调用相比,它允许一些不错的功能。 我对此比较陌生,所以我可能会完全错误
我正在处理有关异步调用的难题: 一个 JQuery 函数在用户点击时执行,然后调用一个 php 文件来检查用户输入是否与数据库中已有的信息重叠。如果是这样,则应提示用户确认是否要继续或取消,如果他单击
我有以下类(class)。 public Task { public static Task getInstance(String taskName) { return new
嘿,我正在构建一个小游戏,我正在通过制作一个数字 vector 来创建关卡,该数字 vector 通过枚举与 1-4 种颜色相关联。问题是循环(在 Simon::loadChallenge 中)我将颜
我有一个java spring boot api(数据接收器),客户端调用它来保存一些数据。一旦我完成了数据的持久化,我想进行另一个 api 调用(应该处理持久化的数据 - 数据聚合器),它应该自行异
首先,这涉及桌面应用程序而不是 ASP .Net 应用程序。 我已经为我的项目添加了一个 Web 引用,并构建了各种数据对象,例如 PayerInfo、Address 和 CreditCard。但问题
我如何告诉 FAKE 编译 .fs文件使用 fsc ? 解释如何传递参数的奖励积分,如 -a和 -target:dll . 编辑:我应该澄清一下,我正在尝试在没有 MSBuild/xbuild/.sl
我使用下划线模板配置了一个简单的主干模型和 View 。两个单独的 API 使用完全相同的配置。 API 1 按预期工作。 要重现该问题,请注释掉 API 1 的 URL,并取消注释 API 2 的
我不确定什么是更好的做法或更现实的做法。我希望从头开始创建目录系统,但不确定最佳方法是什么。 我想我在需要显示信息时使用对象,例如 info.php?id=100。有这样的代码用于显示 Game.cl
from datetime import timedelta class A: def __abs__(self): return -self class B1(A):
我在操作此生命游戏示例代码中的数组时遇到问题。 情况: “生命游戏”是约翰·康威发明的一种细胞自动化技术。它由一个细胞网格组成,这些细胞可以根据数学规则生存/死亡/繁殖。该网格中的活细胞和死细胞通过
如果我像这样调用 read() 来读取文件: unsigned char buf[512]; memset(buf, 0, sizeof(unsigned char) * 512); int fd;
我用 C 编写了一个简单的服务器,并希望调用它的功能与调用其他 C 守护程序的功能相同(例如使用 ./ftpd start 调用它并使用 ./ftpd stop 关闭该实例)。显然我遇到的问题是我不知
在 dos 中,当我粘贴此命令时它会起作用: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" https://google.
在 dos 中,当我粘贴此命令时它会起作用: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" https://google.
我希望能够从 cmd 在我的 Windows 10 计算机上调用 python3。 我已重新安装 Python3.7 以确保选择“添加到路径”选项,但仍无法调用 python3 并使 CMD 启动 P
我是一名优秀的程序员,十分优秀!