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

Ale*_*exC 6 hadoop environment-variables hdfs

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

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

我可以指示大部分的Hadoop通过指定环境变量喜欢用这个临时目录HADOOP_LOG_DIRHADOOP_PID_DIR,如有必要,我可以修改shell脚本来读取这些环境变量.

然而,HDFS决定了它的本地目录通过在XML文件中,没有环境变量或shell脚本中定义的两个属性来存储文件系统:hadoop.tmp.dir核心default.xml中dfs.datanode.data.dirHDFS-default.xml中.

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

小智 5

我们之前也有类似的要求。将 dfs.data.dir 和 dfs.name.dir 配置为 HADOOP_OPTS 的一部分对我们来说效果很好。例如

export HADOOP_OPTS="-Ddfs.name.dir=$NAMENODE_DATA -Ddfs.data.dir=$DFS_DATA"
Run Code Online (Sandbox Code Playgroud)

此方法也可用于配置其他配置,例如 namenode url。

  • 给未来访问者的一些注意事项: * Hadoop 1.x 中的属性名称是“dfs.name.dir”等,但在 Hadoop 2.x 中是“dfs.namenode.name.dir”等。 * 如果您指定“ -Ddfs.namenode.name.dir=”,需要给出以“file://”为前缀的路径。* 对我来说,只需指定“-Dhadoop.tmp.dir=”就更简单了。* 这需要在工作节点上定义,因此可以在 hadoop-env.sh 或类似脚本中定义,或者在转发给工作节点的环境变量中定义。 (2认同)