java - 在 hadoop 中运行多个 MapReduce 作业

标签 java hadoop mapreduce

我想运行一系列 map reduce 作业,所以最简单的解决方案似乎是 jobcontroller。假设我有两份工作,job1 和 job2。我想在 job1 之后运行 job2。好吧,它遇到了一些问题。经过数小时的调试,我将代码缩小为以下几行:

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 行,它仍然提示这条路径不存在。

最佳答案

Wowww,调试了两天,原来是hadoop内部目录命名规则的问题。表面上看,对于输入或输出的map-reduce目录,不能选择下划线“_”开头的名称。那个笨蛋! 警告和错误根本没有帮助。

关于java - 在 hadoop 中运行多个 MapReduce 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4368965/

相关文章:

java - LWJGL 相机绕点旋转?

java - 构造函数调用子类

scala - 通过键Spark写入多个输出-一个Spark作业

json - 如何为复杂的 json 文档定义 avro 模式?

hadoop - 在Scala Play框架中找不到Hadoop MR映射器类

java - jboss 如何启用 MyBatis SQL 日志?

java - 在 jdbc 调用中一次减少提交和插入批量记录?

java - 如何在配置单元中获取给定时区的当前时间

hadoop - 在hadoop mapreduce作业中使用多个本地文件夹作为源

python - 访问来自MRjob的hdfs的流输出