hive从入门到放弃(一)——初识hive

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

之前更完了《Kafka从入门到放弃》系列文章本人决定开新坑——hive从入门到放弃今天先认识一下hive。
还没看的可以点击跳转阅读《Kafka从入门到放弃》

hive介绍

hive是一个开源的用于大数据分析和统计的数据库工具它的存储基于HDFS计算基于MapReduce或Spark可以将结构化数据映射成表并提供类SQL查询功能。

特点

  • 提供类SQL查询容易上手开发方便
  • 封装了很多方法尽量避免了开发MapReduce程序减少成本
  • 支持自定义函数可以根据需求实现函数
  • 适用于处理大规模数据小数据的处理没有优势
  • 执行延迟较高适合用于数据分析不适合对时效性要求较高的场景

hive的架构

在这里插入图片描述

  • MetaStore元数据数据的数据比如某个表的元数据包括表名、表所属的数据库、表的类型、表的数据目录等
  • CLI(命令行接口)、JDBC用户接口用以访问hive
  • Sql Parser 解析器将SQL转换成抽象语法树一般用第三方工具库完成对抽象语法树进行语法分析比如表是否存在、字段是否存在、SQL语义是否有误
  • Physical Plan 编译器将抽象语法树编译生成逻辑执行计划
  • Query Optimizer 优化器对逻辑执行计划进行优化
  • Execution 执行器把逻辑执行计划转换成可以运行的物理计划。对Hive而言就是 MR/Spark
  • HDFShive数据文件存放的地方。

不熟悉 HDFS 的朋友可以点击传送《大数据 | 分布式文件系统HDFS》

hive运行机制

当创建表的时候需要指定HDFS文件路径表和其文件路径会保存到MetaStore从而建立表和数据的映射关系。当数据加载如表时根据映射获取到对应的HDFS路径将数据导入。

用户输入SQL后hive会将其翻译成MapReduce或者Spark任务提交到Yarn上面执行执行成功将返回结果。

*hive默认将元数据存储在derby数据库中但其仅支持单线程操作若有一个用户在操作其他用户则无法使用造成效率不高
而且当在切换目录后重新进入Hive会找不到原来已经创建的数据库和表
因此一般用MySQL存储元数据。

hive与数据库

可能有些朋友会认为hive是数据库因为它提供了类SQL查询功能。但其实除了这一点和数据库相似以外其它的根本就没有多少共性。

  • 数据库支持事务可读可写而hive不支持事务一般用于读多写少的情况不建议改动数据因为数据存储在HDFS中而HDFS的文件不支持修改
  • hive延迟比较大因其底层是MapReduce执行效率较慢。但当数据规模较大的情况下hive的并行计算优势就体现出来了数据库的效率就不如hive了
  • hive不支持索引查询的时候是全表扫描这也是其延迟大的原因之一

*hive在0.14以后的版本支持事务前提是文件格式为 orc 格式同时必须分桶还必须显式声明 transactional=true

hive的数据类型

数字类

类型长度
TINYINT1-byte
SMALLINT2-byte
INT/INTEGER4-byte
BIGINT8-byte
FLOAT4-byte
DOUBLE8-byte
DECIMAL-

日期类

类型版本
TIMESTAMP0.8.0以后
DATE0.12.0以后
INTERVAL1.2.0以后

字符类

类型版本
STRING-
VARCHAR0.12.0以后
CHAR0.13.0以后

Misc类

类型版本
BOOLEAN-
BINARY0.8.0以后

复合类

类型版本备注
ARRAYS0.14.以后ARRAY<data_type>
MAPS0.14.以后MAP<primitive_type, data_type>
STRUCTS-STRUCT<col_name : data_type [COMMENT col_comment], …>
UNION0.7.0以后UNIONTYPE<data_type, data_type, …>

小结

本文从hive的特点、架构及运行机制开始并将hive与数据库做对比简单介绍了hive同时对hive的数据类型做一个简单的介绍。

如果觉得写得还不错麻烦点个小小的赞支持一下作者。
持续关注【大数据的奇妙冒险】解锁更多知识。

转载请注明出处【大数据的奇妙冒险】

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6