• Hive数据类型与文件存储格式


    Hive数据类型

    基础数据类型:

    TINYINT,SMALLINT,INT,BIGINT,BOOLEAN,FLOAT,DOUBLE,STRING,BINARY,TIMESTAMP,DECIMAL,CHAR,VARCHAR,DATE。

    复杂数据类型:

    包括ARRAY,MAP,STRUCT,UNION。这些复杂类型是由基础类型组成的。

    ARRAY:ARRAY类型是由一系列同样数据类型元素组成的,这些元素能够通过下标来訪问。比方有一个ARRAY类型的变量fruits。它是由[‘apple’,’orange’,’mango’]组成,那么能够通过fruits[1]来訪问orange;

    MAP:MAP包括key->value键值对。能够通过key来訪问元素。比方”userlist”是一个map类型(当中username是key。password是value),那么我们能够通过userlist[‘username’]来得到这个用户相应的password;
    STRUCT:STRUCT能够包括不同数据类型的元素。

    这些元素能够通过点的方式来得到,比方user是一个STRUCT类型,那么能够通过user.address得到这个用户的地址。


    UNION: UNIONTYPE

    基本类型转换

    注:因为表格比較大。这里对一些比較长的字符串进行缩写,ts是timestamp的缩写,bl是boolean的缩写,sl是smallint的缩写,dm是decimal的缩写,vc是varchar的缩写,ba是binary的缩写。

    Hive文件格式

    文件格式

    textfile:文本文件

    Hive默认格式,数据不做压缩,磁盘开销大,数据解析开销大。
    可结合Gzip、Bzip2、Snappy等使用(系统自己主动检查,执行查询时自己主动解压),但使用这样的方式。hive不会对数据进行切分。从而无法对数据进行并行操作。

    Sequencefile:二进制文件

    SequenceFile是Hadoop API 提供的一种二进制文件,它将数据(key,value)的形式序列化到文件里。
    这样的二进制文件内部使用Hadoop 的标准的Writable 接口实现序列化和反序列化。它与Hadoop API中的MapFile 是互相兼容的。
    Hive 中的SequenceFile 继承自Hadoop API 的SequenceFile,只是它的key为空。使用value 存放实际的值。 这样是为了避免MR 在执行map 阶段的排序过程。

    Rcfile:

    RCFile是Hive推出的一种专门面向列的数据格式。

    它遵循“先按列划分。再垂直划分”的设计理念。


    当查询过程中,针对它并不关心的列时,它会在IO上跳过这些列。须要说明的是。RCFile在map阶段从远端拷贝仍然是拷贝整个数据块,而且复制到本地文件夹后,RCFile并非真正直接跳过不须要的列,并跳到须要读取的列, 而是通过扫描每个row group的头部定义来实现的。
    可是在整个HDFS Block 级别的头部并未定义每个列从哪个row group起始到哪个row group结束。所以在读取全部列的情况下。RCFile的性能反而没有SequenceFile高。

    行存储、列存储以及RCFile方式存储

    行存储
    HDFS块内行存储的样例

    基于Hadoop系统行存储结构的长处在于高速数据载入和动态负载的高适应能力,这是因为行存储保证了同样记录的全部域都在同一个集群节点,即同一个 HDFS块。
    只是,行存储的缺点也是显而易见的。比如它不能支持高速查询处理,因为当查询只针对多列表中的少数几列时。它不能跳过不必要的列读取;此外,因为混合着不同数据值的列,行存储不易获得一个极高的压缩比,即空间利用率不易大幅提高。

    列存储
    HDFS块内列存储的样例

    在HDFS上依照列组存储表格的样例。

    在这个样例中。列A和列B存储在同一列组,而列C和列D分别存储在单独的列组。查询时列存储能够避免读不必要的列。 而且压缩一个列中的类似数据能够达到较高的压缩比。
    然而,因为元组重构的较高开销,它并不能提供基于Hadoop系统的高速查询处理。列存储不能保证同一记录的全部域都存储在同一集群节点,行存储的样例中。记录的4个域存储在位于不同节点的3个HDFS块中。
    因此,记录的重构将导致通过集群节点网络的大量传输数据。虽然预先分组后,多个列在一起能够降低开销,可是对于高度动态的负载模式。它并不具备非常好的适应性。

    RCFile存储方式
    HDFS块内RCFile存储的样例

    RCFile结合行存储查询的高速和列存储节省空间的特点。
    首先。RCFile保证同一行的数据位于同一节点。因此元组重构的开销非常低。其次,像列存储一样,RCFile能够利用列维度的数据压缩,而且能跳过不必要的列读取。

    扩展接口

    默认的文件读取方式
    自己定义inputformat
    自己定义serde

  • 相关阅读:
    JSP(一)
    设计模式之UML类图
    Servle原理
    Servlet 浅谈(三)
    Servlet 浅谈(二)
    Servlet 浅谈(一)
    闲聊
    设计模式之装饰器模式
    struts2源码调试环境的搭建
    Github学习
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/7255509.html
Copyright © 2020-2023  润新知