問題起因
在玩Ubuntu時一不小心把檔案夾Hadoop-2.9.1給删除了一部分,我需要重新下載下傳和配置Hadoop-2.9.1,重新下載下傳後的Hadoop-2.9.1解壓到了~/hadoop/hadoop目錄下,與之前的Hadoop-2.9.1放在同一個父目錄下,如下:
然後在$HOME/.bashrc中配置HADOOP的環境變量,如下
最後執行如下指令
source ~/.bashr
start-dfs.sh
發現調用的還是Hadoop-2.9.1/sbin下的start-dfs.sh指令,與預期結果不符(預期結果是調用到hadoop/hadoop/sbin下的start-dfs.sh)
問題原因和解決方法
出現問題時我通過echo $HADOOP_HOME發現在.bashrc配置的環境變量已經生效了,再輸出PATH環境變量的值如下:
發現PATH環境變量中即有Hadoop-2.9.1也有Hadoop,就其原因是因為在使用者登入時已經執行了一遍$HOME/.bashrc,此時會将之前的Hadoop-2.9.1的環境變量也加載到PATH中,新配置Hadoop和.bashrc後,再重新加載.bashrc,由于PATH環境變量中已經包含了Hadoop-2.9.1的環境變量,導緻重新加載後的PATH也包含Hadoop-2.9.1。在我的配置方法下,由于Hadoop-2.9.1的環境變量在Hadoop的前面,按照Linux搜尋指令的模式,當然先搜尋到Hadoop-2.9.1下的start-dfs.sh指令。重新登入之是以可以是因為重新登入時PATH環境變量中沒有Hadoop-2.9.1的環境變量。
知道問題原因後,就好解決問題了,如下:
總結
像這類問題并不複雜,隻要耐心分析,了解Linux搜尋指令的方式,通過各種指令輸出資訊,可以很容易解決。