首页 > 其他分享 >摸鱼大数据——Hive调优1-3

摸鱼大数据——Hive调优1-3

时间:2024-06-08 12:58:35浏览次数:8  
标签:log -- compress Hive 调优 hive 摸鱼 orc string

hive官方配置url: Configuration Properties - Apache Hive - Apache Software Foundation

1、调优方式

hive参数配置的意义: 开发Hive应用/调优时,不可避免地需要设定Hive的参数。设定Hive的参数可以调优HQL代码的执行效率,或帮助定位问题。然而实践中经常遇到的一个问题是,为什么我设定的参数没有起作用?这是对hive参数配置几种方式不了解导致的!
​
hive参数设置范围(从大到小): 配置文件 > 命令行参数 > set参数声明
hive参数设置优先级(从高优先级到低优先级): set参数声明 > 命令行参数 > 配置文件
​
注意: 在工作中,推荐使用set参数声明,因为最简单最方便。而且同一个大数据集群除了你了还有其他的人或者项目组在使用。

2、hive数据压缩

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

2.1 压缩对比

在后续可能会使用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.

2.2 开启压缩

开启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;

3、hive数据存储

3.1 行列存储原理

行存储的特点: 将数据以行的形式整体进行存放
列存储的特点: 将相同字段的值作为整体放在一起进行存放

行存储:
    优点: 如果要查询整行数据内容,速度比较快。适合进行数据的insert/update操作
    缺点: 如果数据分析的时候,只想针对某几个字段进行处理,那么这个效率低。因为会将不需要的字段内容也会加载出来
    使用: textfile和sequencefile
    
列存储: 
    优点: 如果数据分析的时候,只想针对某几个字段进行处理,那么效率高,因为你要什么,我就给你返回什么
    缺点: 如果要查询整行数据内容,速度比较慢。不适合进行数据的insert/update操作
    使用: orc和parquet。推荐使用orc
    
注意: 在工作中推荐ORC+Snappy压缩一起使用,更加能够减少HDFS的磁盘占用。
格式:
    stored as orc -- 设置数据的存储格式
    tblproperties ("orc.compress"="SNAPPY"); -- 设置数据的压缩格式

ORC原理图

3.2 存储压缩比
-- 数据的存储和压缩方式
-- textfile:占用空间18.13 MB(如果是HDFS需要乘以3)
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存储
​
-- 导入数据
load data inpath '/dir/log.data' into table log_text;
​
-- 数据验证
select * from log_text;
select count(*) as cnt from log_text;
​
-- 列式存储:ORC,占用空间2.78 MB
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;
​
-- 加载数据
insert overwrite table log_orc select * from log_text;
select count(*) as cnt from log_orc;
​
-- 列式存储:ORC+snappy。占用空间3.75 MB,这里相对ORC反而多占用了1MB空间,是因为数据量太小,同时压缩以后,压缩文件里面需要存储和压缩相关元数据信息(例如:使用的压缩算法具体是哪一个)
-- https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL
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"); -- 设置数据的压缩格式
​
-- 加载数据
insert overwrite table log_orc_snappy select * from log_text;
select count(*) as cnt from log_orc_snappy;
​
-- 列式存储:parquet。占用空间13.09MB
create table log_orc_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 overwrite table log_orc_parquet select * from log_text;
select count(*) as cnt from log_orc_parquet;

拓展dfs -du -h

-- 查看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' ;

标签:log,--,compress,Hive,调优,hive,摸鱼,orc,string
From: https://blog.csdn.net/weixin_65694308/article/details/139298283

相关文章

  • hive性能优化系列-distinct-有限key
    案例方式1使用groupbyselects_age,count(1)from(selects_agefromstudent_tb_orcgroupbys_age)b方式2使用distinctselects_age,count(distincts_age)fromstudent_tb_orc分析数据量特别大方式1的代码在数据量特别大的情况下能够有效避免Reduce端的数据......
  • Spark读取http数据写入hive
    http请求hutool,json转换数据写入到rdd,之后转换为sparksqlSparkSessionspark=SparkSession.builder().master("yarn").appName("json2hive").config("hive.exec.dynamic.partition","true").config("......
  • Hive3.1.2概述与基本操作
    、Hive基本概念1.1 Hive简介Hive本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据存储,说白了hive可以理解为一个将SQL转换为MapReduce的任务的工具,甚至更近一步说hive就是一个MapReduce客户端。为什么使用Hive?如果直接使用hadoop的话,人员学习成本太高,项目要......
  • Hive3.1.2分区与排序(内置函数)
    1、Hive分区(十分重要!!)分区的目的:避免全表扫描,加快查询速度!在大数据中,最常见的一种思想就是分治,我们可以把大的文件切割划分成一个个的小的文件,这样每次操作一个个小的文件就会很容易了,同样的道理,在hive当中也是支持这种思想的,就是我们可以把大的数据,按照每天或者每小时切分......
  • hive-3.1.2分布式搭建
    hive-3.1.2分布式搭建文档谷歌浏览器下载网址:GoogleChrome–Downloadthefast,securebrowserfromGoogle华为云镜像站:https://mirrors.huaweicloud.com/home1、上传解压配置环境变量#1、解压tar-zxvfapache-hive-3.1.2-bin.tar.gz-C/usr/local/s......
  • hive概述与基础操作
    Hive3.1.2概述与基本操作(此笔记使用MD文档写的,可直接复制到MD中,方便查看)1、Hive基本概念1.1 Hive简介Hive本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据存储,说白了hive可以理解为一个将SQL转换为MapReduce的任务的工具,甚至更近一步说hive就是一个MapReduce......
  • Kettle调优教程(推荐收藏)
    1、调整JVM大小linux文件路径:data-integration/spoon.sh windows路径: -Xms1024m:设置JVM初始内存为1024m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。-Xmx2048m:设置JVM最大可用内存为2048M。-Xmn2g:设置年轻代大小为2G。整个JVM内存大小=年轻代大小......
  • 【数据库】StarRocks、Hive、ClickHouse、Tidb的对比及使用场景
    特性StarRocksHiveClickHouseTiDB数据存储列存储(ColumnarStorage)行存储(RowStorage)列存储(ColumnarStorage)混合存储(行存储和列存储)查询性能高低高高主要用途实时分析(Real-timeAnalytics)大数据批处理(BatchProcessing)实时分析(Real-timeAnalytics)OLTP与O......
  • 7 | 史上最全大数据笔记-Hive函数
    第八章Hive函数在Hive中,函数主要分两大类型,一种是内置函数,一种是用户自定义函数。8.1Hive内置函数8.1.1函数查看 showfunctions; descfunctionfunctionName;8.1.2日期函数1)当前系统时间函数:current_date()、current_timestamp()、unix_timestamp() --函......
  • JVM调优知识及实践:提升Java程序性能的艺术
    引言:在Java开发中,我们经常遇到程序运行缓慢、响应时间长、内存占用高等问题。这些问题往往与Java虚拟机(JVM)的性能配置和调优相关。JVM调优是Java程序员必须掌握的一项技能,它能够帮助我们优化程序性能,提高系统稳定性。本文将介绍JVM调优的基本知识,并结合实践案例,分享一些调......