BigData-Notes/notes/installation/Linux环境下Hive的安装部署.md
2019-05-30 14:53:48 +08:00

182 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Linux环境下Hive的安装
<nav>
<a href="#一安装Hive">一、安装Hive</a><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#11-下载并解压">1.1 下载并解压</a><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#12-配置环境变量">1.2 配置环境变量</a><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#13-修改配置">1.3 修改配置</a><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#14-拷贝数据库驱动">1.4 拷贝数据库驱动</a><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#15-初始化元数据库">1.5 初始化元数据库</a><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#16-启动">1.6 启动</a><br/>
<a href="#二HiveServer2beeline">二、HiveServer2/beeline</a><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#21-修改Hadoop配置">2.1 修改Hadoop配置</a><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#22-启动hiveserver2">2.2 启动hiveserver2</a><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#23-使用beeline">2.3 使用beeline</a><br/>
</nav>
## 一、安装Hive
### 1.1 下载并解压
下载所需版本的Hive这里我下载版本为`cdh5.15.2`。下载地址http://archive.cloudera.com/cdh5/cdh/5/
```shell
# 下载后进行解压
tar -zxvf hive-1.1.0-cdh5.15.2.tar.gz
```
### 1.2 配置环境变量
```shell
# vim /etc/profile
```
添加环境变量:
```shell
export HIVE_HOME=/usr/app/hive-1.1.0-cdh5.15.2
export PATH=$HIVE_HOME/bin:$PATH
```
使得配置的环境变量立即生效:
```shell
# source /etc/profile
```
### 1.3 修改配置
**1. hive-env.sh**
进入安装目录下的`conf/`目录拷贝Hive的环境配置模板`flume-env.sh.template`
```shell
cp hive-env.sh.template hive-env.sh
```
修改`hive-env.sh`指定Hadoop的安装路径
```shell
HADOOP_HOME=/usr/app/hadoop-2.6.0-cdh5.15.2
```
**2. hive-site.xml**
新建hive-site.xml 文件内容如下主要是配置存放元数据的MySQL的地址、驱动、用户名和密码等信息
```xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop001:3306/hadoop_hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
</property>
</configuration>
```
### 1.4 拷贝数据库驱动
将MySQL驱动包拷贝到Hive安装目录的`lib`目录下, MySQL驱动的下载地址为https://dev.mysql.com/downloads/connector/j/ , 在本仓库的[resources](https://github.com/heibaiying/BigData-Notes/tree/master/resources)目录下我也上传了一份,有需要的可以自行下载。
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hive-mysql.png"/> </div>
### 1.5 初始化元数据库
+ 当使用的 hive 是1.x版本时可以不进行初始化操作Hive会在第一次启动的时候会自动进行初始化但不会生成所有的元数据信息表只会初始化必要的一部分在之后的使用中用到其余表时会自动创建
+ 当使用的 hive 是2.x版本时必须手动初始化元数据库。初始化命令
```shell
# schematool 命令在安装目录的bin目录下由于上面已经配置过环境变量在任意位置执行即可
schematool -dbType mysql -initSchema
```
这里我使用的是CDH的`hive-1.1.0-cdh5.15.2.tar.gz`,对应`Hive 1.1.0` 版本,可以跳过这一步。
### 1.6 启动
由于已经将Hive的bin目录配置到环境变量直接使用以下命令启动成功进入交互式命令行后执行`show databases`命令,无异常则代表搭建成功。
```shell
# hive
```
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hive-install-2.png"/> </div>
在Mysql中也能看到Hive创建的库和存放元数据信息的表
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hive-mysql-tables.png"/> </div>
## 二、HiveServer2/beeline
Hive内置了HiveServer和HiveServer2服务两者都允许客户端使用多种编程语言进行连接但是HiveServer不能处理多个客户端的并发请求因此产生了HiveServer2。HiveServer2HS2允许远程客户端可以使用各种编程语言向Hive提交请求并检索结果支持多客户端并发访问和身份验证。HS2是由多个服务组成的单个进程其包括基于Thrift的Hive服务TCP或HTTP和用于Web UI的Jetty Web服务。
HiveServer2拥有自己的CLI工具——Beeline。Beeline是一个基于SQLLine的JDBC客户端。由于目前HiveServer2是Hive开发维护的重点所以官方更加推荐使用Beeline而不是Hive CLI。以下主要讲解Beeline的配置方式。
### 2.1 修改Hadoop配置
修改 hadoop 集群的 core-site.xml 配置文件增加如下配置指定hadoop的root用户可以代理本机上所有的用户。
```xml
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
```
之所以要配置这一步是因为hadoop 2.0以后引入了安全伪装机制使得hadoop不允许上层系统如hive直接将实际用户传递到hadoop层而应该将实际用户传递给一个超级代理由该代理在hadoop上执行操作以避免任意客户端随意操作hadoop。如果不配置这一步在之后的连接中可能会抛出`AuthorizationException`异常。
>关于Hadoop的用户代理机制可以参考[hadoop的用户代理机制](https://blog.csdn.net/u012948976/article/details/49904675#官方文档解读) 或 [Superusers Acting On Behalf Of Other Users](http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/Superusers.html)
### 2.2 启动hiveserver2
由于上面已经配置过环境变量,这里直接启动即可:
```shell
# nohup hiveserver2 &
```
### 2.3 使用beeline
可以使用以下命令进入beeline交互式命令行出现`Connected`则代表连接成功。
```shell
# beeline -u jdbc:hive2://hadoop001:10000 -n root
```
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hive-beeline-cli.png"/> </div>