如何避免用户在提交 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
如何避免用户在提交 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 文档:
配置参数可以声明为 final。一旦资源声明了一个最终值,后续加载的资源就不能更改该值(...)管理员通常在 core-site.xml 中将参数定义为最终值,用于用户应用程序可能无法更改的值。
<property>
<name>dfs.hosts.include</name>
<value>/etc/hadoop/conf/hosts.include</value>
<final>true</final>
</property>
因此,如果您的用户通过 JDBC 连接,您只需修改配置。HiveServer2 用来使一些道具“最终”的文件。
如果您的用户使用旧版hive
CLI 连接,并且他们不是黑客,您只需(a)修改 Hadoop 客户端的全局 conf,或(b)修改“hive”启动器脚本,以便它选择特定的配置文件在非默认目录中(通常通过在标准 Hadoop CLASSPATH 之前强制自定义目录来完成)。
如果您的用户是黑客并且他们可以访问旧版hive
CLI,他们可以自己覆盖配置文件,因此从技术上讲您无法强制执行<final>
属性。但无论如何,如果有人能做到这一点,那么他/她可能无论如何都会得到你的工作;-)