有时我的 MR 工作会抱怨找不到 MyMapper 类。我必须给 job.setJarByClass(MyMapper.class); 告诉它从我的 jar 文件中加载它。
cloudera@cloudera-vm:/tmp/translator$ hadoop jar MapReduceJobs.jar 翻译器/输入/Portuguese.txt 翻译器/输出 13/06/13 03:36:57 WARN mapred.JobClient: 没有作业 jar 文件集。可能找不到用户类。请参阅 JobConf(Class) 或 JobConf#setJar(String)。13/06/13 03:36:57 INFO input.FileInputFormat:要处理的总输入路径:1 13/06/13 03:36:57 INFO mapred.JobClient:正在运行的作业:job_201305100422_0043 13/06/13 03:36: 58 信息 mapred.JobClient:映射 0% 减少 0% 13/06/13 03:37:03 信息 mapred.JobClient:任务 ID:尝试_201305100422_0043_m_000000_0,状态:失败 java.lang.RuntimeException:java.lang.ClassNotFoundException:com.mapreduce .variousformats.keyvaluetextinputformat.MyMapper 在 org.apache.hadoop.conf.Configuration.getClass(Configuration.java:996) 在 org.apache.hadoop.mapreduce.JobContext.getMapperClass(JobContext.java:
问题:为什么会发生。为什么它不总是告诉我从我的 jar 文件中加载它。是否有一些解决此类问题的最佳实践。另外,如果我使用一些 3rd 方库,我是否也必须为他们这样做。