hive 0.12 安装配置


基本安装过程参考hive官方的安装指导:

https://cwiki.apache.org/confluence/display/Hive/GettingStarted#GettingStarted-InstallationandConfiguration

 

但有些细节官方指导并没有写,需要注意:

 

1. 生成配置文件 

进入hive下的conf目录,将

hive-env.sh.templatehive-exec-log4j.properties.templatehive-log4j.properties.template重命名,去掉".template"

hive-default.xml.template重命名为hive-site.xml 

hive-env.sh.template文件中存在一个bug,第2000行,<value>auth</auth>,应该改成<value>auth</value>,否则启动时会报错

[Fatal Error] hive-site.xml:2000:16: The element type "value" must be terminated by the matching end-tag "</value>".

14/01/21 16:10:39 FATAL conf.Configuration: error parsing conf file: org.xml.sax.SAXParseException: The element type "value" must be terminated by the matching end-tag "</value>.)

 

2. 修改hive-env.sh文件

配置HADOOP_HOME,将其设为hadoop所在目录,配置HIVE_CONF_DIRhive配置文件所在目录,HIVE_AUX_JARS_PATH配置hive用到的jar包所在的路径主要是在hivehbase集成时会用到

配置完成,就可以到hivebin目录下,执行./hive,如果报错:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hive/conf/HiveConf

 

还需要找到hadoop配置所在路径,修改hadoop-env.sh中的export HADOOP_CLASSPATH项,

export HADOOP_CLASSPATH=$HBASE_HOME/hbase-0.94.9.jar:$HBASE_HOME/hbase-0.94.8-test.jar:${HBASE_HOME}/lib/zookeeper-3.4.5.jar:${HBASE_HOME}/lib/guava-11.0.2.jar

改成

export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HBASE_HOME/hbase-0.94.9.jar:$HBASE_HOME/hbase-0.94.8-test.jar:${HBASE_HOME}/lib/zookeeper-3.4.5.jar:${HBASE_HOME}/lib/guava-11.0.2.jar

再执行bin/hive,就可以看到hive> 

但是,还没完,这时候看一下hive的配置文件/tmp/root/hive.log(hive配置文件的路径在conf/hive-log4j.properties下配置),提示

2014-01-21 12:13:11,556 WARN  common.LogUtils (LogUtils.java:logConfigLocation(142)) - hive-site.xml not found on CLASSPATH

说明hive-site.xml没有被找到,这也需要修改hadoophadoop-env.sh,再将HADOOP_CLASSPATH改为:

export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HBASE_HOME/hbase-0.94.9.jar:$HBASE_HOME/hbase-0.94.8-test.jar:${HBASE_HOME}/lib/zookeeper-3.4.5.jar:${HBASE_HOME}/lib/guava-11.0.2.jar:/opt/apache/hive-0.12.0-bin/conf/:/opt/apache/hive-0.12.0-bin/lib/:$HBASE_HOME/conf

即再加入hive配置文件、jar包所在路径、hbase配置文件所在路径(如果需要整合hbase的话),重新执行bin/hive,日志中就没有hive-site.xml not found on CLASSPATH的提示了。

参考 http://genius-bai.iteye.com/blog/643691

     http://stackoverflow.com/questions/14353394/hive-site-xml-not-found-on-classpath

 

3. 修改hive-site.xml文件

如果使用mysql存储元数据的话,需要修改hive-site.xml文件,主要是针对mysql相关的配置,内容如下:

<property>

  <name>javax.jdo.option.ConnectionURL</name>

  <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</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.option.ConnectionUserName</name>

  <value>hive</value>

  <description>username to use against metastore database</description>

</property>

 

<property>

  <name>javax.jdo.option.ConnectionPassword</name>

  <value>111111</value>

  <description>password to use against metastore database</description>

</property>

 

其中javax.jdo.option.ConnectionUserNamejavax.jdo.option.ConnectionPassword是连接mysql时的用户名、密码。

 

4. mysql配置及遇到的问题

mysql的安装过程不再累述,第一次运行前需要执行

mysql_install_db

之后,运行mysqld_safe &,启动mysqld

再运行

mysql ,进入mysql命令行,执行

mysql> CREATE USER hive IDENTIFIED BY "111111";   创建hive用户,密码为111111

mysql> GRANT ALL PRIVILEGES ON *.* TO hive@localhost IDENTIFIED BY "111111" WITH GRANT OPTION;  hive用过赋予最大权限

 

其中hive111111hive-site.xml配置文件的javax.jdo.option.ConnectionUserNamejavax.jdo.option.ConnectionPassword对应,

在退回到shell的命令行下,执行

mysql -uhive -p111111

后,能够进入到mysql>,就数目hive用户创建成功

参考 http://blog.csdn.net/luyee2010/article/details/8466146

     http://xiaolangit.blog.51cto.com/3343422/1269258

     http://www.eygle.com/digest/2008/01/mysql_create_user.html

     http://www.cnblogs.com/analyzer/articles/1045072.html

 

配置完mysql的用户名密码,还要安装mysql-connector-java

执行yum install mysql-connector-java命令,然后find / -name "mysql-connector-java*",就能找到

/usr/share/java/mysql-connector-java-5.1.17.jar

然后将其拷贝到hivelib目录既可

参考 http://blog.sina.com.cn/s/blog_81e6c30b0101a3jm.html

 

问题1

如果执行

hive> show tables;

出现如下提示

FAILED: Error in metadata: java.lang.RuntimeException: 

Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

八成是以上mysql相关的配置、用户名、密码错误

 

问题2

如果执行

hive> CREATE TABLE pokes (foo INT, bar STRING);

FAILED: Error in metadata: javax.jdo.JDOFatalInternalException: Error creating transactional connection factory

NestedThrowables:

java.lang.reflect.InvocationTargetException

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

主要可能是mysql-connector-java没有装好

 

问题3

如果执行

hive> CREATE TABLE pokes (foo INT, bar STRING);

2014-01-21 12:16:24,357  ERROR ql.Driver (SessionState.java:printError(419)) - 

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org.apache.thrift.EncodingUtils.setBit(BIZ)B


 2014-01-21 12:16:24,357  ERROR ql.Driver (SessionState.java:printError(419)) - FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org.apache.thrift.EncodingUtils.setBit(BIZ)B

执行locate *thrift*.jar后,可以看到如下结果:

/opt/apache/hadoop-1.0.4/lib/libthrift-0.8.0.jar

/opt/apache/hbase-0.94.8/lib/libthrift-0.8.0.jar

hive自带的是

/opt/apache/hive-0.12.0-bin/lib/libthrift-0.9.0.jar

libthrift的版本冲突造成的问题,解决方法就是将hivelibthrift覆盖hadoophbase下相应libthrift,再启动hive,建表,问题消失


问题4

如果执行

hive>show databases;

报错:

ERROR ql.Driver: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient

日志中出现如下内容:

14/06/29 10:40:20 ERROR exec.DDLTask: org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient
        at org.apache.hadoop.hive.ql.metadata.Hive.getAllDatabases(Hive.java:1074)
        at org.apache.hadoop.hive.ql.exec.DDLTask.showDatabases(DDLTask.java:2198)
        at org.apache.hadoop.hive.ql.exec.DDLTask.execute(DDLTask.java:328)
        at org.apache.hadoop.hive.ql.exec.Task.executeTask(Task.java:151)
        at org.apache.hadoop.hive.ql.exec.TaskRunner.runSequential(TaskRunner.java:65)
        at org.apache.hadoop.hive.ql.Driver.launchTask(Driver.java:1414)
        at org.apache.hadoop.hive.ql.Driver.execute(Driver.java:1192)
        at org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1020)
        at org.apache.hadoop.hive.ql.Driver.run(Driver.java:888)
        at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:259)
        at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:216)
        at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:413)
        at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:781)
        at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:675)
        at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:614)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:601)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:160)
Caused by: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient
        at org.apache.hadoop.hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.java:1212)
        at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.<init>(RetryingMetaStoreClient.java:62)
        at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.java:72)
        at org.apache.hadoop.hive.ql.metadata.Hive.createMetaStoreClient(Hive.java:2372)
        at org.apache.hadoop.hive.ql.metadata.Hive.getMSC(Hive.java:2383)
        at org.apache.hadoop.hive.ql.metadata.Hive.getAllDatabases(Hive.java:1072)
        ... 19 more
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
        at org.apache.hadoop.hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.java:1210)
        ... 24 more
Caused by: MetaException(message:Version information not found in metastore. )
        at org.apache.hadoop.hive.metastore.ObjectStore.checkSchema(ObjectStore.java:5638)
        at org.apache.hadoop.hive.metastore.ObjectStore.verifySchema(ObjectStore.java:5622)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:601)
        at org.apache.hadoop.hive.metastore.RetryingRawStore.invoke(RetryingRawStore.java:124)
        at $Proxy10.verifySchema(Unknown Source)
        at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.getMS(HiveMetaStore.java:403)
        at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.createDefaultDB(HiveMetaStore.java:441)
        at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.init(HiveMetaStore.java:326)
        at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.<init>(HiveMetaStore.java:286)
        at org.apache.hadoop.hive.metastore.RetryingHMSHandler.<init>(RetryingHMSHandler.java:54)
        at org.apache.hadoop.hive.metastore.RetryingHMSHandler.getProxy(RetryingHMSHandler.java:59)
        at org.apache.hadoop.hive.metastore.HiveMetaStore.newHMSHandler(HiveMetaStore.java:4060)
        at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.<init>(HiveMetaStoreClient.java:121)
        ... 29 more


则修改hive-site.xml文件中的hive.metastore.schema.verification,将其置为false,重启后,问题消失

参考https://cwiki.apache.org/confluence/display/Hive/Hive+Schema+Tool

 

查找问题的时候,可以执行 ./hive -hiveconf hive.root.logger=DEBUG,console ,能够看到详细的调试信息,方便定位问题。比如当用户名密码配置有问题是,执行show databases;就会打印错误信息,其中就会带有“java.sql.SQLException: Access denied for user 'hive'@'localhost' (using password: YES)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值