Hive支持的文件格式与压缩算法

本文详细介绍了Hive中各种文件格式(Textfile、SequenceFile、RCFile、ORCFile、Parquet、Avro)及其对应的压缩算法(DEFLATE、Gzip、bzip2、LZO、LZ4、Snappy等)。通过具体的SQL示例展示了如何设置不同的压缩类型,并解释了压缩文件的可读性和解压方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

只要是配置了正确的文件类型和压缩类型(比如Textfile+Gzip、SequenceFile+Snappy等),Hive都可以按预期读取并解析数据,提供SQL功能。

SequenceFile本身的结构已经设计了内容进行压缩。所以对于SequenceFile文件的压缩,并不是先生成SequenceFile文件,再对文件进行压缩。而是生成SequenceFile文件时,对其中的内容字段进行压缩。最终压缩后,对外仍体现为一个SequenceFile。

RCFile、ORCFile、Parquet、Avro对于压缩的处理方式与SequenceFile相同。

文件格式
  1. Textfile
  2. SequenceFile
  3. RCFile
  4. ORCFile
  5. Parquet
  6. Avro
压缩算法的编解码器
序号压缩格式算法多文件可分割性工具工具压缩后扩展名
1DEFLATEDEFLATE.deflate
2GzipDEFLATEgzip.gz
3bzip2bzip2bzip2.bz2
4LZOLZOlzop.lzo
5LZ4?????????????
6Snappy?????????????
7ZLIB?????????????
8ZIPDEFLATE是,在文件范围内zip.zip

TEXTFILE

文本文件,非压缩
1
2
3
4
5
6
7
8
--创建一个表,格式为文本文件:
CREATE EXTERNAL TABLE student_text (id STRING, name STRING)
ROW FORMAT DELIMITED 
    FIELDS TERMINATED BY ',' 
    LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
--导入数据到此表中,将启动MR任务
INSERT OVERWRITE TABLE student_text SELECT * FROM student;

可查看到生成的数据文件的格式为非压缩的文本文件:

hdfs dfs -cat /user/hive/warehouse/student_text/000000_0

1001810081,cheyo
1001810082,pku
1001810083,rocky
1001810084,stephen
2002820081,sql
2002820082,hello
2002820083,hijj
3001810081,hhhhhhh
3001810082,abbbbbb
文本文件,DEFLATE压缩
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
--创建一个表,格式为文件文件:
CREATE TABLE student_text_def (id STRING, name STRING)
ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
--设置压缩类型为Gzip压缩
SET hive.exec.compress.output=true;
SET mapred.output.compress=true;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.DefaultCodec; 
--导入数据:
INSERT OVERWRITE TABLE student_text_def SELECT * FROM student;
--查看数据
SELECT * FROM student_text_def;

查看数据文件,可看到数据文件为多个.deflate文件。

hdfs dfs -ls /user/hive/warehouse/student_text_def/
-rw-r--r--   2015-09-16 12:48 /user/hive/warehouse/student_text_def/000000_0.deflate
-rw-r--r--   2015-09-16 12:48 /user/hive/warehouse/student_text_def/000001_0.deflate
-rw-r--r--   2015-09-16 12:48 /user/hive/warehouse/student_text_def/000002_0.deflate
文本文件,Gzip压缩
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
--创建一个表,格式为文件文件:
CREATE TABLE student_text_gzip (id STRING, name STRING)
ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
--设置压缩类型为Gzip压缩
SET hive.exec.compress.output=true;
SET mapred.output.compress=true;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;
--导入数据:
INSERT OVERWRITE TABLE student_text_gzip SELECT * FROM student;
--查看数据
SELECT * FROM student_text_gzip;

查看数据文件,可看到数据文件为多个.gz文件。解开.gz文件,可以看到明文文本:

hdfs dfs -ls /user/hive/warehouse/student_text_gzip/
-rw-r--r--  2015-09-15 10:03 /user/hive/warehouse/student_text_gzip/000000_0.gz
-rw-r--r--  2015-09-15 10:03 /user/hive/warehouse/student_text_gzip/000001_0.gz
-rw-r--r--  2015-09-15 10:03 /user/hive/warehouse/student_text_gzip/000002_0.gz
文本文件,Bzip2压缩
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
--创建一个表,格式为文件文件:
CREATE TABLE student_text_bzip2 (id STRING, name STRING)
ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
--设置压缩类型为Bzip2压缩:
SET hive.exec.compress.output=true;
SET mapred.output.compress=true;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.BZip2Codec;
--导入数据
INSERT OVERWRITE TABLE student_text_bzip2 SELECT * FROM student;
--查看数据:
SELECT * FROM student_text_bzip2;

查看数据文件,可看到数据文件为多个.bz2文件。解开.bz2文件,可以看到明文文本:

hdfs dfs -ls /user/hive/warehouse/student_text_bzip2
-rw-r--r--  2015-09-15 10:09 /user/hive/warehouse/student_text_bzip2/000000_0.bz2
-rw-r--r--  2015-09-15 10:09 /user/hive/warehouse/student_text_bzip2/000001_0.bz2
-rw-r--r--  2015-09-15 10:09 /user/hive/warehouse/student_text_bzip2/000002_0.bz2
文本文件,lzo压缩
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
--创建表
CREATE TABLE student_text_lzo (id STRING, name STRING)
ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
--设置为LZO压缩
SET hive.exec.compress.output=true;
SET mapred.output.compress=true;
SET mapred.output.compression.codec=com.hadoop.compression.lzo.LzopCodec;
--导入数据
INSERT OVERWRITE TABLE student_text_lzo SELECT * FROM student;
--查询数据
SELECT * FROM student_text_lzo;

查看数据文件,可看到数据文件为多个.lzo压缩。解开.lzo文件,可以看到明文文本。

未实测,需要安装lzop库

文本文件,lz4压缩
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
--创建表
CREATE TABLE student_text_lz4 (id STRING, name STRING)
ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
--设置为LZ4压缩
SET hive.exec.compress.output=true;
SET mapred.output.compress=true;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.Lz4Codec;
--导入数据
INSERT OVERWRITE TABLE student_text_lz4 SELECT * FROM student;

查看数据文件,可看到数据文件为多个.lz4压缩。使用cat查看.lz4文件,可以看到是压缩后的文本。

hdfs dfs -ls /user/hive/warehouse/student_text_lz4
-rw-r--r-- 2015-09-16 12:06 /user/hive/warehouse/student_text_lz4/000000_0.lz4
-rw-r--r-- 2015-09-16 12:06 /user/hive/warehouse/student_text_lz4/000001_0.lz4
-rw-r--r-- 2015-09-16 12:06 /user/hive/warehouse/student_text_lz4/000002_0.lz4
文本文件,Snappy压缩
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
--创建表
CREATE TABLE student_text_snappy (id STRING, name STRING)
ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
--设置压缩
SET hive.exec.compress.output=true;
SET mapred.compress.map.output=true;
SET mapred.output.compress=true;
SET mapred.output.compression=org.apache.hadoop.io.compress.SnappyCodec;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
SET io.compression.codecs=org.apache.hadoop.io.compress.SnappyCodec;
--导入数据
INSERT OVERWRITE TABLE student_text_snappy SELECT * FROM student;
--查询数据
SELECT * FROM student_text_snappy;

查看数据文件,可看到数据文件为多个.snappy压缩文件。使用cat查看.snappy文件,可以看到是压缩后的文本:

hdfs dfs -ls /user/hive/warehouse/student_text_snappy
Found 3 items
-rw-r--r--   2015-09-15 16:42 /user/hive/warehouse/student_text_snappy/000000_0.snappy
-rw-r--r--   2015-09-15 16:42 /user/hive/warehouse/student_text_snappy/000001_0.snappy
-rw-r--r--   2015-09-15 16:42 /user/hive/warehouse/student_text_snappy/000002_0.snappy

SEQUENCEFILE

Sequence文件,DEFLATE压缩
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
--创建一个表,格式为文件文件:
CREATE TABLE student_seq_def (id STRING, name STRING)
ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n'
STORED AS SEQUENCEFILE;
--设置压缩类型为Gzip压缩
SET hive.exec.compress.output=true;
SET mapred.output.compress=true;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.DefaultCodec; 
--导入数据:
INSERT OVERWRITE TABLE student_seq_def SELECT * FROM student;
--查看数据
SELECT * FROM student_seq_def;

查看数据文件,是一个密文的文件.

hdfs dfs -ls /user/hive/warehouse/student_seq_def/
-rw-r--r--  /user/hive/warehouse/student_seq_def/000000_0
Sequence文件,Gzip压缩
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
--创建一个表,格式为文件文件:
CREATE TABLE student_seq_gzip (id STRING, name STRING)
ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n'
STORED AS SEQUENCEFILE;
--设置压缩类型为Gzip压缩
SET hive.exec.compress.output=true;
SET mapred.output.compress=true;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;
--导入数据:
INSERT OVERWRITE TABLE student_seq_gzip SELECT * FROM student;
--查看数据
SELECT * FROM student_seq_gzip;

查看数据文件,是一个密文的文件,无法通过gzip解压:

hdfs dfs -ls /user/hive/warehouse/student_seq_gzip/
-rw-r--r--  /user/hive/warehouse/student_seq_gzip/000000_0

RCFILE

RCFILE,Gzip压缩
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
CREATE TABLE student_rcfile_gzip (id STRING, name STRING)
ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n'
STORED AS RCFILE;

--设置压缩类型为Gzip压缩
SET hive.exec.compress.output=true;
SET mapred.output.compress=true;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;
--导入数据:
INSERT OVERWRITE TABLE student_rcfile_gzip SELECT id,name FROM student;
--查看数据
SELECT * FROM student_rcfile_gzip;

ORCFile

ORCFile有自己的参数设置压缩格式,一般不使用上述Hive参数设置压缩参数

参考文档:LanguageManual ORC

ORCFile,ZLIB压缩
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
--创建表
CREATE TABLE student_orcfile_zlib (id STRING, name STRING)
ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n'
STORED AS ORCFILE TBLPROPERTIES ("orc.compress"="ZLIB");

--导入数据
INSERT OVERWRITE TABLE student_orcfile_zlib SELECT id,name FROM student;
--查询数据
SELECT * FROM student_orcfile_zlib;
ORCFILE,Snappy压缩
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
--创建表
CREATE TABLE student_orcfile_snappy2 (id STRING, name STRING)
ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n'
STORED AS ORCFILE TBLPROPERTIES ("orc.compress"="SNAPPY");

--导入数据
INSERT OVERWRITE TABLE student_orcfile_snappy2 SELECT id,name FROM student;
--查询数据
SELECT * FROM student_orcfile_snappy2;

一般不使用下述方式。下述方式压缩后,结果与上述同类型压缩(SNAPPY)不同。具体原因待进一步研究。

1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
--创建表
CREATE TABLE student_orcfile_snappy (id STRING, name STRING)
ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n'
STORED AS ORCFILE;
--设置压缩
SET hive.exec.compress.output=true;
SET mapred.compress.map.output=true;
SET mapred.output.compress=true;
SET mapred.output.compression=org.apache.hadoop.io.compress.SnappyCodec;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
SET io.compression.codecs=org.apache.hadoop.io.compress.SnappyCodec;
--导入数据
INSERT OVERWRITE TABLE student_orcfile_snappy SELECT id,name FROM student;
--查询数据
SELECT * FROM student_orcfile_snappy;

Parquet

Parquet,Snappy压缩
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
--创建表
CREATE TABLE student_parquet_snappy (id STRING, name STRING)
ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n'
STORED AS PARQUET;
--设置压缩
SET hive.exec.compress.output=true;
SET mapred.compress.map.output=true;
SET mapred.output.compress=true;
SET mapred.output.compression=org.apache.hadoop.io.compress.SnappyCodec;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
SET io.compression.codecs=org.apache.hadoop.io.compress.SnappyCodec;
--导入数据
INSERT OVERWRITE TABLE student_parquet_snappy SELECT id,name FROM student;
--查询数据
SELECT * FROM student_parquet_snappy;

Avro

Avro,Snappy压缩
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
--创建表
CREATE TABLE student_avro_snappy (id STRING, name STRING)
ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n'
STORED AS AVRO;
--设置压缩
SET hive.exec.compress.output=true;
SET mapred.compress.map.output=true;
SET mapred.output.compress=true;
SET mapred.output.compression=org.apache.hadoop.io.compress.SnappyCodec;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
SET io.compression.codecs=org.apache.hadoop.io.compress.SnappyCodec;
--导入数据
INSERT OVERWRITE TABLE student_avro_snappy SELECT id,name FROM student;
--查询数据
SELECT * FROM student_avro_snappy;

转载于:https://my.oschina.net/hulubo/blog/915072

<think>首先,用户的问题是:“我想了解如何在使用Spark创建Hive表时指定压缩算法请问如何在Spark中创建Hive表并指定压缩算法,例如snappy、gzip等。”这涉及到Spark、Hive压缩算法。从系统指令中,我有几个关键点:-所有行内数学表达式用$...$。-独立公式用$$...$$并单独成段。-LaTeX语法正确。-使用中文回答。-生成相关问题。-回答中引用的段落末尾自然地添加引用标识。现在,查看用户提供的引用:-引用[1]:解释了压缩格式和常见格式如Parquet、ORC。-引用[2]:讨论了gzip和bzip2的应用场景。-引用[3]:提到在SparkSQL中保存Hive表时的压缩设置。关键点是:-如果Hive表的属性定义了压缩格式,就直接使用。-否则,以配置项的设置为准。-具体属性如:textcompression,csvcompression,jsoncompression,parquetcompression,orccompression。-配置项如:spark.sql.orc.compression.codec等。-引用[4]:描述了在Hive中创建表时指定存储格式和压缩,例如storedasparquettblproperties("parquet.compress"="SNAPPY")。用户的问题是在Spark中创建Hive表时指定压缩算法,所以我需要专注于引用[3],因为它直接相关。主要步骤应该是:1.**创建Hive表**:在Spark中,可以通过SparkSQL或SparkSession执行Hive语句。2.**指定压缩算法**:通过设置表的属性(tblproperties)或存储格式的压缩选项。从引用[3]:-如果Hive表定义了压缩属性,直接使用那些。-属性如:-对于Parquet格式:"parquet.compression"或"parquet.compress"。-对于ORC格式:"orc.compress"。-如果没有定义,则Spark使用配置项,如:-spark.sql.parquet.compression.codec-spark.sql.orc.compression.codec所以,在创建表时,可以通过tblproperties指定。此外,引用[4]显示在HiveDDL中指定:storedasparquettblproperties("parquet.compress"="SNAPPY")。既然用户提到"在Spark中创建",我应该用SparkSQL语法示例。在Spark中,可以通过:-执行SQL语句:spark.sql("CREATETABLE...")-或使用DataFrameWriter(如果是插入数据)。但创建表主要是通过SQLDDL。核心命令:```sqlCREATETABLEtable_name(col1type,...)STOREDASparquet--ororc,etc.TBLPROPERTIES("property_name"="property_value");```对于压缩:-Parquet:"parquet.compress"or"parquet.compression.codec"-ORC:"orc.compress"or"orc.compress.codec"值可以是"SNAPPY","GZIP",etc.从引用[3],Spark源码中属性是:-parquet.compression(forparquet)-orc.compress(fororc)压缩算法:-常见的有SNAPPY、GZIP、BZIP2、LZO、ZSTD等。现在,回答结构:-系统指令说:回答结构清晰,帮助用户逐步解决问题。-所以,我应该分步骤解释。大纲:1.**引入话题**:解释压缩Hive表中的重要性(参考引用)。2.**创建Hive表的基本方法**:在Spark中执行HiveDDL。3.**指定压缩算法**:通过STOREDAS和TBLPROPERTIES。4.**示例**:提供具体SQL例子。5.**配置Spark属性**:如果没有在表属性指定,设置全局配置。6.**生成相关问题**:在末尾。使用中文回答。生成相关问题:基于系统指令,需要在末尾添加相关问题,用§§相关问题§§标识。引用标识:在引用的部分末尾加[^n]。引用内容:-我的回答会基于用户提供的引用[1]、[2]、[3]、[4]。-需要自然地添加标识。例如:-在解释"parquet.compress"时,参考引用[3]。-在讨论应用场景时,参考引用[2]。LaTeX:用户问题中没有明显数学内容,但如果有变量、参数,可以用行内数学表达式。例如,如果有配置项名称,就用正常文本。回答结构:-开头简述。-步骤1:理解压缩格式(简述)。-步骤2:在SparkSQL中创建Hive表的语法。-步骤3:指定压缩算法的方法:-在创建表时通过TBLPROPERTIES。-示例为Parquet和ORC。-列出常见压缩算法。-步骤4:如果通过全局配置(spark配置)。-总结。生成相关问题:1.如何在Spark中修改现有Hive表的压缩算法?2.Snappy和Gzip压缩的性能对比?3.压缩算法如何影响Spark作业的执行效率?确保引用:-当提到"如果表定义了压缩属性"时,参考引用[3][^3]。-当提到"应用场景"如gzip时,参考引用[2][^2]。完整回答:</think> ### 如何在Spark中创建Hive表并指定压缩算法 在Spark中创建Hive表时指定压缩算法(如Snappy、GZip等)是一种优化存储空间和提高数据读取效率的常见做法。Hive表通常基于文件格式(如Parquet、ORC)存储数据,而压缩算法的指定是通过在创建表的DDL语句中设置表属性(`TBLPROPERTIES`)实现的,或者在Spark配置中定义全局压缩设置。压缩算法的选择会影响数据压缩率、读写性能和应用场景,例如Snappy适合需要平衡压缩速度和空间效率的实时场景,而GZip则适合追求高压缩率的批量处理[^2][^4]。 下面我将基于引用内容,逐步解释在Spark中操作的过程。Spark支持通过Spark SQL执行Hive DDL语句来创建表,整个过程分为几个简单步骤。 #### 步骤1: 理解压缩格式和算法 在Hive中,数据的压缩通过两层控制: - **压缩格式(File Format)**:定义了数据存储的结构(如Parquet、ORC),这些格式支持不同的压缩算法[^1]。例如: - Parquet格式通常使用属性如`parquet.compression`或`parquet.compress`来指定压缩。 - ORC格式使用属性如`orc.compress`或`orc.compress.codec`。 - **压缩算法(Compression Codec)**:具体的压缩实现,常见算法包括: - `SNAPPY`:高速压缩,适合实时数据处理(压缩率中等)。 - `GZIP`:高压缩率,但压缩和解压速度较慢,适合归档存储。 - `BZIP2`:更高压缩率,但资源消耗更大[^2]。 在Spark中创建Hive表时,压缩算法的指定主要通过表属性实现;如果未指定,Spark会回退到全局配置项(如`spark.sql.orc.compression.codec`)[^3]。 #### 步骤2: 准备Spark环境 在Spark中执行操作前,确保: - 启动Spark Session时启用了Hive支持(例如`spark.sql.catalogImplementation = hive`)。 - Spark连接到了Hive Metastore。 - 所有配置可动态设置或写在Spark配置文件中(如`spark-defaults.conf`),但对于创建表操作,推荐直接在DDL中指定压缩属性以显式控制。 #### 步骤3: 创建Hive表并指定压缩算法 创建表的核心方法是使用Spark SQL执行Hive DDL语句。语法如下: ```sql CREATE TABLE table_name ( column1 data_type, column2 data_type, ... ) [PARTITIONED BY (partition_column data_type)] STORED AS format -- 例如: STORED AS PARQUET 或 STORED AS ORC TBLPROPERTIES ('property_name'='property_value'); -- 指定压缩算法属性 ``` 在这里,`TBLPROPERTIES`是关键,它设置了表级别的属性,包括压缩选项。以下是针对不同存储格式的示例: - **Parquet格式指定Snappy压缩**: ```sql CREATE TABLE employee ( id INT, name STRING, salary DOUBLE ) STORED AS PARQUET TBLPROPERTIES ('parquet.compress'='SNAPPY'); ``` 这样创建的表数据会以Parquet格式存储,并使用Snappy算法压缩。类似地,可以将`SNAPPY`替换为`GZIP`或`UNCOMPRESSED`(禁用压缩)[^3][^4]。 - 引用[3]指出,如果表属性定义了压缩(如`parquet.compress`),Spark优先使用它[^3]。 - **ORC格式指定GZip压缩**: ```sql CREATE TABLE sales ( product_id INT, revenue DOUBLE ) PARTITIONED BY (date STRING) STORED AS ORC TBLPROPERTIES ('orc.compress'='GZIP'); ``` 此处`orc.compress`属性指定了GZip算法,ORC格式的压缩支持Snappy、Zlib等选项[^3]。 - 从引用[2]看,GZip压缩适合每个文件较小(<130MB)的场景,便于在MapReduce中并发处理[^2]。 #### 步骤4: 检查压缩设置或使用全局配置 - **验证表设置**:创建表后,可以通过Hive或Spark SQL执行`DESCRIBE FORMATTED table_name`来检查属性。例如: ```sql DESCRIBE FORMATTED employee; -- 查看 parquet.compress 等属性 ``` 如果属性中已定义压缩(如`parquet.compress=SNAPPY`),则无需额外操作[^3][^4]。 - **全局配置(可选)**:如果创建表时未在`TBLPROPERTIES`中指定压缩,Spark会使用配置项设置: - 设置全局压缩格式:在Spark配置中添加参数(例如在`spark-defaults.conf`中): ``` spark.sql.parquet.compression.codec snappy -- 适用于Parquet spark.sql.orc.compression.codec gzip -- 适用于ORC ``` 但此方法优先级低于表属性定义[^3]。例如,如果您有一个文本格式表,全局配置项可能涉及`spark.sql.csv.compression.codec`等。 #### 步骤5: 插入数据和测试 - 创建表后,可以使用Spark DataFrame API插入数据: ```python data = [ (1, "John", 50000.0), (2, "Jane", 60000.0) ] df = spark.createDataFrame(data, ["id", "name", "salary"]) df.write.mode("append").saveAsTable("employee") -- 表名需创建的一致 ``` - 插入后,在HDFS或本地检查文件大小(例如通过`hdfs dfs -du -h /user/hive/warehouse/employee`),验证压缩是否生效。GZip通常会显示更高的压缩率,而Snappy文件更大但读取更快[^2]。 #### 注意事项 - **算法兼容性**:确保选择Hive和Spark都支持的算法(如Snappy、GZip)。例如,引用[4]提到在Hive中使用Snappy压缩Parquet文件时,属性`parquet.compress`应设为`SNAPPY`[^4]。 - **性能影响**:Snappy压缩快但压缩率一般,适合OLAP查询;GZip压缩慢但节省存储空间,适合历史数据分析[^2]。 - **文件大小**:引用[2]建议,对于小文件(如日志),GZip压缩能有效支持并发处理;大文件使用Snappy减少读取延迟[^2]。 通过上述步骤,您可以在Spark中轻松创建Hive表并指定所需的压缩算法。如果有代码示例或特定需求,欢迎提供更多细节进一步探讨。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值