1. 现象描述
通过 beeline 设置 job 的名字,抛出以下异常。但是 hive-cli 没有问题。
0: jdbc:hive2://bmr-master-479c2fa:2181/defau> set mapred.job.name=abc;
Error: Error while processing statement: Cannot modify mapred.job.name at runtime. It is not in list of params that are allowed to be modified at runtime (state=42000,code=1)
2. 原因分析
当 hive.security.authorization.enabled=true
的时候(注意,如果此参数在 hive-site.xml 和 hiveserver2-site.xml 同时存在,hiveserver2-site.xml 中的配置优先级高 ),检查命令的白名单。
命令设置白名单,通过参数 hive.security.authorization.sqlstd.confwhitelist
和 hive.security.authorization.sqlstd.confwhitelist.append
。
如果参数 hive.security.authorization.sqlstd.confwhitelist
没有配置,或者为空,则使用系统默认的白名单,所以 hive.security.authorization.sqlstd.confwhitelist
不能配置。
3. 解决办法
3.1 设置 hive.security.authorization.enabled=false
设置 hive.security.authorization.enabled=false
后,不走检查逻辑,所以可以配置。
3.2 设置 hive.security.authorization.sqlstd.confwhitelist.append
设置 hive.security.authorization.sqlstd.confwhitelist.append=mapred.job.name
或者使用通配符hive.security.authorization.sqlstd.confwhitelist.append=mapred.job.*
。多个配置项用 |
分割。