Hadoop Mapreduce MultipleInputs не может загрузить классы сопоставления

Я использую новый API MapReduce в нашем кластере Yarn. Мне нужно прочитать файлы двух разных форматов из двух разных каталогов. Для этого я решил использовать MultipleInputs, чтобы указать два класса преобразователя. Ниже мой водитель работы

Job job = new Job(new Configuration(), "Daily Report");

job.setJarByClass(MyDailyJob.class);

MultipleInputs.addInputPath(job, new Path(args[0]), TextInputFormat.class, Record1ParsingMapper.class);
MultipleInputs.addInputPath(job, new Path(args[1]), TextInputFormat.class, Record2ParsingMapper.class);


FileOutputFormat.setOutputPath(job, new Path(args[2]));

job.setReducerClass(ReportParsingReducer.class);
job.setNumReduceTasks(10);

job.setOutputKeyClass(Text.class);
job.setOutputValueClass(NullWritable.class);

return (job.waitForCompletion(true) ? 0 : 1); 

И у My Mappers есть следующее определение: открытый класс Record1ParsingMapper расширяет Mapper

Когда я запускаю это задание, я получаю следующее исключение:

Exception in thread "main" java.lang.NoClassDefFoundError: org/json/simple/parser/ParseException
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:270)
    at org.apache.hadoop.conf.Configuration.getClassByNameOrNull(Configuration.java:1986)
    at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:1951)
    at org.apache.hadoop.mapreduce.lib.input.MultipleInputs.getMapperTypeMap(MultipleInputs.java:141)
    at org.apache.hadoop.mapreduce.lib.input.DelegatingInputFormat.getSplits(DelegatingInputFormat.java:60)
    at org.apache.hadoop.mapreduce.JobSubmitter.writeNewSplits(JobSubmitter.java:498)
    at org.apache.hadoop.mapreduce.JobSubmitter.writeSplits(JobSubmitter.java:515)
    at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:399)
    at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1295)
    at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1292)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1614)
    at org.apache.hadoop.mapreduce.Job.submit(Job.java:1292)
    at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1313)
    at main.java.com.adnear.mr.jobs.MyDailyJob.run(MyDailyJob.java:70)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84)
    at main.java.com.adnear.mr.jobs.MyDailyJob.main(MyDailyJob.java:226)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:212)

Caused by: java.lang.ClassNotFoundException: org.json.simple.parser.ParseException\

Похоже, что внутри метода getClassByName() в классе Configuration в следующем операторе происходит сбой. clazz = Class.forName(name, true, classLoader);

Я правильно указываю путь к своим классам Mapper. Может кто-нибудь объяснить мне, что вызывает это исключение загрузки класса?

Спасибо, Дев


person djpatra    schedule 29.11.2014    source источник
comment
Может быть, ваш Record1ParsingMapper является внутренним классом?   -  person Aleksei Shestakov    schedule 29.11.2014
comment
Не могли бы вы закрыть вопрос, если найдете ответ? Пожалуйста, опубликуйте свое решение, если вопрос решен.   -  person ggorantl    schedule 19.05.2017


Ответы (1)


Caused by: java.lang.ClassNotFoundException: org.json.simple.parser.ParseException

В сообщении об ошибке четко указано, что какой-то класс отсутствует в пути к классам. Этот класс является частью файла jar json-simple-1.1.1.jar, необходимого во время выполнения для выполнения Job. Поэтому добавьте этот файл jar в путь к классам для успешного выполнения задания. Вы можете получить файл jar из ЗДЕСЬ.
Надеюсь, это поможет!

person Mr.Chowdary    schedule 01.12.2014