2015-04-18 52 views
0

我正在尝试使用弹簧引导来编写纱线应用。只是为了说清楚我没有使用弹簧纱功能。相反,我使用普通弹簧靴材料来处理纱线。出于某种原因,当我在弹簧引导应用程序中加载new YarnConfiguration()对象时,它只加载core-site.xml和yarn-site.xml,而不是mapred,hdfs和所有默认的xml等价物。如果我不使用spring boot,那么所有的xml文件都会被加载。不加载xml文件的问题是,那么应用程序无法连接到资源管理器。我假设这是由弹簧引导引起的类路径中的一些变化引起的,但我不确定如何解决它们。弹簧引导应用中的纱线配置

这里是我的配置

@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

有一对夫妇在这里可能出现的问题:

对于本地文件系统,而不是HDFS:YarnConfiguration应该加载核心-site.xml中,你的核心站点。 XML应该是这样:

<property> 
    <name>fs.defaultFS</name> 
    <value>hdfs://NAMENODE:8020</value> 
    </property> 

除了这个核心-site.xml中应该在你的应用程序的classpath,请注意,Hadoop的罐子也有一个缺省的/空芯site.xml的,所以你必须至 确保你的优先。

关于纱线和mapreduce:纱线是一个通用的资源管理和调度框架,mapreduce只是可以在纱线上运行的应用程序类型之一。 这就是为什么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(); 
+0

感谢您的答复。我理解纱线和MR之间的区别,在这方面,我基本上期待hdfs-site.xml文件与YarnConfiguration一起加载。由于hdfs-site.xml没有加载,我认为这是导致使用本地文件系统而不是hdfs。我将检查core-site.xml是否包含defaultFS属性 – adeelmahmood

+0

正确,FS在core-site.xml中定义,并且应该由YarnConfiguration加载 –