Hive安装与配置及其问题

当人们无法解释某些事情的时候,就用命运一带而过,而不去管那当中有多少苦痛。——《梦回大清》

1、概述

1.1 什么是Hive

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。

1.2 为什么使用Hive

  • 直接使用hadoop所面临的问题

人员学习成本太高
项目周期要求太短
MapReduce实现复杂查询逻辑开发难度太大

  • 为什么要使用Hive

操作接口采用类SQL语法,提供快速开发的能力。
避免了去写MapReduce,减少开发人员的学习成本。
扩展功能很方便。

1.3 Hive的特点

¬ 可扩展
Hive可以自由的扩展集群的规模,一般情况下不需要重启服务。

¬ 延展性
Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。

¬ 容错
良好的容错性,节点出现问题SQL仍可完成执行。

本文主要介绍Hive的安装、配置和在安装过程中遇到的问题。

2、安装与配置

(1)上传hive的tar包
下载地址:http://mirror.bit.edu.cn/apache/hive/

本文为了用hadoop的mapreduce计算框架,所以用了老版本的hive,新版本的计算框架建议使用spark。

(2)解压

tar -zxvf hive-0.9.0.tar.gz -C /cloud/

(3)安装Mysql数据库

安装教程:http://www.linuxidc.com/Linux/2014-12/111019.htm

修改mysql的密码
/usr/bin/mysql_secure_installation
(注意:删除匿名用户,允许用户远程连接)
登陆mysql
mysql -u root -p

(4)配置hive
在hive的conf文件夹下,新建hive-site.xml配置元数据库信息

vi  hive-site.xml
并添加以下内容
<configuration>
<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>root</value>
<description>username to use against metastore database</description>
</property>

<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
<description>password to use against metastore database</description>
</property>
</configuration>

(5)拷贝MySQL连接驱动到hive的lib中
MySQL连接驱动下载地址:http://search.maven.org/

(6)配置MySQL远程权限
如果出现没有权限的问题,在mysql授权(在安装mysql的机器上执行)
mysql -uroot -p
#(执行下面的语句 .:所有库下的所有表 %:任何IP地址或主机都可以连接)

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
FLUSH PRIVILEGES;

(6)Jline包版本不一致的问题
Jline包版本不一致的问题,需要拷贝hive的lib目录中jline.2.12.jar的jar包替换掉hadoop中的
/home/hadoop/app/hadoop-2.6.4/share/hadoop/yarn/lib/jline-0.9.94.jar

(7)启动
在hive的bin目录下

./hive

启动成功:
这里写图片描述

(8)查看数据库
hive语句与MySQL语句基本一致,查看数据库测试下:
这里写图片描述

3、安装过程中的问题

我在安装过程中,执行第7步启动hive时出错如下:

Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure


Last packet sent to the server was 0 ms ago.
at sun.reflect.GeneratedConstructorAccessor36.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2985)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2871)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3414)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2536)
at com.mysql.jdbc.ConnectionImpl.setAutoCommit(ConnectionImpl.java:4874)
at com.mchange.v2.c3p0.impl.NewProxyConnection.setAutoCommit(NewProxyConnection.java:912)
at org.hibernate.connection.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:83)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
... 78 more
Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2431)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2882)
... 87 more

找了好久也解决问题,最终的解决方案是:
上述问题是由mysql数据库的配置引起的。mysql将其连接的等待时间(wait_timeout)缺省为8小时。在其客户程序中可以这样来查看其值:

mysql> show global variables like “wait_timeout”;
+—————+———+
| Variable_name | Value |
+—————+———+
| wait_timeout | 1814400 |
+—————+———+
1 row in set (0.00 sec)

如果在wait_timeout秒期间内,数据库连接(java.sql.Connection)一直处于等待状态,mysql就将该连接关闭。这时,你的Java应用的连接池仍然合法地持有该连接的引用。当用该连接来进行数据库操作时,就碰到上述错误。

解决办法:

1、修改MySQL数据配置文件,Windows文件名是my.ini,路径在MYSQL安装路径下;Linux中文件名是my.cnf 路径在/etc/my.cnf。修改wait_timeout = 1814400;

2、重启MySQL数据库: service mysqld restart

这样就解决了hive的启动问题,可以愉快的写HQL,再也不用纠结于mapreduce的设计了。

猜你喜欢

转载自blog.csdn.net/zhoutaochun/article/details/78944562
今日推荐