hive中,已经配置了hive-site.xml,但执行hive,启动的仍是embeded模式;配置如下:


    javax.jdo.option.ConnectionURL
    jdbc:mysql://fxx-4:3306/hive?characterEncoding=UTF-8
    JDBC connect string for a JDBC metastore



    javax.jdo.option.ConnectionDriverName
    com.mysql.jdbc.Driver
    Driver class name for a JDBC metastore


    javax.jdo.ConnectionUserName
    root


    javax.jdo.option.ConnectionPassword
    123


    hive.metastore.warehouse.dir
    /user/hive/warehousce


 
已邀请:

wangxiaolei

赞同来自: fish 小心巴

在文件/root/software/hadoop/hadoop-2.6.0-cdh5.4.0/etc/hadoop/hadoop-env.sh中,有两处错误的地方:[code=Bash]export HADOOP_CLASSPATH=$HADOOP_HOME/share/hadoop/common/hadoop-lzo-0.4.15-cdh5.4.8.jar
export HADOOP_CLASSPATH=/root/software/hive/hive-1.1.0-cdh5.4.0/lib/*[/code]

这样写会直接覆盖掉HADOOP_CLASSPATH的值
hive命令最终会调用hadoop-evn.sh,当执行到这个文件时,会把原来已经配置好HADOOP_CLASSPATH的值重新赋值,这样刚好少了/root/software/hive/hive-1.1.0-cdh5.4.0/conf的配置,那就更不会加载hive-site.xml文件。这样会导致只要启动hive就生成一个metastore_db目录。


正确的写法,只写(export HADOOP_CLASSPATH=/root/software/hive/hive-1.1.0-cdh5.4.0/lib/* 去掉):[code=Bash]export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_HOME/share/hadoop/common/hadoop-lzo-0.4.15-cdh5.4.8.jar[/code]
说明:这种写法是 $HADOOP_CLASSPATH: 增量添加HADOOP_CLASSPATH的值
与hive相关的配置在hive的配置是在hive-evn.sh中配置

 

wangxiaolei

赞同来自: 小心巴

发现你在文件 /root/.bashrc 中加入hadoop的CLASSPATH配置,导致用户只要已登录云主机,变量就会附上值。
就是/root/.bashrc中写的固定值/root/software/hadoop/hadoop-2.6.0-cdh5.4.0

此时再去修改/etc/profile 中hadoop的CLASSPATH,还有hive的CLASSPATH。
然后再用hive命令启动,结合hive命令脚本源码,输出一些log,能发现hive在启动的时候加载的
hadoop的相关文件是在/root/software/hadoop/hadoop-2.6.0-cdh5.4.0目录下,
hive的相关文件是在/root/software/hive/hive-1.1.0-cdh5.4.0目录下。

而不是用yum install hive 下载的,正确的应该是加载/usr/lib/hive/下的相关文件。
就会出现你说修改完/usr/lib/hive/下的相关文件后,仍是embeded模式。
不管你怎么修改/usr/lib/hive/conf/hive-site.xml,都不起作用。

注意:不要在文件 /root/.bashrc 中加入hadoop的CLASSPATH,
需要把窗口关掉,重新连接云主机,才能解决,比较麻烦。
若需要添加环境变量,建议修改/etc/profile 引入相关变量就足够了。

配置文件属性错误:只需要配置hive-site.xml,把下面属性修改下
javax.jdo.ConnectionUserName 换成 javax.jdo.option.ConnectionUserName

最后,启动hive就可以正常连接了。

fish - Hadooper

赞同来自: wangxiaolei

查看一下/usr/lib/hive/bin/hive,其中调用“which hadoop”,给HADOOP_IN_PATH赋值,HADOOP_IN_PATH进而会影响HADOOP_DIR,HADOOP_DIR进而又影响HADOOP_HOME。

这些都在/usr/lib/hive/bin/hive这个脚本中定义。你可以翻看下,并通过打印echo来帮助了解其原理。

/root/.bashrc中如果定义了错误的HADOOP_CLASSPATH会有影响。不仅如此,如果定义了错误的PATH,比如:
export PATH=:$PATH。当执行which hadoop的时候,得到一个错误的hadoop地址,也同样会影响HADOOP_HOME的指定。

fish - Hadooper

赞同来自: wangxiaolei

问题的查找,可以通过在/usr/lib/hive/bin/hive(执行什么脚本,就在什么脚本)中加log,辅助判断在调用过程中,什么变量被设置错误,多试几次多打些log,逐步逼近根本原因。
hive-site.xml中这些配置是没有问题的,文件中配置的其他节点都删掉。
确定修改hive-site.xml,就是将要启动hive的配置文件。
若不是这些,可私信发下机器Ip,密码
 
你把fish提到的几个变量echo打印出来看看是那个路径。

先记着这些变量的值对应的路径是正确的,就可以推理出来加载的hive-site.xml文件就是当前对应的hive,怎么读取hive-site.xml先不要管。

比如使用echo输出:
cd到hive安装目录的bin目录下输入命令vim hive
打开hive文件,看到如下几行shell脚本内容[code=Bash]bin=`dirname "$0"`
bin=`cd "$bin"; pwd`
echo "bin="$bin #加入输出log,就知道加载是那个hive
. "$bin"/hive-config.sh[/code]启动hive看看echo输出的值是什么。
下面一行是执行hive-config.sh
hive-site.xml是在hive安装目录下的conf/下面的文件
同样vim hive-config.sh很容易发现HIVE_CONF_DIR量的值
修改hive-config.sh采用同样的办法
echo "conf_dir="$HIVE_CONF_DIR
只要路径是对的,系统就可以正确加载conf/下面的hive-site.xml
 

要回复问题请先登录注册