避免用户覆盖 hadoop 2 中的默认 mapred 属性

Avoid user from overriding default mapred property in hadoop 2

如何避免用户在提交 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 用来制作一些道具的文件 "final".

如果您的用户使用遗留 hive CLI 连接,并且他们不是黑客,您只需要 (a) 修改 Hadoop 客户端的全局配置,或者 (b) 修补 "hive" 启动器脚本,以便它在非默认目录中选择特定的配置文件(通常通过在标准目录之前强制自定义目录来完成Hadoop CLASSPATH).

如果您的用户是黑客并且他们可以访问旧版 hive CLI,他们可以自己覆盖配置文件,因此从技术上讲您无法强制执行 <final> 属性。但无论如何,如果有人能做到这一点,那么 he/she 可能会得到你的工作 ;-)