Spark:不能创建Managed表,External表已存在...

[复制链接]
发表于 2025-12-26 12:57:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
1、Spark on Hive与Hive on Spark


1.1、Hive on Spark
Hive默认使用MapReduce作为实行引擎,即Hive on MapReduce。现实上,Hive还可以使用Tez或Spark作为实在行引擎,分别为Hive on Tez和Hive on Spark
由于MapReduce的中心盘算均必要写入磁盘,Spark则是存入内存,以是总体来讲,Spark比MapReduce服从高很多,因此,企业也较少使用MapReduce
Hive on Spark是Hive既作为存储又负责SQL的编译、分析和优化,Spark只负责实行。这里Hive的实行引擎换成了Spark,不再是MapReduce
1.2、Spark on Hive
Spark on Hive是Hive只作为存储脚色,Spark负责SQL的编译、分析、优化和实行。这里可以明白为Spark通过SparkSQL使用Hive语法使用Hive表,底层运行的仍旧是Spark RDD
具体步调如下:


  • 实行SparkSQL,加载Hive的设置文件,获取Hive的元数据信息
  • 根据获取到的Hive元数据信息得到Hive表的数据
  • 通过SparkSQL来使用Hive表的数据
也就是说,Spark使用Hive来提供表的Metadata信息
2、Spark数仓建表相干标题


前些天,在基于Spark数仓建表时,报了如下错误:
  1. Can not create the managed table('db.table'). The associated location('hdfs://date/warehouse/tablespace/external/hive/db/table') already exists.
复制代码
报错信息体现:不能创建管理表,外表已存在…
不得不说,这个报错还真有点希奇…
变乱的因由也很简朴,由于我们使用的是Spark数仓,即Spark on Hive模式,相较于Hive,Spark建表默以为外(External)表,而Hive是管理(Managed)表
由于基于Spark on Hive,因此,Spark在获取Hive表的数据时会先去获取Hive的元数据信息,因此,Spark建表会先根据元数据信息校验管理表是否存在,如果已经存在一个雷同的管理表,Spark建表则会报如上非常
办理的方案也很简朴,删除已存在的不须要的管理表,然后重新建表;大概创建管理表不存在的Spark表即可


   参考文章:
https://baijiahao.baidu.com/s?id=1757731374695957147&wfr=spider&for=pc
  
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表