HDFS配置HA下spark-sql写入hive报错Wrong FS

背景:

  CDH集群的HDFS HA已配置完毕,Hive也相应进行了Update Hive metastore NameNode,Hive的业务sql脚本都正常运行。

  在使用spark-sql 写入hive时报错:

Caused by: java.lang.IllegalArgumentException: Wrong FS: hdfs://nameservice1:8020/dw/ods/ods_node_data_i_temp/.hive-staging_hive_419_7110989444187264968-1/-ext-10000/part-00000-06fbe811-3711-486a-aa27-dcbebd5cfab2-c000, expected: hdfs://nameservice1
	at org.apache.hadoop.fs.FileSystem.checkPath(FileSystem.java:649)
	at org.apache.hadoop.hdfs.distributedFileSystem.getPathName(distributedFileSystem.java:194)
	at org.apache.hadoop.hdfs.distributedFileSystem.getEZForPath(distributedFileSystem.java:2093)
	at org.apache.hadoop.hdfs.client.HdfsAdmin.getEncryptionZoneForPath(HdfsAdmin.java:289)
	at org.apache.hadoop.hive.shims.Hadoop23Shims$HdfsEncryptionShim.isPathEncrypted(Hadoop23Shims.java:1221)

  1.确认spark正常读取到hive配置文件

  spark-env.sh

export HADOOP_CONF_DIR=/etc/hadoop/conf:/etc/hive/conf

  spark历史服务器上查看和bin/spark-sql --master yarn 确认了spark正常读取到hive配置文件

  2.虽然不太可能是编译问题,但确认下

   编程编译环境是scala2.11.12,spark2.4.6和服务器环境匹配

  3.排查namenodeservice1问题

  查看hive元数据表

  DBS  : Hive数据仓库的总路径

  SDS  : Hive每张表对应的路径

 

 

对比着可以发现,似乎有点路径多了":8020".

查看表ddl

LOCATION
'hdfs://nameservice1:8020/dw/ods/xx'

 

指定表路径时确实多了":8020",去掉":8020"创建新表测试,问题解决

对旧表

update SDS set LOCATION=REPLACE (LOCATION,'nameservice1:8020','nameservice1')

 或者使用

alter table tableName set location 'hdfs://nameservice1:8020/dw/ods/xx'

  

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...