zoukankan      html  css  js  c++  java
  • 大数据基础---Hive是什么?

    这篇文章主要介绍Hive的概念。

      简介:

      Hive中文名叫数据仓库管理系统,之前我们操作MapReduce必须通过编写代码或者通过特殊命令来实现,有了Hive我们通过常用的SQL语句就能操作MapReduce集群了。是不是感觉很方便。 这也是方便不懂MapReduce原理,懂SQL语句的人用的。

      有好几个公司都推出了自己的Hive,其中比较出名的是Apache Hive,CDH Hive,HDP Hive和MapR Hive,大家刚开始学习大部分都用的Apache Hive,但是公司中却很少使用它,因为它的版本太杂乱,里面的BUG也很多,没法快速投入生产,所以大部分都采用第三方Hive,也就是CDH或MapR Hive,这些Hive由专门组织开发,调理清晰,BUG较少,当然人家也是靠这个服务赚钱啦。博主因为也是学习阶段,所以先介绍Apache Hive了,后续会介绍和搭建其它版本的。

      结构:

      

     Setp1:  用户通过Shell命令,WebUI或JDBC调用Driver

     Setp2:  Driver会先去数据库查询有没有这个表的信息,没有的话直接返回,有的话进行第三步

     Setp3:将SQL转行为MapReduce执行命令

       Setp4:分发到MapReduce去执行 

       关于 Hive SQL 的详细执行流程可以参考美团技术团队的文章:Hive SQL 的编译过程

       Hive数据类型:

    大类类型
    Integers(整型) TINYINT—1 字节的有符号整数 SMALLINT—2 字节的有符号整数 INT—4 字节的有符号整数 BIGINT—8 字节的有符号整数
    Boolean(布尔型) BOOLEAN—TRUE/FALSE
    Floating point numbers(浮点型) FLOAT— 单精度浮点型 DOUBLE—双精度浮点型
    Fixed point numbers(定点数) DECIMAL—用户自定义精度定点数,比如 DECIMAL(7,2)
    String types(字符串) STRING—指定字符集的字符序列 VARCHAR—具有最大长度限制的字符序列 CHAR—固定长度的字符序列
    Date and time types(日期时间类型) TIMESTAMP — 时间戳 TIMESTAMP WITH LOCAL TIME ZONE — 时间戳,纳秒精度 DATE—日期类型
    Binary types(二进制类型) BINARY—字节序列

        隐式转换:

        Hive 中基本数据类型遵循以下的层次结构,按照这个层次结构,子类型到祖先类型允许隐式转换。例如 INT 类型的数据允许隐式转换为 BIGINT 类型。额外注意的是:按照类型层次结构允许将 STRING 类型隐式转换为 DOUBLE 类型。

        

        复杂类型:   

    类型描述示例
    STRUCT 类似于对象,是字段的集合,字段的类型可以不同,可以使用 名称.字段名 方式进行访问 STRUCT ('xiaoming', 12 , '2018-12-12')
    MAP 键值对的集合,可以使用 名称[key] 的方式访问对应的值 map('a', 1, 'b', 2)
    ARRAY 数组是一组具有相同类型和名称的变量的集合,可以使用 名称[index] 访问对应的值 ARRAY('a', 'b', 'c', 'd')

        示例:

        如下给出一个基本数据类型和复杂数据类型的使用示例:

    CREATE TABLE students(
      name      STRING,   -- 姓名
      age       INT,      -- 年龄
      subject   ARRAY<STRING>,   --学科
      score     MAP<STRING,FLOAT>,  --各个学科考试成绩
      address   STRUCT<houseNumber:int, street:STRING, city:STRING, province:STRING>  --家庭居住地址
    ) ROW FORMAT DELIMITED FIELDS TERMINATED BY "	";

       内容格式:

      当数据存储在文本文件中,必须按照一定格式区别行和列,如使用逗号作为分隔符的 CSV 文件 (Comma-Separated Values) 或者使用制表符作为分隔值的 TSV 文件 (Tab-Separated Values)。但此时也存在一个缺点,就是正常的文件内容中也可能出现逗号或者制表符。

      所以 Hive 默认使用了几个平时很少出现的字符,这些字符一般不会作为内容出现在文件中。Hive 默认的行和列分隔符如下表所示。

    分隔符描述
    对于文本文件来说,每行是一条记录,所以可以使用换行符来分割记录
    ^A (Ctrl+A) 分割字段 (列),在 CREATE TABLE 语句中也可以使用八进制编码 01 来表示
    ^B 用于分割 ARRAY 或者 STRUCT 中的元素,或者用于 MAP 中键值对之间的分割, 在 CREATE TABLE 语句中也可以使用八进制编码 02 表示
    ^C 用于 MAP 中键和值之间的分割,在 CREATE TABLE 语句中也可以使用八进制编码 03 表示

    使用示例如下:

    CREATE TABLE page_view(viewTime INT, userid BIGINT)
     ROW FORMAT DELIMITED
       FIELDS TERMINATED BY '01'
       COLLECTION ITEMS TERMINATED BY '02'
       MAP KEYS TERMINATED BY '03'
     STORED AS SEQUENCEFILE;

     存储格式

     -支持的存储格式

    格式说明
    TextFile 存储为纯文本文件。 这是 Hive 默认的文件存储格式。这种存储方式数据不做压缩,磁盘开销大,数据解析开销大。
    SequenceFile SequenceFile 是 Hadoop API 提供的一种二进制文件,它将数据以<key,value>的形式序列化到文件中。这种二进制文件内部使用 Hadoop 的标准的 Writable 接口实现序列化和反序列化。它与 Hadoop API 中的 MapFile 是互相兼容的。Hive 中的 SequenceFile 继承自 Hadoop API 的 SequenceFile,不过它的 key 为空,使用 value 存放实际的值,这样是为了避免 MR 在运行 map 阶段进行额外的排序操作。
    RCFile RCFile 文件格式是 FaceBook 开源的一种 Hive 的文件存储格式,首先将表分为几个行组,对每个行组内的数据按列存储,每一列的数据都是分开存储。
    ORC Files ORC 是在一定程度上扩展了 RCFile,是对 RCFile 的优化。
    Avro Files Avro 是一个数据序列化系统,设计用于支持大批量数据交换的应用。它的主要特点有:支持二进制序列化方式,可以便捷,快速地处理大量数据;动态语言友好,Avro 提供的机制使动态语言可以方便地处理 Avro 数据。
    Parquet Parquet 是基于 Dremel 的数据模型和算法实现的,面向分析型业务的列式存储格式。它通过按列进行高效压缩和特殊的编码技术,从而在降低存储空间的同时提高了 IO 效率。

    -指定存储格式

    通常在创建表的时候使用 STORED AS 参数指定:

    CREATE TABLE page_view(viewTime INT, userid BIGINT)
     ROW FORMAT DELIMITED
       FIELDS TERMINATED BY '01'
       COLLECTION ITEMS TERMINATED BY '02'
       MAP KEYS TERMINATED BY '03'
     STORED AS SEQUENCEFILE;

    各个存储文件类型指定方式如下:

    • STORED AS TEXTFILE

    • STORED AS SEQUENCEFILE

    • STORED AS ORC

    • STORED AS PARQUET

    • STORED AS AVRO

    • STORED AS RCFILE

     参考资料: 

        1. Hive Getting Started

        2.LanguageManual DDL

        3.LanguageManual Types

     系列传送门

  • 相关阅读:
    对REST的理解
    longest-repeating-character-replacement(难)
    reconstruct-original-digits-from-english(好)
    third-maximum-number
    【好】strong-password-checker,我自己做出来的:)
    arithmetic-slices
    [poj 3159]Candies[差分约束详解][朴素的考虑法]
    POJ 2773 Happy 2006
    MySql安装(rpm)和启动配置
    [51daifan]来吧,一起书写51daifan的成长史吧-让一部分人先安全起来
  • 原文地址:https://www.cnblogs.com/shun7man/p/11820830.html
Copyright © 2011-2022 走看看