Hadoo系列之Hive安装和使用

Posted 梦Dreamer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoo系列之Hive安装和使用相关的知识,希望对你有一定的参考价值。

hive下载地址:http://www.apache.org/dyn/closer.cgi/hive/

 

hive的安装

tar -zxvf apache-hive-3.1.2-bin.tar.gz #解压

mv hive #修改文件名

chown -R hadoop:hadoop hive #修改文件权限

mkdir -p hive/warehouse #创建元数据存储文件夹

chmod a+rwx -hive/warehouse #修改文件权限

 

配置hive环境变量

export HIVE_HOME=/usr/local/soft/hive

export PATH=$PATH:$HIVE_HOME/bin

 

启动hive,要在hadoop用户下执行启动命令:hive

 

使用Derby数据库的方式

配置hive-site.xml,若无此文件,可以新建一个,此处配置的是本地模式的hive

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

<property>

<name>hive.metastore.warehouse.dir</name>

<value>/usr/local/soft/hive/warehouse</value>

<description>location of default database for the warehouse</description>

</property>

<property>

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

<value>jdbc:derby:;databaseName=/usr/local/soft/hive/metastore_db;create=true</value>

<description>JDBC connect string for a JDBC metastore</description>

</property>

</configuration>

 

使用mysql数据库的方式

安装mysql参考:https://blog.csdn.net/shiqijiamengjie/article/details/52192398

mysql -uroot -p #登录mysql数据库

insert into mysql.user (Host,User,Password) values ("localhost","hive",password (" hive")); 2创建hive用户

若上面的创建hive用户语句出现错误,请参考问题3,改用下面的语句创建hive用户

create user 'hive'@'%' identified by 'hive';   //第一个hive是用户名,'%'表示所有ip都可访问,第二个hive是密码

create database hive; # 创建hive数据库

grant all on hive.* to hive@'%' identified by 'hive'; #赋予权限

grant all on hive.* to hive@'localhost' identified by 'hive';

flush privileges; #刷新

exit #退出mysql

mysql -u hive -p hive #验证hive用户

 show databases;

 

配置hive-site.xml文件

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

<property>

<name>hive.metastore.warehouse.dir</name>

<value>/usr/local/soft/hive/warehouse</value>

<description>location of default database for the warehouse</description>

</property>

<property>

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

<value>jdbc:mysql://localhost:3306/hive?createDatebaseIfNotExist=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>hive</value>

</property>

<property>

<name>datanucleus.schema.autoCreateAll</name>

<value>true</value>

</property>

</configuration>

 

将jdbc驱动(mysql-connector-java-x.x.x-bin.jar)放在hive/lib下面

将hive/lib/jline-2.12.jar 放到hadoop/share/hadoop/yarn/lib下面

mkdir -p tmp #在hive下面创建临时文件夹

chmod a+rwx tmp #修改文件权限

 

测试

启动hadoop,执行hive命令,输入show databases;进行测试

 

问题和解决方法:

1、bash: hive: command not found

解决:hive环境变量没有生效,请检查hive环境变量配置,或重新启动hive环境变量配置

2、Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V

解决(参考文章:http://www.bubuko.com/infodetail-3286965.html

从报错信息来看:

一,java.lang.NoSuchMethodError

  原因:1.系统找不到相关jar包

                  2.同一类型的 jar 包有不同版本存在,系统无法决定使用哪一个

二,com.google.common.base.Preconditions.checkArgument

根据百度可知,该类来自于guava.jar

三,查看该jar包在hadoop和hive中的版本信息

  hadoop-3.2.1(路径:hadoop\\share\\hadoop\\common\\lib)中该jar包为  guava-27.0-jre.jar

   hive-2.3.6(路径:hive/lib)中该jar包为guava-14.0.1.jar

  

四,解决方案

删除hive中低版本的guava-14.0.1.jar包,将hadoop中的guava-27.0-jre.jar复制到hive的lib目录下即可。

五,成功运行hive

 

3、问题:创建hive用户时,出现错误ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value

原因:创建用户后没有赋予权限的原因

解决方法(参考文章https://www.cnblogs.com/m97i/p/10700657.html):

mysql5.1之后的版本,插入用户表的语句为

create user 'hive'@'%' identified by 'hive';   //第一个hive是用户名,'%'表示所有ip都可访问,第二个hive是密码

grant usage on *.* to 'hive'@'%' with grant option; #赋予权限

grant select,insert,update,delete,create,drop on *.* to 'hive'@'%' with grant option;        //给了hive账号 所有数据库中所有表的增删查改和建表删表的权限

flush privileges;    //刷新,使操作成功

 

4、当删除创建的用户后,重新创建,报错:ERROR 1396 (HY000): Operation CREATE USER failed for 'hive'@'%'

原因:删除用户不彻底

解决方法(参考文章https://blog.csdn.net/u011575570/article/details/51438841):

select user from user; #查看用户是否还存在

若没有此用户,删除之后,有无刷新权限;若无,则刷新权限

flush privileges; #刷新权限

再次执行创建用户的命令,若还是不行,则再删除一次用户,并刷新权限

drop user 'hive'@'%'; #删除用户

flush privileges;

执行创建用户命令,成功了。

 

5、navicat如果连接mysql不成功,则需要关闭服务器防火墙

 

6、问题:在hive下执行show databases;时,报错

FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

解决方法:

1)hive --service metastore &

2)然后Ctrl+C

3)再hive,进去

参考文章(https://blog.csdn.net/qq_35078688/article/details/86137440

 

在执行hive --service metastore &命令的时候,报错:MetaException(message:Version information not found in metastore. )

解决方法:

在hive-site.xml中配置

<property>

     <name>hive.metastore.schema.verification</name>

     <value>false</value>

</property>

参考文章(https://blog.csdn.net/zhangyingchengqi/article/details/97645353

 

在执行hive --service metastore &命令的时候,若单纯的只有下面的日志,则不用管,可以继续下面的操作

 

7、执行create database if not exists hive;命令时,报错Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:Got exception: org.apache.hadoop.security.AccessControlException Permission denied: user=root, access=WRITE, inode="/":hadoop:supergroup:drwxr-xr-x

解决方法:

在hadoop的hdfs-site.xml中添加配置,并重启hadoop

<property>

     <name>dfs.permissions</name>

     <value>false</value>

</property>

参考文章(https://my.oschina.net/whitejavadog/blog/896645

 

以上是关于Hadoo系列之Hive安装和使用的主要内容,如果未能解决你的问题,请参考以下文章

大数据系列之数据仓库Hive原理

Hadoop之Hive(调优篇)

Hadoop之Hive(调优篇)

大数据系列之数据仓库Hive安装

hive和hbase有啥关系和区别

大数据学习系列之九---- Hive整合Spark和HBase以及相关测试