запуск нескольких заданий MapReduce в hadoop - PullRequest
5 голосов
/ 06 декабря 2010

Я хочу запустить цепочку сокращений заданий, поэтому простейшим решением, похоже, является jobcontroller. скажем, у меня есть две работы, job1 и job2. и я хочу запустить job2 после job1. Ну, это столкнулось с некоторыми проблемами. после нескольких часов отладки я сузил код до следующих строк:

JobConf jobConf1 = new JobConf();  
JobConf jobConf2 = new JobConf();  
System.out.println("*** Point 1");
Job job1 = new Job(jobConf1);  
System.out.println("*** Point 2");
Job job2 = new Job(jobConf2);
System.out.println("*** Point 3");

Я продолжаю получать этот вывод при запуске кода:

*** Point 1    
10/12/06 17:19:30 INFO jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker, sessionId=
*** Point 2    
10/12/06 17:19:30 INFO jvm.JvmMetrics: Cannot initialize JVM Metrics with processName=JobTracker, sessionId= - already initialized
*** Point 3

Я предполагаю, что моя проблема как-то связана со строкой «не могу инициализировать JMV ....». Что это такое? И как я могу создать более одной работы, чтобы передать ее в JobController.

Когда я добавил job1.waitForTheCompletion (true) перед инициализацией второго задания, он выдал мне следующую ошибку:

    10/12/07 11:28:21 INFO jvm.JvmMetrics: Cannot initialize JVM Metrics with processName=JobTracker, sessionId= - already initialized
Exception in thread "main" org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: file:/home/workspace/WikipediaSearch/__TEMP1
        at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.listStatus(FileInputFormat.java:224)
        at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.getSplits(FileInputFormat.java:241)
        at org.apache.hadoop.mapred.JobClient.writeNewSplits(JobClient.java:885)
        at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:779)
        at org.apache.hadoop.mapreduce.Job.submit(Job.java:432)
        at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:447)
        at ch.ethz.nis.query.HadoopQuery.run(HadoopQuery.java:353)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:79)
        at ch.ethz.nis.query.HadoopQuery.main(HadoopQuery.java:308)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:156)

__ Temp1 - это выходная папка первого задания, которую я хочу использовать для ввода второго. И хотя в моем коде есть строка waitForCompletion, она все еще жалуется, что этот путь не существует.

Ответы [ 2 ]

5 голосов
/ 07 декабря 2010

Wowww, после двух дней отладки выясняется, что проблема в правиле имен внутренних каталогов hadoop.Похоже, для входных или выходных каталогов map-Reduce нельзя выбирать имена, начинающиеся с подчеркивания «_».Это глупо!И предупреждения и ошибки не помогли вообще.

0 голосов
/ 06 декабря 2010

Возможно ли, что вы не можете создать работу, пока другая еще не закончена?Я использую hadoop 0.20.2 (обратите внимание, что JobConf устарела. Hadoop утверждает, что поддерживает обратную совместимость, но по моему опыту это не так), и я сделал в основном то же самое и никогда не сталкивался с такой проблемой.У вас все еще есть проблема, если вы добавляете job1.waitForCompletion (true) перед созданием job2?

...