hive入门
hive简介
hive是由Facebook开源用于解决海量结构化日志的数据统计工具。
hive是基于hadoop的一个数据长裤工具,可以将结构化的数据文件映射位一张表,并提供类似sql的查询语句。
其本质是将HQL转换位MR程序。
- hive的数据储存在HDFS
- hive分析数据底层的实现是MR
- 其执行程序运行在yarn上
hive的优缺点
- 优点:
- 操作接口类似sql语法,易上手
- 避免编写mr,减少开发人员的学习成本
- 可以处理海量数据
- 支持自定义函数,用户可以根据自己的需求来实现自己的函数
- 可拓展性强,因为其基于hadoop,故其性能拓展同hadoop的性能拓展
- 缺点
- hive中HQL的表达能力有限
- 迭代式算法无法表达
- 不擅长数据挖掘方面的工作
- hive效率低
- hive自动生成mr作业,通常情况下不够智能
- hive调优困难,粒度较粗
- 因其底层运算为mr,所以延迟较高,不适合作实时分析
- hive中HQL的表达能力有限
hive架构原理
-
用户接口:Client
CLI(hive shell)、JDBC/ODBC(java访问hive)、WEBUI(浏览器访问hive)
-
元数据:Metastore
元数据包括:表名、表所属数据库、表的拥有者、列/分区字段、表的类型、表的数据所在目录等等。
其元数据默认储存在自带的derby数据库中,一般使用mysql储存
-
hadoop
通过HDFS存储数据,通过MapReduce进行运算
-
驱动器:Driver
- 解析器:将sql字符串转换成抽象语法树AST
- 编译器:将AST编译成逻辑执行计划
- 优化器:对逻辑执行计划进行优化
- 执行器:把逻辑执行计划转换成可以运行的物理计划,即MR或Spark
hive与数据库的比较(区别)
- 查询语言
- sql被广泛应用在数据库中,因此,专门针对hive的特性设计了类似sql的查询语言HQL
- 数据储存位置
- hive是建立在hadoop之上的,所有hive的数据都是储存在hdfs中
- 而数据库则是将数据保存在块设备或者本地文件系统中
- 数据更新
- 因为hive是针对数据仓库应用设计的,而数据仓库的内容是读多写少。因此hive中不建议对数据进行改写操作,所有数据都是在加载的时候确定的
- 而数据库中的数据则通常需要进行多次修改
- 索引
- hive在加载过程中对数据进行任何处理,甚至不会对数据进行扫描,因此,也没有对数据中某些key建立索引。但是因为由mr的引入,hive可以并行处理数据,因此虽然没有索引,但是在大量数据访问的情况下,hive任然可以体现出优势。
- 执行
- hive中的大多数查询的执行通过hadoop提供的mr来实现的
- 数据库则由自己的执行引擎
- 延迟
- hive在查询数据的时候,由于没有索引,需要扫描整个表,因此延迟较高。另一个引起hive高延迟的原因既是mr框架本身的高延迟。
- 数据库在一定的数据规模内时保持着较低的执行延迟
- 可拓展性
- hive建立在hadoop之上,因此hive的可拓展性和hadoop时一致的
- 数据库由于ACID语义的严格限制,扩展非常有限。目前最先进并行数据库理论上的扩展能力也只有100台左右
- 数据规模
- hive,大
- 数据库,小