• 2023.11.17 -hivesql调优,数据压缩,数据存储


    目录

    1.hive命令和参数配置

    2.hive数据压缩

    3.hive数据存储

    0.原文件大小  18.1MB

    1.textfile行存储格式, 压缩后size:18MB

    2.行存储格式:squencefile ,压缩后大小8.89MB​

    3. 列存储格式 orc - ZILIB ,压缩后大小2.78MB

     4.列存储格式  orc-snappy  ,压缩后大小3.75MB

    5.列存储格式之parquets ,压缩后大小13.09MB 

     4.在linux中查看文件大小的命令


    1.hive命令和参数配置


    hive参数设置范围 : 配置文件参数 >   命令行参数  >   set参数声明

    hive参数设置优先级: set参数声明  >   命令行参数   >  配置文件参数

    注意: 一般执行SQL需要指定的参数, 都是通过 set参数声明 方式进行配置,因为它属于当前会话的临时设置,断开后就失效了

     2.hive数据压缩

    ==Hive底层是运行MapReduce,所以Hive支持什么压缩格式本质上取决于MapReduce。==

    在后续可能会使用GZ(GZIP), 保证压缩后的数据更小, 同时压缩和解压的速度比较OK的,

    但是大部分的选择主要会选择另一种压缩方案, snappy, 此种方案可以保证在合理的压缩比下, 拥有更高的解压缩的速度

    snappy | A fast compressor/decompressor On a single core of a Core i7 processor in 64-bit mode, Snappy compresses at about 250 MB/sec or more and decompresses at about 500 MB/sec or more.

     

    开启压缩

    1. create database hive6;
    2. use hive6;
    3. -- 开启压缩(map阶段或者reduce阶段)
    4. --开启hive支持中间结果的压缩方案
    5. set hive.exec.compress.intermediate; -- 查看默认
    6. set hive.exec.compress.intermediate=true ;
    7. --开启hive支持最终结果压缩
    8. set hive.exec.compress.output; -- 查看默认
    9. set hive.exec.compress.output=true;
    10. --开启MR的map端压缩操作
    11. set mapreduce.map.output.compress; -- 查看默认
    12. set mapreduce.map.output.compress=true;
    13. --设置mapper端压缩的方案
    14. set mapreduce.map.output.compress.codec; -- 查看默认
    15. set mapreduce.map.output.compress.codec= org.apache.hadoop.io.compress.SnappyCodec;
    16. -- 开启MR的reduce端的压缩方案
    17. set mapreduce.output.fileoutputformat.compress; -- 查看默认
    18. set mapreduce.output.fileoutputformat.compress=true;
    19. -- 设置reduce端压缩的方案
    20. set mapreduce.output.fileoutputformat.compress.codec; -- 查看默认
    21. set mapreduce.output.fileoutputformat.compress.codec = org.apache.hadoop.io.compress.SnappyCodec;
    22. --设置reduce的压缩类型
    23. set mapreduce.output.fileoutputformat.compress.type; -- 查看默认
    24. set mapreduce.output.fileoutputformat.compress.type=BLOCK;

    3.hive数据存储

    行存储的特点: 查询满足条件的一整行数据的时候,列存储则需要去每个聚集的字段找到对应的每个列的值,行存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询的速度更快。
    列存储的特点: 因为每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量;每个字段的数据类型一定是相同的,列式存储可以针对性的设计更好的设计压缩算法。

    行存储: textfile和squencefile
        优点: 每行数据连续存储              select * from 表名; 查询速度相对较快
        缺点: 每列类型不一致,空间利用率不高   select 列名 from 表名; 查询速度相对较慢


    列存储: orc(zlib,snappy)和parquet
        优点: 每列数据连续存储         select 列名 from 表名;  查询速度相对较快
        缺点: 因为每行数据不是连续存储  select * from 表名;查询速度相对较慢
        
    注意: ORC文件格式的数据, 默认内置一种压缩算法:zlib , 在实际生产中一般会将ORC压缩算法替换为 snappy使用,格式为: STORED AS orc tblproperties ("orc.compress"="SNAPPY") 

    0.原文件大小  18.1MB

     

    1.textfile行存储格式, 压缩后size:18MB

    1. --存储压缩比
    2. -- 存储格式应用对比
    3. -- 演示textfile行存储格式: 18.1 m
    4. create table log_text (
    5. track_time string,
    6. url string,
    7. session_id string,
    8. referer string,
    9. ip string,
    10. end_user_id string,
    11. city_id string
    12. )
    13. ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
    14. STORED AS TEXTFILE ; -- TEXTFILE当前默认的,可以省略
    15. -- 查询数据
    16. select * from log_text;

    压缩后size:18MB ,原封不动

     

     2.行存储格式:squencefile ,压缩后大小8.89MB

     压缩后大小8.89MB

    1. create table log_text_sequen (
    2. track_time string,
    3. url string,
    4. session_id string,
    5. referer string,
    6. ip string,
    7. end_user_id string,
    8. city_id string
    9. )
    10. ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
    11. STORED AS sequencefile ;
    12. -- 加载数据(先上传数据文件到根目录)
    13. insert into table log_text_sequen select * from log_text;
    14. -- 查询数据
    15. select * from log_text_sequen ;

    3. 列存储格式 orc - ZILIB ,压缩后大小2.78MB

    /*ORC文件格式的数据, 默认内置一种压缩算法:ZLIB , 在实际生产中一般会将ORC压缩算法替换为 snappy
    格式为: STORED AS orc tblproperties ("orc.compress"="SNAPPY") */

    1. create table log_orc_zlib(
    2. track_time string,
    3. url string,
    4. session_id string,
    5. referer string,
    6. ip string,
    7. end_user_id string,
    8. city_id string
    9. )
    10. ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
    11. STORED AS orc ;-- 默认内置一种压缩算法:ZLIB
    12. -- 加载数据(先上传数据文件到根目录,可以)
    13. insert into table log_orc_zlib select * from log_text; --24s 726ms size 2.78MB
    14. --回到HDFS中查看,原来18MB的文件,在算法压缩后,变成2.78MB,压缩后在hdfs中查看是乱码
    15. -- 查询数据
    16. select * from log_orc_zlib;

    压缩后大小2.78MB 

     

     4.列存储格式  orc-snappy  ,压缩后大小3.75MB

    /*ORC文件格式的数据, 默认内置一种压缩算法:ZLIB , 在实际生产中一般会将ORC压缩算法替换为 snappy
    格式为: STORED AS orc tblproperties ("orc.compress"="SNAPPY") */

    1. -- [重点orc配合snappy]
    2. -- 演示orc列存储(指定snappy): 3.75 m
    3. create table log_orc_snappy(
    4. track_time string,
    5. url string,
    6. session_id string,
    7. referer string,
    8. ip string,
    9. end_user_id string,
    10. city_id string
    11. )
    12. ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
    13. STORED AS orc tblproperties ("orc.compress"="SNAPPY"); -- 配合SNAPPY压缩
    14. -- 加载数据(先上传数据文件到根目录)
    15. insert into table log_orc_snappy select * from log_text;
    16. -- 查询数据
    17. select * from log_orc_snappy;

    5.列存储格式之parquets ,压缩后大小13.09MB 

    1. -- 演示parquet压缩存储:13.09 m
    2. create table log_parquet(
    3. track_time string,
    4. url string,
    5. session_id string,
    6. referer string,
    7. ip string,
    8. end_user_id string,
    9. city_id string
    10. )
    11. ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
    12. STORED AS PARQUET ;
    13. -- 加载数据(先上传数据文件到根目录)
    14. insert into table log_parquet select * from log_text;
    15. -- 查询数据
    16. select * from log_parquet;

    压缩后大小13.9MB 

     

     4.在linux中查看文件大小的命令

    查看文件大小的hdfs dfs -du -h '路径';

    [root@node1 ~]# hdfs dfs -du -h '/user/hive/warehouse/hive6.db/log_text/log.data' ;
    18.1 M  54.4 M  /user/hive/warehouse/hive6.db/log_text/log.data
     

    [root@node1 ~]# hdfs dfs -du -h '/user/hive/warehouse/hive6.db/log_orc_zlib/000000_0';
    2.8 M  8.3 M  /user/hive/warehouse/hive6.db/log_orc_zlib/000000_0
     

  • 相关阅读:
    百度提出动态自蒸馏方法,结合交互模型与双塔模型实现稠密段落检索
    mysql数据库日志
    精通代码复用:设计原则与最佳实践
    【深度学习】解析Vision Transformer (ViT): 从基础到实现与训练
    MySQL主从复制最全教程(CentOS7 yum)
    计算机体系结构:不同方案的机器性能比较例题(1.6)
    【python量化交易】qteasy使用教程02 - 获取和管理金融数据
    戴尔PowerEdge服务器R450装centos7步骤
    网络通信基础
    深度强化学习(一)常识性普及
  • 原文地址:https://blog.csdn.net/m0_49956154/article/details/134444484