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

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

<property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>Driver class name for a JDBC metastore</description>
</property>
<property>
    <name>javax.jdo.ConnectionUserName</name>
    <value>root</value>
</property>
<property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>123</value>
</property>
<property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehousce</value>
</property>

 

wangxiaolei

赞同来自: fish 小心巴

在文件/root/software/hadoop/hadoop-2.6.0-cdh5.4.0/etc/hadoop/hadoop-env.sh中,有两处错误的地方:
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/*
这样写会直接覆盖掉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/* 去掉):
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_HOME/share/hadoop/common/hadoop-lzo-0.4.15-cdh5.4.8.jar
说明:这种写法是 $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=<wrong_hadoop_path>:$PATH。当执行which hadoop的时候,得到一个错误的hadoop地址,也同样会影响HADOOP_HOME的指定。

fish - Hadooper

赞同来自: wangxiaolei

问题的查找,可以通过在/usr/lib/hive/bin/hive(执行什么脚本,就在什么脚本)中加log,辅助判断在调用过程中,什么变量被设置错误,多试几次多打些log,逐步逼近根本原因。

wangxiaolei

赞同来自:

hive-site.xml中这些配置是没有问题的,文件中配置的其他节点都删掉。 确定修改hive-site.xml,就是将要启动hive的配置文件。 若不是这些,可私信发下机器Ip,密码  

wangxiaolei

赞同来自:

你把fish提到的几个变量echo打印出来看看是那个路径。 先记着这些变量的值对应的路径是正确的,就可以推理出来加载的hive-site.xml文件就是当前对应的hive,怎么读取hive-site.xml先不要管。 比如使用echo输出: cd到hive安装目录的bin目录下输入命令vim hive 打开hive文件,看到如下几行shell脚本内容
bin=`dirname "$0"`
bin=`cd "$bin"; pwd`
echo "bin="$bin #加入输出log,就知道加载是那个hive
. "$bin"/hive-config.sh
启动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  

要回复问题请先登录注册