【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
成功

你可能感兴趣的:(CDH,JAVA_HOME,is,not,set,and,could)