如何避免用户在提交hive作业时覆盖hadoop配置文件的默认属性?
例子:
mapred-site.xml:
<property>
<name>mapreduce.job.heap.memory-mb.ratio</name>
<value>0.8</value>
</property>
用户在配置单元作业中使用以下属性来覆盖
set mapreduce.job.heap.memory-mb.ratio=0.9
最佳答案
来自 Hadoop documentation :
Configuration parameters may be declared final. Once a resource declares a value final, no subsequently-loaded resource can alter that value (...) Administrators typically define parameters as final in core-site.xml for values that user applications may not alter.
<property>
<name>dfs.hosts.include</name>
<value>/etc/hadoop/conf/hosts.include</value>
<final>true</final>
</property>
因此,如果您的用户通过 JDBC 连接,您只需要修改配置即可。 HiveServer2 用来使一些 Prop “最终”的文件。
如果您的用户连接到旧版 hive
CLI,他们不是黑客,您只需要(a) 修补 Hadoop 客户端的全局配置,或者 (b) 修补“hive”启动器脚本以便它在非默认目录中选择特定的配置文件(通常通过在标准 Hadoop CLASSPATH 之前强制自定义目录来完成)。
如果您的用户是黑客并且他们可以访问旧版 hive
CLI,他们可以自己覆盖配置文件,所以从技术上讲你不能强制执行 <final>
特性。但无论如何,如果有人能做到这一点,那么他/她可能无论如何都会得到你的工作 ;-)
关于hadoop - 避免用户覆盖 hadoop 2 中的默认 mapred 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37656572/