HDP Spark2 HIVE3.1 的问题

    HDP 上安装了 Hive3.1 和 Spark2, 提交 Spark 作业时,报找不到 Hive 中表的问题

  但是查一了下 hive 表,明明是存在这个表的。查看日志,注意到如下的一段日志。

没修改值之前,我在 Spark-shell 里创建了一张 hive 表,发现其创建的位置是 spark.sql.warehouse.dir 指向的目录,不在 hive.metastore.warehouse.dir 目录里 (其实这个值在 hive 中的配置,但是 spark 的 conf 下的目录里没有配置)。我在 spark 的 conf 目录里增加了 hive.metastore.warehouse.dir 的值,使其与 hive 中配置的值一样。可是我修改后,在 spark-shell 里查寻表时,依然显示是刚才创建的表。我把 spark.sql.warehouse.dir 的值也改成 hive.metastore.warehouse.dir  的值,仍然如此。

网上的另外几种方法:

1. 把 hive-site.xml 复制到 Spark 的 conf 目录下。

    我看了一下 spark 的 conf 目录,有 hive-site.xml 这个表的,而且从日志中也可以看到 spark 能找到 hive 的 thrift://datacenter2:9083 这个地址,说明没问题。

2. 创建 spark session 的时候要启用 hive。

val ss = SparkSession.builder().appName("统计").enableHiveSupport().getOrCreate()

我的程序里有启用的,所以也不是原因。

3. 关闭 Hive 3 中的默认的 ACID 功能,修改如下几个参数

hive.strict.managed.tables=false 
hive.create.as.insert.only=false 
metastore.create.as.acid=false

   试过之后,问题依旧。

   崩溃了,找不到其它解决方法了。先记录一下。

 ================================================

      有别的事,先做别的了。过了2天,抱着试试看的态度,在 /etc/spark2/3.1.0.0-78/0 下建了个软链接到  /etc/hive/conf 下的 hive-site.xml ,竟然找得到表了。通过比较,发现原 spark 下的 hive-site.xml 里多了一个 metastore.catalog.default 的配置,值是 spark。在网上搜了一下,才知道要改成 hive 才可以读 hive 下创建的表。这个值我理解的是表示hive仓库的命名空间。为什么 Spark 没有默认设置成 hive 的 catalog 的呢? 因为 HDP 3.1 中的 hive 会默认开启 ACID,spark 读取 ACID 的 表时,会出错,所以设置了一个 spark 的 catalog。 

转载于:https://www.cnblogs.com/langfanyun/p/10741775.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值