采用了hadoop的分布式存储系统来储存数据,解决了海量数据的存储,接下来就需要解决数据的查询问题。数据暂不涉及到修改,只是根据需求将数据查询出来做尽一步的处理,对查询也不需要实时性很高,可以在离线下进行数据的查询。传统的hadoop查询需要编写mapreduce程序,效率也慢,对熟悉sql语句但非开发人员极不友好。因此需要一款数据仓库工具来对数据进行管理。

Hive介绍

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

HIve与sql对比

Hive安装包下载

下载

1
2
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hive/stable-2/apache-hive-2.1.1-src.tar.gz
tar -xzvf hive-x.y.z.tar.gz

启动hive出现缺包的情况:

缺失jar包,尝试解决问题的步骤
1、多找几个源下载
2、单独下载jar包,发现不兼容
3、下载apache-hive-2.1.1-bin.tar.gz文件,而不是apache-hive-2.1.1-src.tar.gz

数据库安装

hive需要一个数据库来做保存元数据信息,可以选用derby或者mysql,官方建议实际的使用中使用mysql。没有配置之前,会出现以下错误信息


安装mysql

1
2
3
4
5
6
7
8
wget http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
安装源
yum localinstall mysql57-community-release-el7-9.noarch.rpm
安装
yum install mysql-community-server
systemctl enable mysqld.service
//启动
systemctl start mysqld.service

安装成功后,mysql会随机生成的初始密码,查看密码:

1
2
grep "password"  /var/log/mysqld.log  
xxxxxxxxxxx

然后运行mysql_secure_install修改密码:xxxxxxx

hive-site.xml设置

配置hive-site.xml

1
cp hive-default.xml.templete hive-site.xml

主要涉及mysql的设置,在hive-site.xml中找到以下几项,根据mysql的配置进行设置。

还需要将mysql-connector-java-5.1.26-bin.jar放置到lib包中。

1
jdbc:mysql://127.0.0.1:3306/hive?createDatabaseIfNotExist=true

Hive现在会在Metastore数据库中记录模式版本,并验证Metastore模式版本是否与要访问Metastore的Hive二进制文件兼容。默认情况下将禁用用于隐式创建或更改现有模式的Hive属性。Hive不会尝试隐式更改元数据仓库模式。当对旧模式执行Hive查询时,它将无法访问元数据仓。如果没有禁止模式检查和允许元数据仓库隐式地修改模式,将会一直的报下面的错误。

1
“Caused by: MetaException(message:Version information not found in metastore. )” 


修改conf/hive-site.xml 中的 “hive.metastore.schema.verification” 值为 false 即可解决。

初始化

数据库准备就绪,hive-site.xml也配置好了。就需要初始化数据库,生成元数据。否则会保存下面的错误

运行初始化指令,dbType设置为mysql

1
bin/schematool -initSchema -dbType mysql

成功后会出现下面的信息

其中有个警告

1
class path contains multiple slf4j bindings

这是由于hive的slf4j与hadoop的slf4g包重合了,可以删除第一个。

接着又爆出下面的错误

没有配置好system:java.io.tmpdir。解决方法如下
1.查看hive-site.xml配置,会看到配置值含有”system:java.io.tmpdir”的配置项
2.新建文件夹/home/hadoop/tmp
3.将含有”system:java.io.tmpdir”的配置项的值修改为如上地址

成功运行bin/hive

报了一个警告,暂时不知道有什么影响,
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases
查询databases时会出现下面的问题

将配置文件中的${system:user.name} 改为自己的用户名hadoop

总结

hive的安装比较简单,但是其配置项繁多,不容易一次性配置好。

参考文档

GettingStarted - Apache Hive - Apache Software Foundation
AdminManual MetastoreAdmin - Apache Hive - Apache Software Foundation
AdminManual Configuration - Apache Hive - Apache Software Foundation