【CDH】Error: JAVA_HOME is not set and could not be found.

錯誤一:

hdfs dfs -mkdir -p /flume/mysql
Permission denied: user=root, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x

這些類似的權限問題都屬於同類問題,他是我說我們的執行Hadoop命令的用戶沒有,執行權限。
剛開始我想解決問題的思路是,將當前用戶授權。(這種想法是不正確的,不要爲了簡化輸入命令,就試圖修改這些東西)
現在的想法:用的他指定的用戶去執行

[root@cdh1 data]#sudo -u hdfs  hadoop fs -mkdir /newFile
或者[root@cdh1 data]#sudo -u hdfs  dfhs dfs  -mkdir /newFile
更簡單的是,先進入這個用戶,su hdfs

錯誤二:

sudo -u hdfs hdfs dfs -mkdir -p /flume/mysql  
Error: JAVA_HOME is not set and could not be found.

java -version
java version "1.8.0_91"

export
declare -x CLASSPATH=".:/*/*/jdk1.8.0_91/lib/dt.jar:/*/*/jdk1.8.0_91/lib/tools.jar"
declare -x JAVA_HOME="/*/*/jdk1.8.0_91"

其實是Bigtop 的原因: 由於CDH不會使用系統默認JAVA_HOME環境變量,而是使用Bigtop進行管理,故我們需要安裝Bigtop的規則在指定的位置安裝jdk。
這裏, 很明顯可以看到, JAVA_HOME 並沒有設置成功。可是呢? 我確實是設置了JAVA_HOME 的,而且在linux shell 執行 echo $JAVA_HOME  也是有輸出的。 百思不得其解。

配置在這裏:
find / -name cloudera-config.sh
/*/*/*/cloudera-manager/cm-5.10.0/lib64/cmf/service/common/cloudera-config.sh
  local JAVA8_HOME_CANDIDATES=(
    '/usr/java/jdk1.8'
    '/usr/java/jre1.8'
    '/usr/lib/jvm/j2sdk1.8-oracle'
    '/usr/lib/jvm/j2sdk1.8-oracle/jre'
    '/usr/lib/jvm/java-8-oracle'
  )

於是,建立一個已經有的JAVA_HOME  鏈接到 /usr/java/jdk1.8 就好了!
目標位置:/usr/java/jdk1.8
原文件:/*/*/jdk1.8.0_91
ln -s 源文件 目標文件
ln -s /*/*/jdk1.8.0_91 /usr/java/jdk1.8

sudo -u hdfs hdfs dfs -mkdir -p /flume/mysql
成功

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章