apache-spark - 深入了解 Spark 与 Hive 的交互
问题描述
我试图了解 Spark 和 Hive Metastore 之间的交互。我首先查看了从 Spark 到 Hive Metastore 的调用时间和调用方式。我可以看到一堆操作get_table
调用spark.read.table
,如果表被分区,则get_partitions
当 DataFrame 通过调用操作实现时会调用几个调用。我注意到的另一件事是 Spark 不缓存表定义。每次对 Hive 表调用操作时,都会再次从底层元存储中读取定义和相应的分区!考虑到 Spark 为您提供了针对此类情况进行优化的其他选项,我对此感到满意,您可以保留 DataFrame。当我查看 API 调用模式时,我注意到一些奇怪的东西saveAsTable
手术。get_table
有用于创建表和按预期创建分区的 API 调用,但与此同时,对 Hive 元存储进行了大约 30次调用。我发现这些电话的目的真的很奇怪,也很难理解。
我正在寻找以下问题的答案。
- 为什么从 Metastore 中读取表和分区信息后,Spark 不缓存表和分区信息?
get_table
在创建 Hive 表时,如此多的调用背后的基本原理是什么?- 读取或写入表时
get_table
调用的次数是执行者数量的函数吗? - 是否有改进的范围,我们是否期望通过优化对 Metastore 的调用次数来显着提高性能?
解决方案
推荐阅读
- java - Tinylog 捕获系统错误输出流到日志文件
- flutter - 如何在 Flutter 中使用图片资源作为图标?
- php - 带有cookie的php curl GET请求
- reactjs - 在 React 中的 DOM 中的注入元素上触发事件
- sql - ORA-01008:并非所有变量都绑定 ORA-06512:在“SYS.DBMS_SQL”,第 1721 行。我正在学习 SQL,但出现此错误
- python - 如何使用自定义的基于 cauchy-schwarz 散度的损失函数来训练 Keras 模型?
- python - 如何将 Pandas.set_option (Python) 应用于 pandas.style 对象
- python - Django cache_page - 预填充/预缓存
- sql - 类似字段上的 INSERT + SELECT 数据类型不匹配
- python - 如何在 python 中模拟闭包(内部函数)?