ambari spark连接hive出现的问题和解决

1.使用spark连接hive时,数据目录总是spark的目录,而不是hive的元数据目录

官网说的是需要把hive-site.xml还有hadoop和hdfs的核心配置拿到spark的conf下,经过测试,其实只需要把hive-site复制过去就可以。但是spark的conf下已经有了一个hive-site,经过比对,这两个hive-site的内容是不一样的,所以如果在这个时候运行sparksql的话,加载的是spark的warehouse。这个可以理解成spark的内置hive,必须要把这个内置的hive文件替换掉,才能使用sparksql连接hive,并且有几个细节的配置需要改一下

metastore.catalog.default=hive
hive中  hive.strict.managed.tables=false
hive.load.data.owner=spark(具体执行用户)
 spark.sql.warehouse.dir= /warehouse/tablespace/managed/hive(hive元数据目录)
 

然后进去sparkbin下,启动spark-shell脚本:

在sql里面写执行的sql就可以执行相关对hive的操作了

scala> sql("select * from test3_hive").show
+---+----+
| id|name|
+---+----+
|  1| aaa|
+---+----+

2.同一条建表语句,使用hive客户端创建,hdfs上的文件目录是这样的:表名/文件夹分区名/数据

使用spark客户端创建表,hdfs文件目录是这样:表名/数据

问题是,用spark读取hive创建的表报错Not a file,且spark没法插数据到hive创建的表,插入时报错Cannot change stats state for a transactional table without providing the transactional write state for verification (new write ID -1, valid write IDs null; current state {"BASIC_STATS":"true","COLUMN_STATS":{"id":"true","name":"true"}}; new state null  。

但是用spark创建表时,spark和hive都可以对表进行插入和查询

问题解决:

ambari在最开始搭建完hive以后,配置项和开源的hive搭建完是不一样的。

ambari-hive搭建完以后,修改了很多的配置,开启了acid,但是acid不支持textfile格式,好像只有orc格式才支持acid,但是sparksql读取不了orc格式,所以导致了这一系列问题。

把hive的关于acid的配置改了就可以了:

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

没改之前表结构是这样的:

改完以后是这样的:(可以被spark正常读取了)

3.hive报错Error: java.io.IOException: java.lang.IllegalArgumentException: bucketId out of range: -1

解决办法:

出现这个问题的原因是我创建hive表的时候开启了事务,然后别的组件比如spark对这个表进行了插入数据操作,导致了这个表在hdfs目录下的结构是这样的,

hive读取数据的时候,会从表下面的delta文件夹下读取数据,但是spark不支持acid操作,所以插数据以后格式是文件而没有delta文件夹,所以导致用hive查询这个表的时候报错,用spark查询这个表的时候会报错

Unable to alter table. Cannot change stats state for a transactional table without providing the transactional write state for verification (new write ID 1, valid write IDs null; current state {"BASIC_STATS":"true","COLUMN_STATS":{"id":"true","name":"true"}}; new state null;

但是报错之后却可以查出之前spark插入的数据来

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值