命令行配置hadoop.tmp.dir未生效的技术问询
解决Hadoop命令行配置hadoop.tmp.dir不生效的问题
我之前也踩过这个坑,咱们一步步来搞定它:
1. 先搞对命令行参数的顺序
你之前直接加参数没生效,大概率是参数位置错了!Hadoop的通用选项(比如-D)要放在jar命令之前,而不是jar文件名后面。正确的命令格式应该是:
hadoop -Dhadoop.tmp.dir=/tmp/tmp jar target/mp5-1.0-SNAPSHOT.jar [你的主类名] [程序参数]
这样Hadoop才能解析到这个系统属性,而不是把它当成你的应用程序参数。
2. 环境变量要用对:HADOOP_CLIENT_OPTS而非HADOOP_OPTS
HADOOP_OPTS通常是给Hadoop守护进程(比如namenode、datanode)用的,客户端命令(比如hadoop jar)需要用HADOOP_CLIENT_OPTS来传递JVM参数。所以正确的设置方式是:
export HADOOP_CLIENT_OPTS="-Dhadoop.tmp.dir=/tmp/tmp"
设置完后可以先验证一下环境变量是否生效:
echo $HADOOP_CLIENT_OPTS
确认输出包含-Dhadoop.tmp.dir=/tmp/tmp后,再执行你的hadoop jar命令。
3. 验证配置是否真的生效
可以用这个命令直接查看当前Hadoop使用的hadoop.tmp.dir值:
hadoop org.apache.hadoop.fs.GetConf -confKey hadoop.tmp.dir
如果输出是/tmp/tmp,说明配置成功了;如果还是默认值,那再检查参数顺序或环境变量是否正确。
4. 排查是否被配置文件覆盖
如果上面的方法都不行,检查一下core-site.xml里有没有硬编码的hadoop.tmp.dir配置:
cat $HADOOP_HOME/etc/hadoop/core-site.xml | grep -A2 -B2 hadoop.tmp.dir
不过命令行的-D参数优先级是高于配置文件的,只要参数位置正确,应该能覆盖配置文件的设置。
内容的提问来源于stack exchange,提问作者WestCoastProjects
相关产品推荐
相关产品推荐

