当前位置: 首页 > article >正文

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

Spark数仓建表

      • 1、Spark on Hive与Hive on Spark
      • 2、Spark数仓建表相关问题





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数仓建表时,报了如下错误:

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



http://www.kler.cn/a/392916.html

相关文章:

  • OCR实践-Table-Transformer
  • 怎么把多个PDF合并到一起-免费实用PDF编辑处理工具分享
  • 全局webSocket 单个页面进行监听并移除单页面监听
  • IntelliJ Idea常用快捷键详解
  • Linux嵌入式编程中与线程有关的知识(线程的概念、线程的创建、互斥锁、线程挂起、主线程、如何看查线程的ID等知识点)
  • 畅游 Linux 开发天地:yum 与 vim 详解
  • PostgreSQL 页损坏如何修复
  • 【Linux】进程通信之管道
  • MySQL算数运算符基础:详解与入门
  • 绿色能源新视界:透明导电膜助力高效光伏
  • Mysql 创建用户并授权
  • Flink 开发工程应加载哪些依赖
  • JavaScript逆向爬虫教程-------基础篇之JavaScript密码学以及CryptoJS各种常用算法的实现
  • 英语中从句和复合句简单介绍
  • 老旧城区供水管网改造优先等级分析
  • stm32学习之路——八种GPIO口工作模式
  • el-form el-table 前端排序+校验+行编辑
  • LLMs之VDB:Elasticsearch的简介、安装和使用方法、案例应用之详细攻略
  • 服务器显卡和桌面pc显卡有什么不同
  • C++builder中的人工智能(17):神经网络中的自我规则非单调(Mish)激活函数
  • sklearn.datasets中make_classification函数
  • 3216. 交换后字典序最小的字符串
  • 单词反转和数组去重,附经典面试题一份
  • C/C++内存管理 | new的机制 | 重载自己的operator new
  • Mysql:使用binlog的一些常用技巧
  • TreeSet是什么