我有一个“失败的地图任务超出允许限制”错误,而我使用C#运行MapReduce示例应用程序,如下所示。 谁能告诉我为什么它一直向我显示这个错误? 欣赏它。
public override void Map(string inputLine, MapperContext context)
{
//Extract the namespace declarations in the Csharp files
var reg = new Regex(@"(using)\s[A-za-z0-9_\.]*\;");
var matches = reg.Matches(inputLine);
foreach (Match match in matches)
{
//Just emit the namespaces.
context.EmitKeyValue(match.Value, "1");
}
}
}
//Reducer
public class NamespaceReducer : ReducerCombinerBase
{
//Accepts each key and count the occurrances
public override void Reduce(string key, IEnumerable<string> values, ReducerCombinerContext context)
{
//Write back
context.EmitKeyValue(key, values.Count().ToString());
}
}
//Our Namespace counter job
public class NamespaceCounterJob : HadoopJob<NamespaceMapper, NamespaceReducer>
{
public override HadoopJobConfiguration Configure(ExecutorContext context)
{
var config = new HadoopJobConfiguration();
config.InputPath = "Input/CodeFiles";
config.OutputFolder = "Output/CodeFiles";
return config;
}
}
static void Main(string[] args)
{
var hadoop = Hadoop.Connect();
var result = hadoop.MapReduceJob.ExecuteJob<NamespaceCounterJob>();
}
=============================================== ===============================
错误的作业跟踪器日志显示如下。
感谢您的帮助。
未处理的异常:Microsoft.Hadoop.MapReduce.StreamingException:无法加载用户类型。 DLL = c:\ hadoop \ HDFS \ mapred \ local \ taskTracker \ Administrator \ jobcache \ job_201309041952_0030 \ attempt_201309041952_0030_m_000000_0 \ work \ MRRunner.exe,Type = MRRunner.Program + NamespaceMapper ---&gt; System.IO.FileNotFoundException:无法加载文件或程序集'file:/// c:\ hadoop \ HDFS \ mapred \ local \ taskTracker \ Administrator \ jobcache \ job_201309041952_0030 \ attempt_201309041952_0030_m_000000_0 \ work \ MRRunner.exe'或其依赖项之一。系统找不到指定的文件。
答案 0 :(得分:1)
此错误表示太多的地图任务失败。可能有 n 原因。没有任何日志或跟踪,很难正确地告诉你一些事情,但你可以尝试看到失败的映射器的痕迹。它会让你更好地了解问题。只需将浏览器设为 JobTracker webui(JobTracker_Host:50030)即可。在那里你可以找到所有失败的工作。转到此特定工作并单击它。这将显示所有地图(已完成和失败)。单击失败的映射器,然后在下一页的任务日志列中选择所有选项。你可以在这里找到完整的痕迹。
HTH
答案 1 :(得分:1)
我相信有些观点值得检查: 1.如果程序以admin身份运行; 2.如果存在可执行文件(日志文件中的路径); 3.如果.net框架的版本正在运行; 的 4。如果构建目标是x64而不是x86
为什么不从#4开始?尽管文件存在,但它可能会导致加载dll的异常。