Hadoop ORC 文件 - 它是如何工作的 - 如何获取元数据

标签 hadoop hive file-format orc

我是 ORC 文件的新手。翻了很多博客,都没有搞清楚。请帮助并澄清以下问题。

  1. 我可以从 ORC 文件中获取架构吗?我知道在 Avro 中,可以获取模式。

  2. 它实际上如何提供模式演变?我知道可以添加几列。但是怎么做呢。我唯一知道的是,创建 orc 文件是通过将数据加载到以 orc 格式存储数据的 hive 表中。

  3. ORC 文件索引如何工作?我所知道的是每个 strip 索引都会被维护。但是由于文件未排序,它如何帮助在 strip 列表中查找数据。它如何帮助在查找数据时跳过 strip ?

  4. 是否为每一列维护索引。如果是,那么它不会消耗更多内存吗?

  5. 列式格式的 ORC 文件如何适合 Hive 表,其中每列的值存储在一起。而配置单元表是按记录获取记录的。两者如何结合?

最佳答案

1.2. 使用 Hive 和/或 HCatalog 创建、读取、更新 Hive metastore 中的 ORC 表结构(HCatalog 只是一个方面门而不是让 Pig/Sqoop/Spark/任何东西直接访问 Metastore)

2. ALTER TABLE 命令允许添加/删除任何存储类型的列,包括 ORC。但要注意一个令人讨厌的错误,它可能会在那之后导致矢量化读取崩溃(至少在 V0.13 和 V0.14 中)

3.4. “索引”这个词不太合适。基本上它只是在写入时保留在 strip 页脚中的最小/最大信息,然后在读取时用于跳过所有明显不满足 WHERE 要求的 strip ,在某些情况下大大减少了 I/O < em>(一种在列存储中变得流行的技巧,例如 MySQL 上的 InfoBright,但也在 Oracle Exadata 设备中[被 Oracle 营销称为“智能扫描”])

5. Hive 适用于“行存储”格式(Text、SequenceFile、AVRO)和“列存储”格式(ORC、Parquet)。优化器只是在初始 Map 阶段使用特定的策略和捷径——例如 strip 消除、矢量化运算符——当然,序列化/反序列化阶段对于列存储来说要复杂一些。

关于Hadoop ORC 文件 - 它是如何工作的 - 如何获取元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30094604/

相关文章:

security - 在 Hadoop 环境中使用多个 AWS key

hadoop - hive 开始失败

python - 从numpy数组创建nifti文件

eclipse 中的 java.lang.ClassNotFoundException : org. apache.hadoop.hive.jdbc.HiveDriver

hadoop - hadoop 之上的列存储?

python - 配置单元:python UDF 给出 "Hive Runtime Error while closing operators"

java - 随机存取图像(图片)文件

适用于手机的视频格式

hadoop - 使用 Apache Pig Latin 对数据进行条件求和

json - 将JSON Tweet导入到Hive中的问题