赞
踩
hive官方配置url: Configuration Properties - Apache Hive - Apache Software Foundation
hive参数配置的意义: 开发Hive应用/调优时,不可避免地需要设定Hive的参数。设定Hive的参数可以调优HQL代码的执行效率,或帮助定位问题。然而实践中经常遇到的一个问题是,为什么我设定的参数没有起作用?这是对hive参数配置几种方式不了解导致的! hive参数设置范围 : 配置文件参数 > 命令行参数 > set参数声明 hive参数设置优先级: set参数声明 > 命令行参数 > 配置文件参数 注意: 一般执行SQL需要指定的参数, 都是通过 set参数声明 方式进行配置,因为它属于当前会话的临时设置,断开后就失效了
==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.
开启map输出阶段压缩可以减少job中map和Reduce task间数据传输量. 当Hive将输出写入到表中时,输出内容同样可以进行压缩。用户可以通过在查询语句或执行脚本中设置这个值为true,来开启输出结果压缩功能。
- -- 创建数据库
- create database hive05;
- -- 使用库
- use hive05;
-
-
- -- 开启压缩(map阶段或者reduce阶段)
- --开启hive支持中间结果的压缩方案
- set hive.exec.compress.intermediate; -- 查看默认
- set hive.exec.compress.intermediate=true ;
- --开启hive支持最终结果压缩
- set hive.exec.compress.output; -- 查看默认
- set hive.exec.compress.output=true;
-
- --开启MR的map端压缩操作
- set mapreduce.map.output.compress; -- 查看默认
- set mapreduce.map.output.compress=true;
- --设置mapper端压缩的方案
- set mapreduce.map.output.compress.codec; -- 查看默认
- set mapreduce.map.output.compress.codec= org.apache.hadoop.io.compress.SnappyCodec;
-
- -- 开启MR的reduce端的压缩方案
- set mapreduce.output.fileoutputformat.compress; -- 查看默认
- set mapreduce.output.fileoutputformat.compress=true;
- -- 设置reduce端压缩的方案
- set mapreduce.output.fileoutputformat.compress.codec; -- 查看默认
- set mapreduce.output.fileoutputformat.compress.codec = org.apache.hadoop.io.compress.SnappyCodec;
- --设置reduce的压缩类型
- set mapreduce.output.fileoutputformat.compress.type; -- 查看默认
- set mapreduce.output.fileoutputformat.compress.type=BLOCK;
行存储的特点: 查询满足条件的一整行数据的时候,列存储则需要去每个聚集的字段找到对应的每个列的值,行存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询的速度更快。 列存储的特点: 因为每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量;每个字段的数据类型一定是相同的,列式存储可以针对性的设计更好的设计压缩算法。 行存储: textfile和squencefile 优点: 每行数据连续存储 select * from 表名; 查询速度相对较快 缺点: 每列类型不一致,空间利用率不高 select 列名 from 表名; 查询速度相对较慢 列存储: orc和parquet 优点: 每列数据连续存储 select 列名 from 表名; 查询速度相对较快 缺点: 因为每行数据不是连续存储 select * from 表名;查询速度相对较慢 注意: ORC文件格式的数据, 默认内置一种压缩算法:zlib , 在实际生产中一般会将ORC压缩算法替换为 snappy使用,格式为: STORED AS orc tblproperties ("orc.compress"="SNAPPY")
- -- 存储格式应用对比
- -- 演示textfile行存储格式: 18.1 m
- create table log_text (
- track_time string,
- url string,
- session_id string,
- referer string,
- ip string,
- end_user_id string,
- city_id string
- )
- ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
- STORED AS TEXTFILE ; -- TEXTFILE当前默认的,可以省略
-
- -- 查询数据
- select * from log_text;
-
-
-
- -- 演示orc列存储(默认zlib): 2.78 m
- create table log_orc(
- track_time string,
- url string,
- session_id string,
- referer string,
- ip string,
- end_user_id string,
- city_id string
- )
- ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
- STORED AS orc ;-- 默认内置一种压缩算法:ZLIB
-
- -- 加载数据(先上传数据文件到根目录)
- insert into table log_orc select * from log_text;
- -- 查询数据
- select * from log_orc;
-
-
- -- [重点orc配合snappy]
- -- 演示orc列存储(指定snappy): 3.75 m
- create table log_orc_snappy(
- track_time string,
- url string,
- session_id string,
- referer string,
- ip string,
- end_user_id string,
- city_id string
- )
- ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
- STORED AS orc tblproperties ("orc.compress"="SNAPPY"); -- 配合SNAPPY压缩
-
- -- 加载数据(先上传数据文件到根目录)
- insert into table log_orc_snappy select * from log_text;
- -- 查询数据
- select * from log_orc_snappy;
-
- /*ORC文件格式的数据, 默认内置一种压缩算法:ZLIB , 在实际生产中一般会将ORC压缩算法替换为 snappy
- 格式为: STORED AS orc tblproperties ("orc.compress"="SNAPPY") */
-
-
-
-
- -- 演示parquet压缩存储:13.09 m
- create table log_parquet(
- track_time string,
- url string,
- session_id string,
- referer string,
- ip string,
- end_user_id string,
- city_id string
- )
- ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
- STORED AS PARQUET ;
-
- -- 加载数据(先上传数据文件到根目录)
- insert into table log_parquet select * from log_text;
- -- 查询数据
- select * from log_parquet;
- -- 查看hdfs文件大小除了去页面查看,还可以通过命令
- dfs -du -h '/user/hive/warehouse/hive05.db/log_text/log.data' ;
- dfs -du -h '/user/hive/warehouse/hive05.db/log_orc/000000_0' ;
- dfs -du -h '/user/hive/warehouse/hive05.db/log_orc_snappy/000000_0' ;
- dfs -du -h '/user/hive/warehouse/hive05.db/log_parquet/000000_0' ;
==核心点: 在执行SQL, 能不走MR, 尽量不走MR==
回想, 在之前执行什么样查询的SQL的时候,没有走MR呢?
1) 全表扫描 2) 查询某个列数据 3) 执行
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。