我正在编写代码来创建临时Hadoop集群。与大多数Hadoop集群不同,我需要将日志,HDFS文件等位置放在每次启动集群时不同的特定临时网络位置。此网络目录将在运行时生成;我在检查hadoop-env.sh
等shell脚本和core-default.xml
等XML文件时,不知道目录名称。
hadoop-env.sh
等shell脚本和core-default.xml
等XML文件。 我可以通过指定HADOOP_LOG_DIR
和HADOOP_PID_DIR
之类的环境变量来指示大多数Hadoop使用此临时目录,如果需要,我可以修改shell脚本来读取这些环境变量。
但是,HDFS通过XML文件中定义的两个属性确定其本地目录以存储文件系统,而不是环境变量或shell脚本:core-default.xml中的hadoop.tmp.dir
和dfs.datanode.data.dir
中的hadoop.tmp.dir
{3}}。
有没有办法编辑这些XML文件以确定hadoop.tmp.dir
在运行时的值?或者,有没有办法使用环境变量来覆盖XML配置的值为{{1}}?
答案 0 :(得分:2)
我们之前有类似的要求。将dfs.data.dir和dfs.name.dir配置为HADOOP_OPTS的一部分对我们来说效果很好。例如,
export HADOOP_OPTS="-Ddfs.name.dir=$NAMENODE_DATA -Ddfs.data.dir=$DFS_DATA"
此方法也可用于配置其他配置,例如namenode url。