Hive学习笔记(四) 数据类型,存储格式,数据压缩


数据类型

常用基本数据类型

int。float,double,string,timestamp

复杂数据类型

结构体类型

类似java的对象,用法:
字段名,属性名
eg:
对于数据:

1,xm,xm:18
2,xw,xw:18

建表:

CREATE TABLE IF NOT EXISTS db_hive.tbs_struct
(
    id int,
    name string,
    s1 struct<sname:string,sage:int>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY  ':'

导入数据

LOAD DATA LOCAL INPATH '/opt/datas/t02.txt' INTO TABLE db_hive.tbs_struct;

查询:

select id,name,s1.sname from db_hive.tbs_struct;

数组类型

用法:字段[下标]

数据:

1,xw,mysql:hadoop:hive
2,xl,java:oracle

建表:

CREATE TABLE db_hive.tbs_arr
(
    id int,
    name string,
    a1 array<string>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY ':'

导入数据:

LOAD DATA LOCAL INPATH '/opt/datas/t03.txt' INTO TABLE db_hive.tbs_arr

查询

select id,name,a1[0] from db_hive.tbs_arr;

存储格式

Hive底层数据是以hdfs文件的形式存储在Hadoop上的,选择一个合适的存储格式以及压缩方式,是对Hive一种优化。不同存储格式,代表着存储方式不同,同时对性能体现也有很大的不同。

TEXTFILE

TEXTFile为默认格式,不做压缩,磁盘开销大,数据解析开销大,不支持分片

SEQUENCEFILE

以Key-value形式序列化到文件中,不常用。

RCFILE

行列存储相结合的存储方式,被ORCFile取代。

ORC★

一种行列存储相结合的存储方式,支持压缩(eg:snappy),磁盘开销小,查询速度提升。

PARQUET★

PARQUET是面向分析型的列式存储格式,且为二进制,不能直接查看读取,所以PARQUET文件是自解析,支持压缩(snappy压缩与lzo压缩)。

JSONFile 常用

是特殊文本,以JSON格式存储,类似TEXTFILE,HIVE4.0以上版本支持,低版本的HIVE需要引入JAR包。


行式存储与列式存储



行式存储:TEXTFile,JSON,SEQUENCEFILE
列式存储:RCFile,ORC,PARQUET

行式与列式使用场景

当查询结果为一整行时,行存储效率高一些;当查询表中某几个列时,列存储效率高。同时,列存储压缩更高。

选择存储格式的语句

JSON类型(从外部导入数据):

  1. 准备json格式的数据
  2. (hive4.0版本以下)准备jar包json-serde-1.3.8-jar-with-dependencies.jar,上传至hive的lib目录与hadoop的./share/hadoop/mapreduce目录下,并添加环境变量
  3. 创建表

    CREATE EXTERNAL TABLE db_hive.nginx_access_log_json
    (
     http_user_agent STRING,
     url_path STRING,
     remote_addr STRING,
     type STRING,
     method STRING,
     host STRING,
     version STRING,
     remote_user STRING,
     body_bytes_sent STRING,
     status int,
     path STRING,
     timestamps STRING,
     request STRING
    )
    ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
    STORED AS TEXTFILE 
    LOCATION '/user/skadmin/datas/nginx' ;
  4. 上传数据到hdfs目录

    dfs -put /opt/datas/ac1.json /user/skadmin/datas/nginx

ORC格式(从已有的外部表中导入)

CREATE TABLE IF NOT EXISTS db_hive.nginx_access_log_orc
STORED AS ORC
AS SELECT * FROM db_hive.nginx_access_log_json;

PARQUET格式(从已有的表中导入)

虚拟机中需要从ORC格式存储的表中导入数据,如果从JSON格式存储的表中导数据会爆内存。
CREATE TABLE IF NOT EXISTS db_hive.nginx_access_log_parquet
STORED AS PARQUET 
AS SELECT * FROM db_hive.nginx_access_log_json_orc ;

总结

  • 使用json格式存储需要第三方包(低版本),磁盘开销大
  • 使用ORC和PARQUET格式,磁盘开销明显变小,同时查询速度加快
  • ORC和PARQUET格式的数据导入需要使用CREATE TABLE AS SELECT方式

数据压缩

数据压缩的优缺点:

优点

  1. 减少存储磁盘空间
  2. 降低磁盘IO
  3. 压缩后数据占用带宽更少
  4. 增加数据在hadoop集群中流动的速度

缺点

压缩和解压缩在hive分析时,都需要花费额外的时间。

压缩格式对比



技术选型原则

  1. 压缩比:压缩比越低,文件越小,所以压缩比越低越好(gzip,bzip2)
  2. 压缩和解压缩时间:越快越好(lzo,snappy)
  3. 能否被分割:能被分割,则可以被多个MR并行处理;不能被分割,只能单个MR处理。所以能被分割最好(lzo)。
    因此常用snappy和lzo压缩格式

声明:奋斗小刘|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - Hive学习笔记(四) 数据类型,存储格式,数据压缩


Make Everyday Count