参考文档:
https://blog.youkuaiyun.com/jssg_tzw/article/details/72354470
一、Hive 概述
1、Hive 是什么
Hive 是一个数据仓库基础工具,在 hadoop 中用来处理结构化数据。通过将 sql 语句转化为 mapreduce 任务进行运行,为用户提供简单的 sql 查询功能。
2、Hive 不是什么
Hive 不是一个关系数据库,不是设计用于联机事务处理(OLTP),不是实时查询和行级更新的语言。
3、Hive 的特点
它存储架构在一个数据库中,并处理数据到 HDFS
它是专为 OLAP 设计
它提供 SQL 类型查询语言,称为 HiveQL 或 HQL
它是熟知,快速,可扩展的。
4、Hive 架构
用户接口/界面:
Hive 是一个数据仓库基础工具软件,可以创建用户和 HDFS 之间互动。用户界面,Hive 支持 Web UI ,Hive 命令行,Hive洞察(windows)。
元存储:
Hive 选择各自的数据库服务器,用以存储表,数据库,列模式或元数据表,它们的数据类型和 HDFS 映射。
HiveQL 处理引擎:
HiveQL 类似于 SQL 的查询上 Metasore 模式信息。
执行引擎:
HiveQL 处理引擎和 MapReduce 的结合部分是 Hive 执行引擎。
HDFS/HBASE:
HDFS或HBASE 用于将数据存储到文件系统。
5、Hive 工作流程
1)Execute Query
Hive 接口,如命令行或 WEB UI 发送命令到查询驱动程序。
2)Get Plan
在驱动程序帮助下,查询编译器。编译器分析查询,检查语法,检查查询计划,检查查询的要求。
3)Get Metadata
编译器发送元数据请求到 Metastore。
4)Send Metadata
Metastore 发送元数据,响应编译器。
5)Send Plan
编译器检查要求,并重新发送计划给驱动程序。
6)Execute Plan
驱动程序发送执行计划到执行引擎。
7)Execute Job
在内部,执行作业的过程是一个 MapReduce 工作。执行引擎发送作业给 Yarn。
7.1)Metadata Ops
在执行的同时,执行引擎可以通过 Metastore 执行元数据操作。
8)Fetch Result
执行引擎接收来自数据节点的结果。
9)Send Results
执行引擎发送这些结果值给驱动程序。
10)Send Results
驱动程序将结果发送给 Hive 接口。
二、centos7 基于 hadoop 2.7.7安装 hive 2.3.3
1、下载 hive 2.3.3
# wget https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-2.3.3/apache-hive-2.3.3-bin.tar.gz
2、安装 hive 2.1.1
# tar xzvf apache-hive-2.3.3-bin.tar.gz -C /opt/module/
# mv /opt/module/apache-hive-2.3.3-bin /opt/module/hive-2.3.3
# vim /etc/profile
export HIVE_HOME=/opt/module/hive-2.3.3
export HIVE_CONF=$HIVE_HOME/conf
export PATH=$PATH:$HIVE_HOME/bin
3、配置 hive
# cp /opt/module/hive-2.3.3/conf/hive-default.xml.template /opt/module/hive-2.3.3/conf/hive-site.xml
# hadoop fs -mkdir -p /user/hive/warehouse /tmp/hive
# hadoop fs -chmod -R 777 /user/hive/warehouse /tmp/hive
# vim hive-site.xml
// ${system:java.io.tmpdir} 替换为 hive 的临时目录:/opt/module/hive-2.3.3/tmp
// ${system:user.name} 替换为 root
// javax.jdo.option.ConnectionDriverName 的 value 替换为 mysql 驱动类路径: com.mysql.jdbc.Driver
// javax.jdo.option.ConnectionURL 的 value 修改为 mysql 的地址: jdbc:mysql://192.168.56.101:3306/hive?useSSL=false
// javax.jdo.option.ConnectionUserName 的 value 修改为 mysql 数据库登录名:root
// javax.jdo.option.ConnectionPassword 的 value 修改为 mysql 登录密码:
# cp mysql-connector-java-5.1.36.jar /opt/module/hive-2.3.3/lib/
# cp /opt/module/hive-2.3.3/conf/hive-env.sh.template hive-env.sh
# vim hive-env.sh
export HADOOP_HOME=/opt/module/hadoop-2.7.7
export HIVE_CONF_IDR=/opt/module/hive-2.3.3/conf
export HIVE_AUX_JARS_PATH=/opt/module/hive-2.3.3/lib
4、安装配置 mysql 5.7
0)安装 mysql 5.7 (此处不显示详细教程)
1)对 mysql 数据库初始化
//登录 mysql 数据库
mysql> create database hive;
# cd /opt/module/hive-2.3.3/bin
//初始化元数据库
# schematool -initSchema -dbType mysql
2)启动 hive
# ./hive
3)测试 hive
//查看 hive 的函数
hive> show functions;
//新建库,表
mysql> select * into outfile '/var/lib/mysql-files/sbux_nc_req.dat' fields terminated by '\t\t\t' from sbux_nc_req;
hive> create database test_db;
hive> use test_db;
hive> create table test_tb;
(
request_id bigint,
message_type_id int,
request_type int,
request_time string,
request_url string,
request_source int,
request_body string,
response_time string,
send_time string,
attachment_id int,
template_id bigint,
linked_template_id string,
linked_job_id bigint,
application_id int,
created_by string,
creation_date string,
last_updated_by string,
last_updated_date string
) row format delimited fields terminated by '\t\t\t';
hive> select * from test_tb;
mysql> select * from hive.TBLS;