【老贝伏枥】Hive表的存储格式对比分析

浏览: 1544

  Hive支持Hadoop中使用的几种熟悉的文件格式,在建表时使用

STORED AS (TextFile|RCFile|SequenceFile|AVRO|ORC|Parquet)

来指定存储格式

1、Hive的建表语法

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name

--创建临时表、外部表、内部表。内部表的存储在指定目录HDFS://user/hive/warehouse,而外部表可以指定非hdfs文件路径。

  [(col_name data_type [COMMENT col_comment], ... [constraint_specification])]

  [COMMENT table_comment]  --表的描述信息,同传统关系型DB

  [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] --指定按某个字段进行分区

  [CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]

  --指定按某个字段进行分桶,桶内的数据按某个字段排序,指定桶的个数(一个桶的文件大小建议在10MB~100MB)

  [SKEWED BY (col_name, col_name, ...) ON ((col_value, col_value, ...), (col_value, col_value, ...), ...)  [STORED AS DIRECTORIES]

  --指定造成倾斜的列和值,在元数据中记录这些倾斜的列名和值,对倾斜的值建立子目录,查询会更加得到优化

  [

   [ROW FORMAT row_format] --行存储格式,

  --只有textfile才需指定ROW FORMAT,如 row format delimited fields terminated by '\t'  lines terminated by '\n'  stored as textfile;

   [STORED AS file_format] 

     | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)]  

  ]

  --表存储格式 :TextFile,SequenceFile,RCFile,AVRO,ORC,Parquet,一般用最后两种格式。

  [LOCATION hdfs_path]  --指定存储位置

  [TBLPROPERTIES (property_name=property_value, ...)]   --允许开发者定义一些自己的键值对信息,如TBLPROPERTIES ("orc.compress"="ZLIB")

  [AS select_statement];  --根据一个已有的查询创建表,如create table user_info as select * from user_accounts where user_type='0';


2、存储格式分析

外部数据存储到hive对象的流程:

HDFS files –> InputFileFormat –> <key, value> –> Deserializer –> Row object

从Hive对象输出到外部程序的流程:

Row object –> Serializer –> <key, value> –> OutputFileFormat –> HDFS files

  • TextFile每一行是一条记录,以换行符(\ n)结尾。数据不做压缩,磁盘开销大,数据解析开销大。可结合Gzip、Bzip2使用压缩,但使用这种方式hive不会对数据进行切分,从而无法对数据进行并行操作。
  • SequenceFile是HDP提供的一种二进制文件支持,使用方便、可分割、可压缩。支持三种压缩选择:NONE, RECORD, BLOCK,一般建议使用BLOCK压缩。
  • RCFile是一种行列存储相结合的存储方式。首先其将数据按行分块,保证同一个Record的数据在一个块上,避免读一个记录需要读取多个block。其次块数据列式存储,有利于数据压缩和快速的列存取。
  • AVRO是开源项目,为HDP提供数据序列化和数据交换服务,是基于大数据HDP的应用程序中流行的文件格式之一。
  • ORC 基于RCFile改良,提供了一种将数据存储在Hive表中的高效方法。Hive从大型表读取,写入和处理数据时,使用ORC文件可以提高性能。
  • Parquet是一个面向列的二进制文件格式。对于大型查询的类型是高效的,对于扫描特定表格中的特定列的查询,Parquet特别有用。默认使用Snappy压缩。


  如果仅仅是在Hive中存储和查询,建议使用ORC格式,压缩比率非常大,查询性能非常高,写操作耗时比其它格式稍于差一点。

  如果在Hive中存储,而使用Impala查询,使用Parquet。

推荐 0
本文由 贝克汉姆 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册