- Hive介绍
- Hive技术架构
- Hive实操
Hive介绍
Hive是什么
Hive是建立在Hadoop上的数据仓库基础构架,它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的极致,它允许熟悉SQL的用户查询数据
- 由facebook开源,最初用于解决海量结构化的日志数据统计问题
- 构建在Hadoop之上的数据仓库
- Hive定义了一种类SQL查询语言:HQL
- 通常用于离线数据处理(采用MapReduce)
- 可认为是一个HQL->MR的语言翻译器
为什么使用Hive
- 简单,容易上手
- 为超大数据集设计的计算/扩展能力
- MR作为计算引擎,HDFS作为存储系统
- 统一的元数据管理(HCalalog)
Hive局限性
- Hive的HQL表达能力有限
- 迭代式算法无法表达
- 有些复杂运算用HQL不易表达
- Hive效率较低
- Hive自动生成MR作业,通常不够智能
- HQL调优困难,力度较粗
- 可控性差
Hive技术架构
- 用户接口(CLI,JDBC/ODBC,WebUI)
- 元数据存储(默认:derby,线上一般:MySQL)
- 驱动器(解释器、编译器、优化器、执行器)
- Hadoop(用MapReduce进行计算,用HDFS进行存储)
Hive部署架构
- 客户端(beeline(JDB实现),JDBC,Python)
- Metastore(使用MySQL作为元数据库)
- Hiveserver2(用于接受用户请求,解析SQL,执行SQL并返回结果)
Hive特点
- 支持提供类似于SQL的查询语言(HQL),基于用户使用
- 支持针对海量数据的高性能查询和分析
- 支持高扩展性,通过增加节点提高计算性能,性能线性扩展,支持在线扩展
- 支持众多计算框架,如MapReduce、Tez、Spark等
- 支持灵活的扩展数据类型,自定义函数(UDF)和脚本
查询语言 | HQL | SQL |
---|---|---|
数据存储位置 | HDFS | Raw Device或者Local FS |
数据格式 | 用户定义 | 系统决定 |
数据更新 | 不支持 | 支持 |
索引 | 无 | 有 |
执行 | MapReduce | Executor |
执行延迟 | 高 | 低 |
可扩展性 | 高 | 低 |
数据规模 | 大 | 小 |
Hive应用场景
- 日志分析
- 统计网站一个时间段内的pv、uv
- 多维度数据分析
- 大部分互联网公司使用Hive进行日志分析,包括百度、淘宝等
- 其他场景
- 海量结构化数据离线分析
- 低成本进行数据分析(不直接编写MR)
Hive实操
Hive数据模型
Hive数据类型
DDL(数据库定义语言)
默认分隔符:/001 ->SOH
DML
Hive配置
IP | 主机名 | 作用 |
---|---|---|
192.168.80.132 | e3base01 | QuorumPeerMain、Namenode、datanode、zkfc、journalnode、resourcemanager、nodemanager |
192.168.80.133 | e3base02 | QuorumPeerMain、Namenode、datanode、zkfc、journalnode、resourcemanager、nodemanager |
192.168.80.134 | e3base03 | QuorumPeerMain、datanode、journalnode、nodemanager、metastore、hiveserver2 |
192.168.80.131 | mysql01 | mysql |
1、安装包解压配置
将安装程序apache-hive-2.3.3-bin-e3base3.0.0.tar.gz拷贝到对应的一台主机如e3base01的/e3base/cdh5140/目录下
使用tar zxvf apache-hive-2.3.3-bin-e3base3.0.0.tar.gz
命令进行解压
创建软连接ln -s /e3base/cdh5140/hive-1.1.0-cdh5.14.0-e3base3.0.0/ /e3base/hive
创建/e3base/cdh5140/e3-info/hive/logs目录 mkdir -p /e3base/hive/logs
2、配置环境变量
1 | export HIVE_HOME=$IN_HOME/hive |
3、修改hive-env.sh文件(/e3base/hive/conf/hive-env.sh)
请注意修改这些参数中的-Xms -Xms -Xmn值符合当前主机环境,如堆内存值配置过大超过系统可用内存,会导致服务启动失败
4、修改hive-site.sh文件(/e3base/hive/conf/hive-site.sh)
在mysql对应的主机上创建hivedb数据库,hive用户,密码hive123,并授权:
1 | create database hivedb; |
hive-site.sh:
1 | <configuration> |
5、修改hive-log4j.properties
hive.log.dir=/e3base/e3-info/hive/logs hive运行日志路径
6、Hive启停
(1)初始化hive元数据库
使用mysql作为hive元数据数据库,执行
1 | schematool -initSchema -dbType mysql |
初始化成功后会在mysql数据库中生成相应的元数据库及表,在mysql中给常用的元数据表加索引,以保证其性能。
1 | create index ind_part_name_tbl_id on partitions(part_name,tbl_id); |
检查新增索引是否添加
1 | show index from partitions; |
(2)启动hive服务
确定hivedb库已初始化成功
启动metastore服务:(metastore需启动在15001端口)->通过metastore建立元数据与MySQL的映射关系
1 | nohup hive --service metastore -p 15001 2>&1 >> $E3_INFO_HOME/hive/logs/metastore.log & |
启动hiveserver2服务:
1 | nohup hive --service hiveserver2 2>&1 >> $E3_INFO_HOME/hive/logs/hiveserver2.log & |
验证是否启动:
1 | ps -ef | grep hive |
(3)停止hive服务
使用ps -ef | grep hive找到hive相关的进程,使用kill指令后接进程号杀掉进程
(4)进程查看
使用ps -ef| grep hive找到hive相关的进程号(pid),输入jps后有相应的pid的RunJar则进程正常。
(5)连接hive
方式一:Hive Cli客户端验证
1 | hive |
方式二:Hive Beeline客户端验证(推荐)
1 | beeline -u jdbc:hive2://e3base03:15002/default -n e3base |
(6)应用示例:
1>创建库test
1 | 0: jdbc:hive2://e3base03:15002/default> create database test; |
2>创建表
1 | create table test.events( |
3>创建本地数据文件到/e3base/cdh5140
1 | vi /e3base/events.csv |
4>向表events导入数据
1 | 0: jdbc:hive2://e3base03:15002/default> LOAD DATA LOCAL INPATH '/e3base/events.csv' overwrite into table test.events; |
5>show语法:
1 | show databases; |
5>统计各系统使用情况
1 | SELECT client,count(*) FROM test.events GROUP BY client; |
(7)退出hive模式
1 | !quit |
1 | CREATE TABLE cardb.cars( |