- Hive产生背景
(1) 从开发、测试、需求变更角度来看,MapReduce编程不方便
(2) 传统关系型数据库人员的需要
希望使用sql一样的方式来处理分析大数据
(3) 如果数据在HDFS上,如果想要使用SQL来处理,需要什么前提
文件映射成表格(结构化) ==> schema: 元数据信息(metastore)
- Hive是什么
2.1 Hive官方网址
[hive.apache.org](http://hive.apache.org)
2.2 官网Hive介绍
The Apache Hive ™ data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage using SQL
apache hive是数据仓库软件
如果数据集是存储在分布式存储上
就可以使用sql来进行读、写和管理操作
Structure can be projected onto data already in storage
Structure能够映射成已经在存储中的数据
2.3 Hive来源
(1) Facebook开源的, 一开始为解决海量结构化日志的统计(pv or uv), 构建在hadoop之上的数据仓库,通常用于离线处理
写完sql提交给hive之后,将sql翻译成mapReduce作业提交到yarn上执行
2.4 HQL
HIVE定义了SQL语言(HQL), 是一种类SQL
2.5 为什么hive on mapreduce效率低
(1) MapReduce执行效率就低
因为所有Map Task和Reduce Task全部都是以进程的方式执行的,
需要启动进程,销毁进程,即使能开启JVM重用,也是用时开启,
结束时关闭,成本很高
(2) 怎样解决
后来出现了Hive on spark 和Hive on Tez
2.6 Hive底层支持引擎
MapReduce
Spark
Tez
- Hive发展
3.1 2007.08 起源于Facebook
3.2 2013.05
0.11版本-Stringer phase 1
提出ORC
引入Hive Server2
3.3 2013.10
0.12版本-Stringer phase 2
ORC性能改进
3.4 2014.04
0.13版本-Stringer phase 3
引入tez
加入Vectorized query engine
3.5 2014.11
0.14 Stinger.next计划 phase 1
CBO(cost-based optimizer)
3.6 目前是3.11版本
- 为什么要使用Hive
4.1 SQL
使用方便,可以用sql形式管理大数据集
4.2 Hadoop
Hive可以操作大规模数据集
Hive可以作为大数据执行引擎来使用
4.3 MetaStore
Pig/Impala/presto/SparkSQL都是共享元数据的
也就是说在SparkSQL创建的表在Pig/Impala/presto中都能用
- Hive和RDBMS的关系
(1) 实时性
RDBMS快,因为hive底层使用hadoop或Spark,速度慢
(2) 事务
Hive事务没有多大作用
(3) 分布式
RDBMS集群规模小,Hive支持的集群规模大
(4) 数据量
Hive处理数据量大,RDBMS差
(5) Hive QL 与 SQL之间的关系
除了语法类似,外观像,但是这两个之间无任何联系
- 常用分布式存储
(1) HDFS
(2) Amazon S3
(3) OSS(其实是对S3的实现)
-
Hive部署架构图
Hive部署架构.png
7.1 注意
Hive只是客户端工具,即便集群上有多个Hive,也不能说是Hive集群
MetaStore一般是RDBMS
7.2 为什么需要两个Mysql
因为只有一个MySQL的话会出现单点故障问题,也就是当MySQL发生故障时
Hive无法获取元数据,也就无法与Hadoop上的文件关联起来
所以在生产上部署两个MySQL
7.3 为什么不使用Hive自带的数据库
Hive自带的数据库是Derby,但是其不支持多用户操作
所以使用RDBMS作为MetaStore,通常为MySQL
网友评论