当我使用 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.Streaming异常:无法加载用户类型。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 ---> System.IO.FileNotFoundException: 无法加载文件或程序集 'file:///c:\hadoop\HDFS\mapred\local\taskTracker\Administrator\jobcache\job_201309041952_0030\attempt_201309041952_0030_m_000000_0\work\MRRunner.exe' 或其依赖项之一。系统找不到指定的文件。
作业跟踪器日志
此错误表明太多地图任务失败。这可能有很多原因。 没有任何日志或跟踪,很难正确地告诉您一些事情,但您可以尝试查看失败映射器的跟踪。它会让你更好地了解问题。只需将您的浏览器固定到JobTracker webui(JobTracker_Host:50030)。在那里,您可以找到所有失败的作业。转到此特定作业并单击它。这将向您显示所有地图(已完成和失败)。单击失败的映射器,然后在下一页的"任务日志"列中选择"全部"选项。您可以在此处找到完整的跟踪。
呵呵
我相信有些要点值得检查:1.如果程序以管理员身份运行;2.如果可执行文件在那里(日志文件中的路径);3.如果.net框架的版本正常工作;4. 如果构建目标是 x64 而不是 x86
为什么不从#4开始?尽管文件存在,但它可能会导致加载 dll 的异常。