Hive 支持的文件格式
- Text File(文本格式文件)
- Sequence File(hadoop 专用序列格式二进制文件)
Hadoop 提供的 Sequence File 文件格式提供一对 Key-Value 形式的不可变的数据结构。同时,HDFS 和 MapReduce 使用SequenceFile 文件可以使文件的读取更加效率 - Avro File (hadoop 专用序列格式二进制文件)
Avro 是一个数据序列化系统,设计用于支持大批量数据交换的应用。
Avro 主要特点有:
- 支持二进制序列化方式,可以便捷,快速地处理大量数据;
- 动态语言友好,Avro 提供的机制使动态语言可以方便地处理 Avro 数据
- 可排序的
- Parquet File(列式存储格式二进制文件)
Parquet 是一种列式数据存储格式,同 XML 和 JSON 一样,它是语言、平台无关的,并且不需要和任何一种数据处理框架绑定,并且可以很方便的将其它序列化工具生成的数据转换成 Parquet 格式
Parquet 文件是以二进制方式存储的,所以是不可以直接读取的,文件中包括该文件的数据和元数据,因此 Parquet 格式文件是自解析的
目前支持 Parquet 文件格式的组件或框架如下:
- 查询引擎: Hive, Impala, Pig, Presto, Drill, Tajo, HAWQ, IBM Big SQL
- 计算框架: MapReduce, Spark, Cascading, Crunch, Scalding, Kite
- 数据模型: Avro, Thrift, Protocol Buffers, POJOs
- ORC file(列式存储格式二进制文件)
ORC 的全称是 (Optimized Row Columnar),是另一种常见的列式存储格式。
在 ORC 之前,Hive 中就有一种列式存储格式称为 RCFile(RecordColumnar File),ORC 是对 RCFile 格式的改进,主要在压缩编码、查询性能方面做了优化。因此 ORC/RC 都源于 Hive,主要用来提高 Hive 查询速度和降低 Hadoop 的数据存储空间。
ORC 具有以下一些优势:
- ORC 是列式存储,有多种文件压缩方式,并且有着很高的压缩比
- ORC 文件是可切分(Split)的,在 Hive 中使用 ORC 作为表的文件存储格式,不仅节省HDFS 存储资源,查询任务的输入数据量减少,使用的 MapTask 也就减少
- ORC 提供了多种索引,row group index、bloom filter index。
- ORC 可以支持复杂的数据结构(比如Map等)
- 在压缩存储时间上,除 Sequence File 外基本都相差无几
- 数据压缩比例上 ORC FILE 最优,相比 Text File 节省了 50 倍磁盘空间,Parquet File压缩性能也较好
- SQL 查询速度而言,ORC FILE 与 Qarquet FILE 性能较好,远超其余存储格式
综合上述各种性能指标,生产环境中主流做法是原始日志写入 hive 的存储格式都采用 ORC 或者 Qarquet 格式
文件存储分类
- 行式存储
- TEXT FILE
- SEQUENCE FILE
- AVRO FILE
- 列式存储
- PARQUET FILE
- RC FILE
- ORC FILE
数据导入
方式一
手动用 hdfs 命令,直接导入本地数据或 hdfs 数据到 Hive 仓库的表目录中
方式二
在 Hive 的交互式 shell 中用 load 命令,导入本地数据到 Hive 仓库的表目录中(文件复制)
注:Hive 的 load 命令是将文件直接加载到 Hive 仓库表的目录中, 将相关的元数据信息加到 MySQL 中,不涉及到文件格式的转换
方式三
在 Hive 的交互式 shell 中用 load 命令,导入 hdfs 数据到 Hive 仓库的表目录中(文件移动)
注:导入的 hfds 数据将被移动到 Hive 仓库表目录中
方式四
在 Hive 的交互式 shell 中用 insert 命令,导入Hive 表数据到 Hive 仓库的表目录中(主要用于创建表的文件格式和加载的数据文件格式不一致的时候 )
方式五
在 Hive 的交互式 shell 中用 import 命令,导入使用 Export 命令导出的文件数据
注:Import 导入的数据必须是 Export 导出的数据
数据导出
方式一
将 Hive 表中的数据导出到 HDFS 中
将 Hive 表中的数据导出到本地磁盘文件中