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


    之前更完了《Kafka从入门到放弃》系列文章,本人决定开新坑——hive从入门到放弃,今天先认识一下hive。
    没看过 Kafka 系列的朋友可以点此传送阅读:
    《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;
    • HDFS:hive数据文件存放的地方。

    不熟悉 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的数据类型

    数字类

    类型 长度
    TINYINT 1-byte
    SMALLINT 2-byte
    INT/INTEGER 4-byte
    BIGINT 8-byte
    FLOAT 4-byte
    DOUBLE 8-byte
    DECIMAL -

    日期类

    类型 版本
    TIMESTAMP 0.8.0以后
    DATE 0.12.0以后
    INTERVAL 1.2.0以后

    字符类

    类型 版本
    STRING -
    VARCHAR 0.12.0以后
    CHAR 0.13.0以后

    Misc类

    类型 版本
    BOOLEAN -
    BINARY 0.8.0以后

    复合类

    类型 版本 备注
    ARRAYS 0.14.以后 ARRAY<data_type>
    MAPS 0.14.以后 MAP<primitive_type, data_type>
    STRUCTS - STRUCT<col_name : data_type [COMMENT col_comment], ...>
    UNION 0.7.0以后 UNIONTYPE<data_type, data_type, ...>

    小结

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

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

  • 相关阅读:
    git命令无法自动补全(sles11.3)
    linux下安装svn出现configure: error: We require OpenSSL; try --with-openssl
    Linux系统下升级Python版本步骤(suse系统)
    git commit --amend
    关于device tree中的interrupts选项
    BufferedInputStream
    FileInputStream
    FileOutputStream
    泛型上下限
    泛型接口
  • 原文地址:https://www.cnblogs.com/lyuzt/p/15999110.html
Copyright © 2020-2023  润新知