apache-spark - 在用压缩文件替换 HDFS 中的小文件时,如何避免破坏活动的 Hive/Presto 查询?
问题描述
我们每天每小时都会写入 100 个 HDFS 分区。这些分区每天都可以直接加载到 Hive 中,并且数据以 Parquet 格式写入。
我们遇到的问题是,因为我们希望尽可能快地获得可查询的数据,所以每小时写入会产生大量小文件。
有很多例子,例如如何将小的 parquet 文件合并到一个大的 parquet 文件中?用于组合代码;我的问题是如何在移动/替换新压缩文件中的小文件时避免破坏人们的活动查询?
解决方案
Metastore 对每个分区都有一个文件系统位置。此位置通常基于表和分区:
hdfs://namenode/data/web/request_logs/ds=2018-05-03
但是,位置可以是完全任意的,因此您可以利用它来实现快照隔离或版本控制。压缩分区中的文件时,将新文件写入新位置:
hdfs://namenode/data/web/request_logs/v2_ds=2018-05-03
压缩完成后,更新元存储中的分区位置以指向新位置。最后,在没有查询使用它之后的某个时间清理旧位置。
推荐阅读
- excel - 用平均值替换多个工作表中的空白的代码
- javascript - javascript暂停时的进度条长度
- android - EditText 失去对输入特殊字符的关注
- react-native - 在本机反应中未设置选择器中的值更改的状态
- docker - Docker 多阶段构建复制前一阶段(取决于顺序)
- json - 在单独的列中读取 PowerBI 中的 Json 文件
- google-chrome-extension - ChromeOS 文件系统提供程序和大文件
- c - 如何从 SensorTag CC3200STK 读取数据
- reactjs - 使用 react-redux 根据布尔值在 Grid 中显示一些数据
- python - 动画单个烛台