我的java应用程序应该在运行时为hadoopxmls定义文件夹(为了简单起见,让它取自程序命令行参数)。我想,我可以使用以下代码:
import org.apache.hadoop.conf.Configuration()
....
Configuration = new Configuration
config.addResource(new Path(String.format("%s/core-site.xml", hadoopLocation)));
config.addResource(new Path(String.format("%s/hdfs-site.xml", hadoopLocation)));
config.addResource(new Path(String.format("%s/tez-site.xml", hadoopLocation)));
config.addResource(new Path(String.format("%s/yarn-site.xml", hadoopLocation)));
config.addResource(new Path(String.format("%s/mapred-site.xml", hadoopLocation)));
config.set("fs.hdfs.impl", org.apache.hadoop.hdfs.DistributedFileSystem.class.getName() );
config.set("fs.file.impl", org.apache.hadoop.fs.LocalFileSystem.class.getName() );
try {
FileSystem dfs = FileSystem.get(config);
} catch (IOException e) {
LOGGER.error("Failed to process hadoop file system");
}
不过,每次打电话我都要重复一遍 new Configuration()
在我的程序或使用一些持久的预配置 baseConfiguration
对象并像这样使用它 new Configuration(baseConfiguration)
. 所有这些方法看起来都很笨拙。有没有更优雅的解决方案。也许我可以执行一次静态方法调用。以下代码仅供说明:
Configuration.setBaseXmlsDir();
1条答案
按热度按时间gk7wooem1#
hadoop应用程序在类路径中查找这些文件。如果你跑了
hadoop classpath
您应该能够看到列表上的配置目录。所以,要修改位置,只需在应用程序运行之前修改类路径。最简单的方法是定义环境变量
HADOOP_CONF_DIR
在像这样启动应用程序之前: