java—如何以编程方式设置hadoop*的目录—site.xml

hzbexzde  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(321)

我的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();
gk7wooem

gk7wooem1#

hadoop应用程序在类路径中查找这些文件。如果你跑了 hadoop classpath 您应该能够看到列表上的配置目录。
所以,要修改位置,只需在应用程序运行之前修改类路径。最简单的方法是定义环境变量 HADOOP_CONF_DIR 在像这样启动应用程序之前:

export HADOOP_CONF_DIR=/your/path/to/xmls
hadoop jar ...

相关问题