Hive学习入门之Hive简介与安装

什么是Hive?

Apache Hive 是由Facebook开发的用于查询存储在HDFS上的数据的一个组件,是Apache Hadoop生态系统组件之一。Hive提供SQL-like查询模式,即Hive Query Language(HQL)进行大数据的访问和分析,并被视为Hadoop 数据仓库框架(Data Warehousing Framework),提供多种分析特性,如windowing 和 partitioning等。


Hive的架构及HQL查询流程

Hive 的整体架构如下图所示:

Hive提供CLI、Beeline及JDBC/ODBC三个用户接口(WHI已废弃),在使用JDBC/ODBC的方式时,其底层使用Thrift远程操作Hive,Hive提供Metastore服务,DDL数据存放在RDBMS中,默认使用derby,但一般我们将之设置为mysql来存储元数据。Hive将表内的数据存储在Hadoop的HDFS中,HQL的查询最终转换为MapReduce操作在Hadoop的节点中进行。其查询流程如下图所示:

流程的详细解释可参考该文章链接


Hive的特点

  • 使用SQL-Like方式查询,简单易学
  • 更适用于离线大批量数据分析, 不适合实时分析
  • 使用Hadoop的map/reduce进行批数据的分布处理
  • 可扩展(集群规模扩展方面),(用户自定义函数)

如何安装Hive?

1.下载Hive包,点下载网站进行下载。

2.解压

1
[email protected]:~/bigdata/hive$ tar xzf apache-hive-3.0.0-bin.tar.gz

3.添加环境变量

修改 ~/.bash_profile :

1
2
export HIVE_HOME=/Users/alex/Development/bigdata/hive/apache-hive-3.0.0-bin
export PATH=$PATH:$HIVE_HOME/bin

然后使用命令source ~/.bash_profile生效

4.配置hive-site.xml

首先生成hive-site.xml

1
2
$ cd conf/
$ cp hive-default.xml.template hive-site.xml

然后打开该xml文件,使用mysql作为Metastore存储配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
property>
<name>hive.metastore.warehouse.dir</name>
<value>/Users/alex/Development/bigdata/hive/apache-hive-3.0.0-bin/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_metastore?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.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>

5.添加mysql-connector驱动

将mysql-connector-java-xxx-bin.jar 拷贝到 $HIVE_HOME/lib/ 目录下

6.启动mysql,Hadoop服务

7.终端输入命令: hive

正常情况下,命令行下使用hive就可以运行了,但是实际情况并非如此,我在运行时遇到了如下情况:

  • SLF4J: Found binding in log4j-slf4j-impl-2.4.1.jar

    原因:hive中的日志和hadoop中日志包冲突

    解决方案:mv hive/lib/log4j-slf4j-impl-2.10.0.jar hive/lib/log4j-slf4j-impl-2.10.0.jar.bak

  • org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

    原因:未初始化数据库

    解决方案:schematool -dbType mysql -initSchema

  • Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%

    原因:未找到system:java.io.tmpdir 及 system:user.name定义

    解决方案:在hive安装目录下mkdir tmpdir, 然后将<value>${system:java.io.tmpdir}/${system:user.name}</value>修改为<value>/Users/alex/Development/bigdata/hive/apache-hive-3.0.0-bin/tempdir/${user.name}</value>

  • 使用 show databases;时出现 OPTION SQL_SELECT_LIMIT=DEFAULT 错误

    原因:mysql-connector版本过低,set OPTION SQL_SELECT_LIMIT=DEFAULT无效果

    解决方案:下载最新版本的mysql-connector, 放入hive/lib中,替换掉低版本的mysql-connector

在解决了以上问题后,hive最终顺利启动。


参考

1. Hive Wiki
2. Hive安装与配置
3. Hive常见错误

坚持原创技术分享,您的支持将鼓励我继续创作!