如何通过Hadoop shell脚本指定Hadoop XML配置变量?

时间:2014-03-11 17:55:00

标签: hadoop environment-variables hdfs

我正在编写代码来创建临时Hadoop集群。与大多数Hadoop集群不同,我需要将日志,HDFS文件等位置放在每次启动集群时不同的特定临时网络位置。此网络目录将在运行时生成;我在检查hadoop-env.sh等shell脚本和core-default.xml等XML文件时,不知道目录名称。

  • 签入时间:我可以修改hadoop-env.sh等shell脚本和core-default.xml等XML文件。
  • 运行时:我生成了我想用于数据存储的临时目录。

我可以通过指定HADOOP_LOG_DIRHADOOP_PID_DIR之类的环境变量来指示大多数Hadoop使用此临时目录,如果需要,我可以修改shell脚本来读取这些环境变量。

但是,HDFS通过XML文件中定义的两个属性确定其本地目录以存储文件系统,而不是环境变量或shell脚本:core-default.xml中的hadoop.tmp.dirdfs.datanode.data.dir中的hadoop.tmp.dir {3}}。

有没有办法编辑这些XML文件以确定hadoop.tmp.dir在运行时的值?或者,有没有办法使用环境变量来覆盖XML配置的值为{{1}}?

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。