如何解决从Java
我是Hadoop的新手,我在理解mapreduce-client和yarn-client方面遇到困难。
我编写了一个mapreduce程序,其中运行int result = ToolRunner.run(new GrepTool(),args);
之类的工具,并在Tool类中创建一个新的Job实例;
Job job = Job.getInstance(conf,jobName);
job.setNumReduceTasks(0);
job.setJarByClass(GrepTool.class);
job.setMapperClass(GrepMapper.class);
job.setInputFormatClass(InputFormat.class);
job.setOutputFormatClass(OutputFormat.class);
FileInputFormat.setInputDirRecursive(job,isRecursive);
FileInputFormat.addInputPaths(job,inputFiles);
FileOutputFormat.setOutputPath(job,new Path(outputDirectory));
当我从命令行运行JAR但我想从另一个Java程序中启动此mapreduce JAR并将参数传递给它时,此方法工作正常,所以我编写了一个包括以下命令的yarn-client
ContainerLaunchContext amContainer = Records.newRecord(ContainerLaunchContext.class);
amContainer.setCommands(
Collections.singletonList(
"hadoop jar mapred-distributed-grep-1.0-SNAPSHOT.jar" +
" " + query +
" " + inputFiles +
" " + outputDirectory +
" '" + jobName + "'" +
" " + dataType +
" " + isRecursive +
" 1>" + ApplicationConstants.LOG_DIR_EXPANSION_VAR + "/stdout" +
" 2>" + ApplicationConstants.LOG_DIR_EXPANSION_VAR + "/stderr"
));
这也有效,但是当我运行YARN客户端时,我在namenode-> Applications窗口中看到两行。一种用于YARN,另一种用于MAPREDUCE,这令人困惑。 MAPREDUCE应用程序以SUCCESS运行,但是YARN应用程序因FileAlreadyExist
异常而失败。据我了解,mapreduce-client(JOB实例)来自hadoop1,yarn-client来自hadoop2。我的问题是;
- 我可以初始化JOB实例而不是yarn-client并直接运行它,而无需第二个mapreduce JAR,但是如果我使用mapreduce-client(JOB),则不会初始化应用程序主控,并且mapreduce程序将在hadoop1环境中运行。这是正确的吗?
- 我找不到直接用yarn-client运行mapreduce程序的方法,因此应用程序窗口中只有一行。这可能吗?
- mapreduce-client和yarn-client的正确用法是什么
- 我的方法正确吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。