0

如何避免用户在提交 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 
4

1 回答 1

2

来自Hadoop 文档

配置参数可以声明为 final。一旦资源声明了一个最终值,后续加载的资源就不能更改该值(...)管理员通常在 core-site.xml 中将参数定义为最终值,用于用户应用程序可能无法更改的值。

<property>
  <name>dfs.hosts.include</name>
  <value>/etc/hadoop/conf/hosts.include</value>
  <final>true</final>
</property>

因此,如果您的用户通过 JDBC 连接,您只需修改配置。HiveServer2 用来使一些道具“最终”的文件。

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

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

于 2016-06-06T16:16:14.290 回答