我正在尝试使用弹簧靴编写纱线应用程序。只是为了说清楚我没有使用弹簧纱功能。相反,我使用普通的弹簧靴来处理纱线。出于某种原因,当我在spring引导应用程序中加载new YarnConfiguration()
对象时,它只加载core-site.xml和yarn-site.xml而不是mapred,hdfs和所有default-xml等价物。如果我不使用spring boot,则会加载所有xml文件。未加载xml文件的问题是应用程序无法连接到资源管理器。我假设这是由Spring引导引起的类路径中的一些变化引起的,但我不确定如何解决它们。
这是我的配置
@Configuration
@EnableConfigurationProperties
@EnableAutoConfiguration
@ComponentScan
public class Application implements CommandLineRunner {
@Bean
public org.apache.hadoop.conf.Configuration conf() throws IOException {
YarnConfiguration conf = new YarnConfiguration();
log.info("conf " + conf.toString());
log.info("fs " + FileSystem.get(conf));
return new YarnConfiguration();
}
日志输出显示配置中只加载了2个xml文件,因此下一行加载的fs是LocalFileSystem而不是HDFS。
任何想法......
答案 0 :(得分:0)
这里有几个可能的问题:
关于本地文件系统而不是hdfs :YarnConfiguration应该加载core-site.xml,你的core-site.xml应该有类似的东西:
<property>
<name>fs.defaultFS</name>
<value>hdfs://NAMENODE:8020</value>
</property>
此外,这个core-site.xml应该在你的应用程序的类路径中,请注意hadoop jar也有一个默认/空的core-site.xml,所以你必须确保你的具有优先权。
关于Yarn和mapreduce :Yarn是一个通用的资源管理和调度框架,mapreduce只是可以在yarn上运行的应用程序类型之一。 这就是为什么YarnConfiguration不会加载mapreduce - * .xml的原因,但是当你尝试提交mapreduce作业时,这些文件将由mapreduce代码加载:
Configuration configuration = new YarnConfiguration()
Job job = Job.newInstance(configuration)
job.getConfiguration(); // this configuration should have mapred-*.xml files loaded
job.submit();