在设置 hadoop 时,我发现 hadoop-config.sh 脚本存在于两个目录中,bin/ 和 libexec/。这两个文件是相同的。在查看脚本时,我发现如果 hadoop-config.sh 存在于 libexec 中,则会执行它。如果没有,则调用 bin/ 下的脚本。将同一个文件保存在两个目录中的目的是什么?
答案1
感谢您指出这一点。我在我的系统中尝试过
[root@prashant bin]# hadoop version
Hadoop 1.2.1
你完全正确
20:39:57.038706 打开(“/usr/local/hadoop/libexec/../conf/hadoop-env.sh”,O_RDONLY)= 3 <0.000253>
当我移动此文件时,它指的是 /bin 内的文件
20:42:51.024234 打开(“/usr/local/hadoop/bin/../conf/hadoop-env.sh”,O_RDONLY)= 3 <0.000332>
然后我配置了最新版本的hadoop
[root@hadoop libexec]# hadoop version
Hadoop 2.4.1
[root@hadoop libexec]# pwd
/usr/local/hadoop/libexec
[root@hadoop libexec]# ls -l hadoop-config.sh
-rwxr-xr-x 1 67974 users 9793 Jun 21 11:35 hadoop-config.sh
[root@hadoop bin]# pwd
/usr/local/hadoop/bin
[root@hadoop bin]# ls -l hadoop-config.sh
ls: cannot access hadoop-config.sh: No such file or directory
到目前为止,我看到最新版本中的大部分脚本都从 bin 中移出了,但我仍然无法回答你的问题
答案2
历史偶然?开发人员构建东西只是为了让它们工作?过去并没有付出大量努力来确保用于启动所有 Java 程序的操作 shell 脚本经过深思熟虑并以功能性的方式设计。
Allen Wittenauer 一直致力于巩固和修复这些问题HADOOP-9902。您可能希望查看该 JIRA 问题。
如果您使用的是 Apache 发行版,您可能会看到“很快”就会出现这些变化。如果您使用的是商业发行版之一,我预计他们会在很晚的时候获得这些变化;至少,他们可能会等到 Allen 的工作完全完成。