
# 配置Hadoop数据传输加密
在大数据集群运行过程中，Hadoop各组件之间（如HDFS、Yarn、Spark、HBase等）通过RPC通道进行数据传输和指令交互。默认情况下，这些通信通道不加密，数据以明文方式在网络中传输。当集群部署在公网或非可信网络环境中时，未加密的数据可能被中间人截获，导致敏感信息泄露。那么，如何对Hadoop组件间的数据传输通道进行加密？MRS支持通过修改Hadoop组件配置参数，启用RPC通道和数据传输通道的加密协议，保障数据传输安全。同时支持配置Web服务的最大并发连接数限制，防止服务因过载而不可用。
#### 设置Hadoop组件安全通道加密
安全加密通道是HDFS中RPC通信的一种加密协议，当用户调用RPC时，用户的login name会通过RPC头部传递给RPC，之后RPC使用Simple Authentication and Security Layer（SASL）确定一个权限协议（支持Kerberos和DIGEST-MD5两种），完成RPC授权。
默认情况下，大数据集群内组件间的通信是不加密的，为防止数据在公网或非可信网络中被截获，集群管理员可以调整Hadoop组件相关配置，使用加密协议对数据传输通道加密。
在HDFS组件的配置界面中设置相关参数的值，设置后全局生效，即Hadoop中各模块的RPC通道是否加密全部生效。
Hadoop中RPC通道包括：
- 客户端访问HDFS的RPC通道。
- HDFS中各模块间的RPC通道，如DataNode与NameNode间的RPC通道。
- 客户端访问Yarn的RPC通道。
- NodeManager和ResourceManager间的RPC通道。
- Spark访问Yarn、Spark访问HDFS的RPC通道。
- Mapreduce访问Yarn、Mapreduce访问HDFS的RPC通道。
- HBase访问HDFS的RPC通道。
以下操作步骤适用于在HDFS组件的配置界面中设置相关参数的值，设置后全局生效，即Hadoop中各模块的RPC通道是否加密全部生效。
1. 进入HDFS服务配置页面，修改数据传输加密参数。 
   在集群Manager管理界面中，选择"集群 \> 服务 \> *服务名* \> 配置"，展开"全部配置"页签，在搜索框中输入参数名称，**修改配置参数后需要重启对应服务以使配置生效**。
   登录集群Manager具体操作，请参考[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
   
   
2. 根据业务安全需求，参考下表修改对应参数的值。 
   表1参数说明 
   | 服务名称  | 配置参数                                    | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | 缺省值                                                                                                                                                                                                            |
   |:---|:---|:---|:---|
   | HDFS  | hadoop.rpc.protection                   | 设置Hadoop中各模块的RPC通道是否加密。 - 设置为"privacy"表示通道加密，认证、完整性和隐私性功能都全部开启。这种方式会降低性能。  - 设置为"integrity"表示不加密，只开启认证和完整性功能。 为保证数据安全，请谨慎使用这种方式。  - 设置为"authentication"表示不加密，仅要求认证报文，不要求完整性和隐私性。这种方式能保证性能但存在安全风险。   本参数设置后全局生效，即Hadoop中各模块的RPC通道的加密属性全部生效。 - **设置后需要重启服务生效，且不支持滚动重启。**  - **设置后需要重新下载客户端配置，否则HDFS无法提供读写服务。**   | - 安全模式：privacy  - 普通模式：authentication   |
   | HDFS  | dfs.encrypt.data.transfer               | 设置客户端访问HDFS的通道和HDFS数据传输通道是否加密，包括DataNode间的数据传输通道、客户端访问DataNode的DT（Data Transfer）通道。 仅当"hadoop.rpc.protection"设置为"privacy"时使用，业务数据传输量较大时，默认启用加密对性能影响严重，使用时请注意。 如果互信集群的一端集群配置了数据传输加密，则对端集群也需配置同样的数据传输加密。 - 设置为"true"表示加密。  - 设置为"false"表示不加密。                                                                                                                                                                                                                                                                      | false                                                                                                                                                                                                          |
   | HDFS  | dfs.encrypt.data.transfer.algorithm     | 设置客户端访问HDFS的通道和HDFS数据传输通道的加密算法。只有在"dfs.encrypt.data.transfer"配置项设置为"true"，此参数才会生效。 - 缺省值为"3des"，表示采用3DES算法进行加密。  - 设置为"rc4"，采用RC4加密算法进行加密，为避免出现安全隐患，不推荐设置为该值。                                                                                                                                                                                                                                                                                                                                                                                                                        | 3des                                                                                                                                                                                                           |
   | HDFS  | dfs.encrypt.data.transfer.cipher.suites | 指定数据加密的密码套件。 可以设置为空或"AES/CTR/NoPadding"，如果不指定此参数，则使用"dfs.encrypt.data.transfer.algorithm"参数指定的加密算法进行数据加密。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | AES/CTR/NoPadding                                                                                                                                                                                              |
   | HBase | hbase.rpc.protection                    | 设置HBase通道是否加密，包含HBase客户端访问HBase服务端的RPC（remote procedure call）通道，HMaster和RegionServer间的RPC通道。 - 设置为"privacy"表示通道加密，认证、完整性和隐私性功能都全部开启。  - 设置为"integrity"表示不加密，只开启认证和完整性功能。  - 设置为"authentication"表示不加密，仅要求认证报文，不要求完整性和隐私性。   privacy方式会对传输内容进行加密，包括用户Token等敏感信息，以确保传输信息的安全，但是该方式对性能影响很大，对比另外两种方式，会带来约60%的读写性能下降。 请根据企业安全要求修改配置，且客户端与服务端中该配置项需使用相同设置。                                                                                                                                        | - 安全模式：privacy  - 普通模式：authentication            |
      
   
   
3. 验证配置是否生效。 
   在集群Manager管理界面，选择"集群 \> 服务 \> HDFS \> 概览"，查看HDFS服务状态是否为良好。
   使用重新下载的客户端执行HDFS文件读写操作，确认数据传输加密已启用（可通过查看DataNode日志中是否出现加密握手记录确认）。
   
   
 
#### Web最大并发连接数限制
在配置数据传输加密的同时，集群管理员可能还需要保护Web服务器的可靠性。当大量用户同时访问Web服务时，可能导致服务过载甚至不可用。通过设置Web最大并发连接数限制，可对新增用户连接进行限制，防止服务因过载而不可用，同时避免DDOS攻击。
1. 在集群Manager管理界面中，选择"集群 \> 服务 \> *服务名* \> 配置"，展开"全部配置"页签，在搜索框中输入参数名称，**修改配置参数后需要重启对应服务以使配置生效**。
2. 根据业务需求，参考下表修改对应参数的值。 
   表2参数说明 
   | **服务名称**      | **配置参数**                       | **说明**                                                                         | **缺省值** |
   |:---|:---|:---|:---|
   | HDFS/Yarn     | hadoop.http.server.MaxRequests | 该参数用于设置各组件Web的最大并发连接数限制。当并发连接数达到此值时，新增连接将被拒绝。建议根据集群规模和并发用户数调整，默认值2000适用于大多数场景。 | 2000    |
   | Spark/Spark2x | spark.connection.maxRequest    | 该参数用于设置JobHistory允许的最大请求连接数。当并发请求数达到此值时，新增请求将被拒绝。建议根据Spark作业并发量调整。             | 5000    |
      
   
   
3. 验证配置是否生效。 
   重启对应服务后，在浏览器中访问对应Web页面，确认页面可正常加载。可通过模拟并发访问测试连接数限制是否生效。
   
   
 
#### 相关文档
了解安全Hadoop RPC的更多技术细节，请参考以下文档：
- MRS 3.2.0之前版本：[Hadoop SecureMode - Data Encryption on RPC](https://hadoop.apache.org/docs/r3.1.1/hadoop-project-dist/hadoop-common/SecureMode.html#Data_Encryption_on_RPC)
- MRS 3.2.0及之后版本：[Hadoop SecureMode - Data Encryption on RPC](https://hadoop.apache.org/docs/r3.3.1/hadoop-project-dist/hadoop-common/SecureMode.html#Data_Encryption_on_RPC)
- 如需配置Kerberos认证，请参考[MRS集群Kerberos认证介绍](https://support.huaweicloud.com/usermanual-mrs/mrs_07_020001.html)。
- 如需重新下载客户端配置，请参考[服务端配置过期后更新MRS集群客户端](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0090.html)。
 
