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 表中的数据导出到本地磁盘文件中