【发布时间】:2021-09-24 19:42:22
【问题描述】:
在我的 HDFS 中,我按 date 和 event_id 对数据进行了分区,并且拥有大约 140 万个 parquet 文件。今天,为了分析 Apache Spark 中的数据,我使用spark.read.parquet("/path/to/root/")。列出文件大约需要 30 分钟,我每次都必须这样做,而且越来越烦人。
现在,我想设置一个外部表,使用 MySQL 作为 Hive Metastore。我目前面临一个已知问题,即发现所有 1.4 分区需要永远。众所周知,MSCK REPAIR TABLE my_table 不存在。相反,我生成了一个长查询(大约 400 MB),其中包含这样的查询
ALTER TABLE my_table ADD
PARTITION (date = 'YYYY-MM-DD', event_id = "<some value>") LOCATION ''
PARTITION (date = 'YYYY-MM-DD', event_id = "<some value>") LOCATION ''
PARTITION (date = 'YYYY-MM-DD', event_id = "<some value>") LOCATION ''
...
PARTITION (date = 'YYYY-MM-DD', event_id = "<some value>") LOCATION ''
PARTITION (date = 'YYYY-MM-DD', event_id = "<some value>") LOCATION ''
已经3个小时了,它仍然只处理了不到100,000个分区。我观察到一些事情:
- Spark 一次执行一个分区。
- Spark 似乎会检查每条路径是否存在。
所有这些都会增加运行时间。我已经搜索过,但无法找到如何禁用这两个操作。
所以,我想针对 Hive 元存储的 MySQL 数据库和表手动执行 SQL 操作,以创建和管理表。我看过但无法弄清楚如何手动管理这些表。请问,有人知道怎么做吗?具体来说,我想要以下内容:
- 如何通过直接进入 Hive 元存储表来创建带有分区的外部表?
- 如何通过对 Hive 元存储表进行直接 upsert 查询来管理外部表分区?
有没有什么好的资源可以用来了解元存储中的后备表。我觉得手动插入会快得多。谢谢。
【问题讨论】:
-
谁拥有“分区”?蜂巢?还是 MySQL?在 MySQL 中,分区很少能提高性能。向我们展示表结构。
-
@RickJames,我想我不明白你的问题。我生成并分区镶木地板文件。我想使用 hive 元存储来跟踪表和分区信息。
标签: mysql apache-spark hadoop hive hive-metastore