
# 配置MapReduce应用安全认证
#### 场景说明
在安全集群环境下，各个组件之间的相互通信不能够简单地互通，而需要在通信之前进行相互认证，以确保通信的安全性。
用户在提交MapReduce应用程序时，需要与Yarn、HDFS等之间进行通信。那么提交MapReduce的应用程序中需要写入安全认证代码，确保MapReduce程序能够正常运行。
安全认证有两种方式：
- 命令行认证： 提交MapReduce应用程序运行前，在MapReduce客户端执行如下命令获得认证。
  *kinit* *组件业务用户*
  
- 代码认证： 通过获取客户端的principal和keytab文件在应用程序中进行认证。
  
 
#### MapReduce的安全认证代码
目前使用统一调用LoginUtil类进行安全认证。
在MapReduce样例工程的"com.huawei.bigdata.mapreduce.examples"包的"FemaleInfoCollector"类的代码中，test@*\<系统域名\>*、user.keytab和krb5.conf为示例，实际操作时需要已将相应账号对应权限的keytab文件和krb5.conf文件放入到"conf"目录，安全登录方法如下代码所示。
```
public static final String PRINCIPAL= "test@<系统域名>";
public static final String KEYTAB = FemaleInfoCollector.class.getClassLoader().getResource("user.keytab").getPath();
public static final String KRB = FemaleInfoCollector.class.getClassLoader().getResource("krb5.conf").getPath();
...
// Security login
LoginUtil.login(PRINCIPAL, KEYTAB, KRB, conf);
```
![](https://support.huaweicloud.com/devg3-mrs/public_sys-resources/note_3.0-zh-cn.png)
- test：为[准备集群认证用户信息](https://support.huaweicloud.com/devg3-mrs/mrs_07_150034.html#mrs_07_150034__section10916205214313)创建的用户名称，例如**develop** **user**。
- 系统域名：登录FusionInsight Manager后，选择"系统 \> 权限 \> 域和互信"，查看"本端域"参数，即为当前系统域名。
 
