从 har 档案中查询数据 - Apache Hive
Querying data from har archives - Apache Hive
我正在使用 Hadoop 并面临大量小文件的可怕问题。我需要能够从现有的配置单元分区中创建 har 存档并同时查询它们。但是,Hive 显然只支持托管 tables 中的归档分区,而不支持外部 tables - 这非常可悲。我正在尝试通过使用 hadoop 的存档工具手动存档分区目录中的文件来找到解决方法。我现在需要配置配置单元,以便能够查询存储在这些存档中的数据,以及存储在其他分区目录中的未存档数据。请注意,我们只使用了外部 table。
访问创建的partition-har中文件的namespace对应partition dir的hdfs路径。
例如,例如hdfs中的一个文件:
hdfs:///user/user1/data/db1/tab1/ds=2016_01_01/f1.txt
存档后可以访问为:
har:///user/user1/data/db1/tab1/ds=2016_01_01.har/f1.txt
hive 是否可以从外部查询 har 档案 table?如果有,请提出一个方法。
此致
实际上,"managed" 和 "external" table 之间的线很细。
我的建议:
- 创建 "managed" table
- 为将来的某些日子显式添加分区,但具有 临时 位置——即您的外部进程期望使用的目录
- 让外部进程直接在 HDFS 级别转储其文件——它们在 Hive 查询中自动公开,"managed" 或不
(Metastore 不跟踪个人文件和块,它们会在每次查询时被检测到;作为旁注,您可以 运行 如果您愿意,可以在 HDFS 级别进行备份和恢复操作,只要您不弄乱目录结构)
- 当一个分区是 "cold" 并且您非常确定那里永远不会有另一个文件转储时,您可以 run a Hive command to archive the partition 即在单个 HAR 中移动小文件 + 将分区标记为 "archived" 在 Metastore
好处:在 Hive 中取消归档您的分区很容易(而没有 hadoop unarchive
命令 AFAIK)。
警告:这是一个 "managed" table 所以请记住不要删除任何东西,除非您已经安全地将数据移出 Hive 管理的目录。
我正在使用 Hadoop 并面临大量小文件的可怕问题。我需要能够从现有的配置单元分区中创建 har 存档并同时查询它们。但是,Hive 显然只支持托管 tables 中的归档分区,而不支持外部 tables - 这非常可悲。我正在尝试通过使用 hadoop 的存档工具手动存档分区目录中的文件来找到解决方法。我现在需要配置配置单元,以便能够查询存储在这些存档中的数据,以及存储在其他分区目录中的未存档数据。请注意,我们只使用了外部 table。
访问创建的partition-har中文件的namespace对应partition dir的hdfs路径。 例如,例如hdfs中的一个文件:
hdfs:///user/user1/data/db1/tab1/ds=2016_01_01/f1.txt
存档后可以访问为:
har:///user/user1/data/db1/tab1/ds=2016_01_01.har/f1.txt
hive 是否可以从外部查询 har 档案 table?如果有,请提出一个方法。
此致
实际上,"managed" 和 "external" table 之间的线很细。
我的建议:
- 创建 "managed" table
- 为将来的某些日子显式添加分区,但具有 临时 位置——即您的外部进程期望使用的目录
- 让外部进程直接在 HDFS 级别转储其文件——它们在 Hive 查询中自动公开,"managed" 或不
(Metastore 不跟踪个人文件和块,它们会在每次查询时被检测到;作为旁注,您可以 运行 如果您愿意,可以在 HDFS 级别进行备份和恢复操作,只要您不弄乱目录结构) - 当一个分区是 "cold" 并且您非常确定那里永远不会有另一个文件转储时,您可以 run a Hive command to archive the partition 即在单个 HAR 中移动小文件 + 将分区标记为 "archived" 在 Metastore
好处:在 Hive 中取消归档您的分区很容易(而没有 hadoop unarchive
命令 AFAIK)。
警告:这是一个 "managed" table 所以请记住不要删除任何东西,除非您已经安全地将数据移出 Hive 管理的目录。