hive版本hive-1.1.2
同事反馈一个客户端使用op无法正常插入数据,SQL如下
hive --hiveconf mapreduce.job.queuename=root.normal_queues.backstage.yfzx.op --hiveconf mapreduce.job.name="client_10.142.97.123:3000420211211:hql##pdwd.pdwd_pf_test2:1:dwarch:20210908_1:xiaoli" -e "insert overwrite table pdwd.pdwd_pf_test2 PARTITION (pt = '20211211')
select path from yfzx.hdfs_fsimage_analyze where dt = '20211212' and ns in ('ns3');"
yfzx.hdfs_fsimage_analyze表是创建在ns2,表pdwd.pdwd_pf_test2是创建在ns3,执行时抛出如下异常:
乍一看,以为是kerberos问题。他怀疑是两个表跨ns导致不能insert的。我做了如下一个测试
insert overwrite table pdwd.pdwd_pf_test2 PARTITION (pt = '20211211') select 'test_path';
执行也是抛出上面的异常,通过这个测试排除跨ns问题导致的。也就是当前op用户写入到ns3就是不行。于是去查看yarn的详细日志,看到的异常信息和上面差不多,但是info信息里发现了如下信息:
我们看到这个info里有ns3和ns4,于是去查看该节点的hive-site配置文件,发现了ns4的踪影,如下
因为这个表是写ns3的,于是把这些配置都改成写入ns3,重新执行上面SQL,SQL成功执行。通过这个问题我们发现,kerberos异常是表象,用kerberos知识去解决是解决不了的,我们要多留意有用的信息。这个确实是跨域导致无法写入,但是不是读表和写表跨域导致的,而是mr执行中间过程跨域导致的,也就是参数hive.exec.scratchdir导致