创建ORC文件而不是Hive表?

时间:2016-02-14 06:59:18

标签: hadoop hive

从我搜索的内容中发现了使用Hive创建ORC表的方法,但我想要一个ORC文件,我可以在其上运行我的自定义map-reduce作业。

另外请告诉我,Hive在我的ORC表的仓库目录下创建的文件是ORC的表文件,而不是我可以使用的actutal ORC文件?喜欢:/user/hive/warehouse/tbl_orc/000000_0

1 个答案:

答案 0 :(得分:0)

[讨论总结]

  • Hive表映射到HDFS目录(或列表 目录,如果表是分区的)
  • 该目录中的所有文件都使用相同的SerDe(ORC,Parquet,AVRO, 文本等)并具有相同的列集;总之,它们包含该表可用的所有数据
  • 该目录中的每个文件都是以前的MapReduce作业的结果 - Hive INSERT,通过HCatalog保存的Pig数据集,通过HiveContext保存的Spark数据集......或任何碰巧的自定义作业 在那里删除一个文件,希望符合表SerDe和 schema (通过MetastoreClient Java API或通过HCatalog API检索, 无论)
  • 请注意,包含3个减速器的单个作业可能会创建3个新作业 文件(可能是1个空文件+ 1个小文件+ 1个大文件!);和a 使用24个映射器而没有减速器的作业将创建24个文件,除非一些 启用了“合并小文件”后处理步骤
  • 另请注意,大多数文件名都没有提供任何相关信息 文件被编码的方式,它们只是序列号 (即添加12个文件的第5个作业通常会创建文件000004_0 000004_11

总而言之,使用Java MapReduce程序处理ORC文件集应该与处理Text文件集非常相似。您只需要提供正确的SerDe和正确的字段映射 - 我认为加密算法在文件中是显式的,因此Serde在读取时自动地处理它。请记住,ORC文件在记录级别不可拆分,但在条带级别(条带是以列式格式存储的一堆记录,带有标记化和可选压缩)

当然,这不会让您访问ORC高级功能,例如矢量化或条带修剪(有点类似于Oracle Exadata中的“智能扫描”)