Hive主要有几种存储格式&压缩方式

Hive 支持多种存储格式压缩方式,它们可以独立配置,通过合理组合可以显著提升查询性能和存储效率。


✅ 一、Hive 存储格式

1. TEXTFILE(默认格式)

CREATE TABLE text_table (
  id STRING,
  name STRING
)
STORED AS TEXTFILE;
  • 特点:纯文本,行存
  • 优点:兼容性好,便于查看
  • 缺点:无压缩,查询性能差
  • 适用:数据导入导出、临时表

2. SEQUENCEFILE

CREATE TABLE seq_table (
  id STRING,
  name STRING
)
STORED AS SEQUENCEFILE;
  • 特点:二进制格式,键值对存储
  • 优点:支持压缩,适合 MapReduce
  • 缺点:Hive 优化有限
  • 适用:MapReduce 作业中间结果

3. RCFILE(Record Columnar File)

CREATE TABLE rcfile_table (
  id STRING,
  name STRING
)
STORED AS RCFILE;
  • 特点:行列混合存储
  • 优点:压缩率较好,查询性能优于 TEXTFILE
  • 缺点:写性能差,已被 ORC 替代
  • 适用:已过时,不推荐

4. ORC(Optimized Row Columnar)

CREATE TABLE orc_table (
  id STRING,
  name STRING
)
STORED AS ORC
TBLPROPERTIES (
  "orc.compress"="ZSTD",
  "orc.create.index"="true"
);
  • 特点:列式存储,专为 Hive 优化
  • 优点
    • ✅ 高压缩比
    • ✅ 内置索引(Bloom Filter、统计信息)
    • ✅ 支持谓词下推
    • ✅ 向量化执行
  • 适用推荐用于分析场景

5. PARQUET

CREATE TABLE parquet_table (
  id STRING,
  name STRING
)
STORED AS PARQUET
TBLPROPERTIES (
  "parquet.compression"="SNAPPY"
);
  • 特点:列式存储,跨平台支持
  • 优点
    • ✅ 高压缩比
    • ✅ 支持复杂嵌套类型
    • ✅ 与 Spark、Presto 等兼容性好
  • 适用推荐用于跨引擎场景

6. AVRO

CREATE TABLE avro_table (
  id STRING,
  name STRING
)
STORED AS AVRO
TBLPROPERTIES (
  'avro.schema.literal'='{
    "type": "record",
    "name": "test",
    "fields": [
      {"name":"id", "type":"string"},
      {"name":"name", "type":"string"}
    ]
  }'
);
  • 特点:支持 Schema 演化
  • 优点:Schema 兼容性好,适合流式数据
  • 适用:Kafka 流式数据存储

✅ 二、Hive 压缩方式

1. GZIP

SET hive.exec.compress.output=true;
SET mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.GzipCodec;
  • 压缩比:高(约 3:1)
  • 速度:压缩慢,解压中等
  • 切分:不支持(影响并行度)

2. BZIP2

SET mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.BZip2Codec;
  • 压缩比:最高(约 4:1)
  • 速度:压缩解压都很慢
  • 切分:支持

3. SNAPPY

SET mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;
  • 压缩比:中等(约 2:1)
  • 速度:压缩解压都很快
  • 切分:不支持

4. LZO

-- 需要额外安装 LZO 库
SET mapreduce.output.fileoutputformat.compress.codec=com.hadoop.compression.lzo.LzoCodec;
  • 压缩比:中等
  • 速度:快
  • 切分:支持(需要创建索引)

5. ZSTD(Zstandard)

SET mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.ZStandardCodec;
  • 压缩比:高(接近 GZIP)
  • 速度:压缩解压都快
  • 切分:不支持

✅ 三、存储格式 + 压缩方式的最佳实践

1. 分析场景(推荐)

-- ORC + ZSTD/SNAPPY
CREATE TABLE analytics_table (
  user_id STRING,
  action STRING,
  ts TIMESTAMP
)
PARTITIONED BY (dt STRING)
STORED AS ORC
TBLPROPERTIES (
  "orc.compress"="ZSTD",           -- 高压缩比
  "orc.create.index"="true",       -- 创建索引
  "orc.bloom.filter.columns"="user_id"  -- 布隆过滤器
);

2. 跨引擎场景

-- PARQUET + SNAPPY
CREATE TABLE cross_engine_table (
  user_id STRING,
  action STRING
)
STORED AS PARQUET
TBLPROPERTIES (
  "parquet.compression"="SNAPPY"   -- 快速解压
);

3. 日志场景

-- ORC + SNAPPY(平衡性能和压缩)
CREATE TABLE log_table (
  log_time TIMESTAMP,
  user_id STRING,
  action STRING
)
PARTITIONED BY (dt STRING, hour STRING)
STORED AS ORC
TBLPROPERTIES (
  "orc.compress"="SNAPPY",
  "orc.stripe.size"="67108864"    -- 64MB 条带
);

✅ 四、性能对比总结

存储格式压缩比查询性能写入性能适用场景
TEXTFILE临时表
ORC✅ 高✅ 优秀推荐分析
PARQUET✅ 高✅ 优秀推荐跨引擎
SEQUENCEFILEMapReduce 中间结果
压缩方式压缩比压缩速度解压速度切分支持
SNAPPY✅ 快✅ 快
ZSTD✅ 高✅ 快✅ 快
GZIP✅ 高
BZIP2最高很慢很慢

✅ 五、配置建议

1. 全局压缩设置

-- 输出压缩
SET hive.exec.compress.output=true;
SET hive.exec.compress.intermediate=true;

-- 向量化执行
SET hive.vectorized.execution.enabled=true;

2. 文件合并优化

-- 避免小文件
SET hive.merge.mapfiles=true;
SET hive.merge.mapredfiles=true;
SET hive.merge.size.per.task=256000000;  -- 256MB

📌 总结

推荐场景存储格式压缩方式理由
数据分析ORCZSTD/SNAPPY最优性能
跨引擎PARQUETSNAPPY兼容性好
日志存储ORCSNAPPY查询快

💡 核心建议ORC + ZSTD/SNAPPY 是 Hive 分析场景的黄金组合,PARQUET + SNAPPY 适合跨引擎场景。选择时需平衡压缩比、查询性能、存储成本三个维度。

本课题设计了一种利用Matlab平台开发的植物叶片健康状态识别方案,重点融合了色彩与纹理双重特征以实现对叶片病害的自动化判别。该系统构建了直观的图形操作界面,便于用户提交叶片影像并快速获得分析结论。Matlab作为具备高效数值计算与数据处理能力的工具,在图像分析与模式分类领域应用广泛,本项目正是借助其功能解决农业病害监测的实际问题。 在色彩特征分析方面,叶片影像的颜色分布常与其生理状态密切相关。通常,健康的叶片呈现绿色,而出现黄化、褐变等异常色彩往往指示病害或虫害的发生。Matlab提供了一系列图像处理函数,例如可通过色彩空间转换与直方图统计来量化颜色属性。通过计算各颜色通道的统计参数(如均值、标准差及主成分等),能够提取具有判别力的色彩特征,从而为不同病害类别的区分提供依据。 纹理特征则用于描述叶片表面的微观结构与形态变化,如病斑、皱缩或裂纹等。Matlab中的灰度共生矩阵计算函数可用于提取对比度、均匀性、相关性等纹理指标。此外,局部二值模式与Gabor滤波等方法也能从多尺度刻画纹理细节,进一步增强病害识别的鲁棒性。 系统的人机交互界面基于Matlab的图形用户界面开发环境实现。用户可通过该界面上传待检图像,系统将自动执行图像预处理、特征抽取与分类判断。采用的分类模型包括支持向量机、决策树等机器学习方法,通过对已标注样本的训练,模型能够依据新图像的特征向量预测其所属的病害类别。 此类课题设计有助于深化对Matlab编程、图像处理技术与模式识别原理的理解。通过完整实现从特征提取到分类决策的流程,学生能够将理论知识与实际应用相结合,提升解决复杂工程问题的能力。总体而言,该叶片病害检测系统涵盖了图像分析、特征融合、分类算法及界面开发等多个技术环节,为学习与掌握基于Matlab的智能检测技术提供了综合性实践案例。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

走过冬季

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值