概述
Hive 提供了一种 SQL 方式编写 MapReduce 程序的方式,可以再进行数据分析任务时使用简单的 SQL 语句进行关联、分组、聚合、排序等查询。
Hive 为大量数据的 OLAP 应用提供解决方案。底层基于 HDFS 存储数据。
下载安装
从 Hive官网 下载 tar.gz 包,会自动分配到最合适的镜像站。
|
|
添加到环境变量,这里我习惯建立一个符号链接使用
|
|
配置,conf
目录下有很多配置模板,拷贝一份进行编辑
|
|
这里需要修改的是 hive-site.xml
文件。在修改配置之前,先了解一下 Hive 的运行方式。
Hive 本身并不会存储数据,数据仍然存放在 HDFS 中,Hive 中定义数据表时其实是定义了 HDFS 中文件的解析方式。表定义了 HDFS 文件中各个列的名称、数据类型。可以将 Hive 表理解为 HDFS 文件的视图。
Hive 将 SQL 语句转换为 MapReduce 程序在 Hadoop 中运行。
一般的,通过数据收集系统将文件存储到 HDFS 存储中,然后通过 Hive 进行计算,最后将结果存入 HBase 或其他数据存储,供在线业务使用。
通常,将 Hive 原数据(包含 Hive 表的定义等)存储到 MySQL 是很好的方案。
先准备 MySQL
|
|
在 HDFS 上创建相关目录
|
|
其中,/user/hive/warehouse
是 hive-site.xml
中默认指定的仓库存储位置 hive.metastore.warehouse.dir
然后编辑 hive-site.xml
|
|
为使用 MySQL ,还需要将 MySQL JDBC 驱动复制到 hive/lib 下
|
|
创建临时文件目录
|
|
启动 MySQL
|
|
初始化 Hive Schema
|
|
初始化后可以登录 MySQL 看到 hive_metastore
库中已经创建了一些表
|
|
执行 Hive 进入到 Hive 命令行,可以创建表,查询表
|
|
创建表,这里创建一个用户表,两列,id 和 username,字段间以空格隔开
|
|
从本地文件导入数据
user_data.txt 内容
|
|
|
|
导入文件之后,可以使用 hadoop fs
命令看到文件内容被存储在 HDFS 中
|
|
查询数据
|
|
这里简单查询数据并未被转换为 MapReduce 任务,执行一个统计语句
|
|
可以从输出看到这里执行了一个 MapReduce 任务。
例子:处理 Nginx 日志
截取几行 Nginx 日志作为数据来源
|
|
从 Nginx 配置可以看到,日志的格式为
|
|
可以看到这里不是简单以字符分割的字段,这里需要以正则方式匹配各个字段。编写正则表达式,分组匹配各个字段。
|
|
Hive 表的定义
|
|
这里注意正则表达式的转义
导入数据
|
|
查询数据,可以看到各个字段完整被导入
|
|
从 HDFS 看到文件存储的是原始的内容
|
|
统计查询,这里查询各个 ip 的请求数,数目从大到小排序
|
|
可以看到这里执行了两个 Job,查询出的统计结果符合预期。
总结
Hive 提供了一种很方便的方式进行数据分析,能够在不手动编写 MapReduce 程序时简单通过 SQL 语句进行查询,简化了数据分析的工作。
参考链接
Hive Getting Started
Hive 导入数据的几种方式
Hive 2.1.0 安装
Hive 与 HBase 的差别是什么,各自适用在什么场景中?