【问题标题】:Avoid user from overriding default mapred property in hadoop 2避免用户覆盖 hadoop 2 中的默认 mapred 属性
【发布时间】:2016-06-06 11:44:01
【问题描述】:
如何避免用户在提交hive作业时覆盖hadoop配置文件的默认属性?
示例:
mapred-site.xml:
<property>
<name>mapreduce.job.heap.memory-mb.ratio</name>
<value>0.8</value>
</property>
用户在 hive 作业中使用以下属性来覆盖
set mapreduce.job.heap.memory-mb.ratio=0.9
【问题讨论】:
标签:
hadoop
hive
hbase
hive-configuration
【解决方案1】:
来自Hadoop documentation:
配置参数可以声明为final。一旦资源
声明一个值 final,任何后续加载的资源都不能改变它
value (...) 管理员通常在 core-site.xml 中将参数定义为 final,用于用户应用程序可能不会更改的值。
<property>
<name>dfs.hosts.include</name>
<value>/etc/hadoop/conf/hosts.include</value>
<final>true</final>
</property>
因此,如果您的用户通过 JDBC 连接,您只需修改配置。 HiveServer2 用于使某些道具“最终”的文件。
如果您的用户使用旧版 hive CLI 连接,并且他们不是黑客,您只需 (a) 修改 Hadoop 客户端的全局配置,或者 (b ) 修改“hive”启动器脚本,以便它选择非默认目录中的特定配置文件(通常通过强制将自定义目录置于标准 Hadoop CLASSPATH 之前完成)。
如果您的用户是黑客并且他们可以访问旧版 hive CLI,他们可以自己覆盖配置文件,因此从技术上讲,您无法强制执行 <final> 属性。但无论如何,如果有人能做到这一点,那么他/她可能无论如何都会得到你的工作;-)