栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

案例 3 Hadoop集群Shuffle加密

案例 3 Hadoop集群Shuffle加密

目录

1 案例目标

2 环境要求

3 知识储备

4 案例流程

5 案例实践

Step 1 core-site.xml配置

Step 2 mapred-site.xml配置

Step 3 Keystore和Truststore设置

Step 4 激活Shuffle加密

Step 5 运行测试

6 案例解析

客户端证书

重载Truststore

7 案例总结


1 案例目标

使用SSL证书对Shuffle过程加密

2 环境要求

Hadoop完全分布式集群

主机Hadoop功能
hadoop01namenode/resourceManager/作业提交客户端
hadoop02datanode/nodeManager
hadoop03datanode/nodeManager

3 知识储备

除了web通讯之外,Hadoop集群的进程和服务之间常规的数据交换基于RPC(remote procedure call,远程过程调用)。这包括控制消息,状态消息或者数据,而且在主机间进行Shuffle和Sort操作时也需要交互中间数据。

当然最佳方式是进行网络隔离,防止数据被嗅探,但是一种妥协的做法是使用加密的SSL进行RPC通讯。

通过安装必要的证书并且在集群从节点上进行配置,这样可以使shuffle在交互中间数据时进行加密。

在MapReduce作业的生命周期中,Shuffle是将数据由Map任务向Reduce任务移动的过程。这个数据移动过程需要通过网络跨多个机器。跨网络移动数据通常使用HTTP协议。

HTTP协议本身是纯文本,是一种非加密形式,这会导致信息泄露。HTTPS是HTTP的加密形式,HTTP端点间的数据包会使用SSL(Secure Socket Layer )加密。Hadoop允许在Map和Reduce任务节点间利用HTTPS对Shuffle过程进行加密。

Hadoop提供了相应的配置,可以做到:

控制shuffle过程在HTTP和HTTPS间进行切换

指定HTTP加密使用的keystore和truststore

当添加或者移除节点时重载truststore

4 案例流程

    在core-site.xml添加SSL配置

    配置mapred-site.xml启用shuffle加密

    ssl-server.xml和ssl-client.xml指定keystore和truststore

    启动集群

    运行测试

5 案例实践

Step 1 core-site.xml配置

要使shuffle启用加密可以在集群中所有节点的core-site.xml中配置如下属性:

属性默认值说明
hadoop.ssl.require.client.certfalse是否需要客户端证书
hadoop.ssl.hostname.verifierDEFAULT提供给HttpsURLConnections的主机名验证器. 合法的值是: DEFAULT, STRICT, STRICT_I6, DEFAULT_AND_LOCALHOST 和ALLOW_ALL
hadoop.ssl.keystores. factory.classorg.apache.hadoop.security. ssl.FilebasedKeyStoresFactory要用的KeyStoresFactory实现
hadoop.ssl.server.confssl-server.xml配置提取ssl server keystore信息的文件,该文件通常在类路径中,比如:Hadoop的conf文件夹
hadoop.ssl.client.confssl-client.xml配置提取ssl server keystore信息的文件,该文件通常在类路径中,比如:Hadoop的conf文件夹
hadoop.ssl.enabled.protocolsTLSv1,SSLv2Hello,TLSv1.1,TLSv1.2支持的SSL协议

说明:

客户端证书通常需要设置为false,原因参考后面【其他说明-客户端证书】一节

集群中配置文件中的所有属性标记为final,表示不允许修改配置,比如其他框架或者用户

core-site.xml具体配置:

  
    hadoop.ssl.require.client.cert
    false
    true
  
​
  
    hadoop.ssl.hostname.verifier
    DEFAULT
    true
  
​
  
    hadoop.ssl.keystores.factory.class
    org.apache.hadoop.security.ssl.FilebasedKeyStoresFactory
    true
  
​
  
    hadoop.ssl.server.conf
    ssl-server.xml
    true
  
​
  
    hadoop.ssl.client.conf
    ssl-client.xml
    true
  

[root@hadoop01 ~]# cd /opt/hadoop-2.8.5/etc/hadoop/
[root@hadoop01 hadoop]# ll

 

Step 2 mapred-site.xml配置

要启用加密的shuffle,需要在集群的所有节点上对mapred-site.xml做如下属性配置:

属性默认值说明
mapreduce.shuffle.ssl.enabledfalse是否启用加密shuffle

说明:

在集群配置文件中,该属性必须标记为final

mapred-site.xml具体配置


  mapreduce.shuffle.ssl.enabled
  true
  true

Step 3 Keystore和Truststore设置

当前FilebasedKeyStoresFactory是唯一的KeyStoresFactory实现。在FilebasedKeyStoresFactory中需要通过ssl-server.xml和ssl-client.xml文件设置相关属性,以便配置keystore和truststore。

ssl-server.xml (Shuffle server)配置:

属性默认值说明
ssl.server.keystore.typejksKeystore文件类型(jks表示:Java keystores)
ssl.server.keystore.locationNONE本地节点的Keystore文件位置,运行任何MapReduce作业都需要读取次文件
ssl.server.keystore.passwordNONEKeystore文件密码,任何keystore和truststore都是受密码保护的,这里指定访问keystore的密码
ssl.server.truststore.typejksTruststore文件类型
ssl.server.truststore.locationNONETruststore文件位置
ssl.server.truststore.passwordNONETruststore文件密码
ssl.server.truststore.reload.interval10000Truststore重载间隔,单位为毫秒

复制ssl-server.xml.example文件生成一份新的ssl-server.xml文件:
[root@hadoop01 hadoop]# cp ssl-server.xml.example ssl-server.xml

ssl-server.xml具体配置


  
  
     ssl.server.truststore.type
     jks
     Optional. The keystore file format, default value is "jks".
     
  

  
     ssl.server.truststore.location
     ${user.home}/keystores/truststore.jks
     Truststore to be used by NN and DN. Must be specified.
     
  

  
     ssl.server.truststore.password
     Smx990726@
     Optional. Default value is "".
     
  

  
     ssl.server.truststore.reload.interval
     10000
     Truststore reload check interval, in milliseconds.
     Default value is 10000 (10 seconds).
     
  

  
  
     ssl.server.keystore.type
     jks
     Optional. The keystore file format, default value is "jks".
     
  

  
     ssl.server.keystore.location
     ${user.home}/keystores/server-keystore.jks
     Keystore to be used by NN and DN. Must be specified.
       
  

  
     ssl.server.keystore.password
     Smx990726@
     Must be specified.
     
  

  
     ssl.server.keystore.keypassword
     Smx990726@
     Must be specified.
     
  

  
     ssl.server.exclude.cipher.list
     TLS_ECDHE_RSA_WITH_RC4_128_SHA,SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA,
     SSL_RSA_WITH_DES_CBC_SHA,SSL_DHE_RSA_WITH_DES_CBC_SHA,
     SSL_RSA_EXPORT_WITH_RC4_40_MD5,SSL_RSA_EXPORT_WITH_DES40_CBC_SHA,
     SSL_RSA_WITH_RC4_128_MD5
     Optional. The weak security cipher suites that you want excluded
     from SSL communication.
  


ssl-client.xml(Reducer/Fetcher)配置

属性默认值说明
ssl.client.keystore.typejksKeystore文件类型
ssl.client.keystore.locationNONE本地节点上的Keystore文件位置,运行任何MapReduce作业都需要访问此文件
ssl.client.keystore.passwordNONEKeystore文件密码
ssl.client.truststore.typejksTruststore文件类型
ssl.client.truststore.locationNONETruststore文件位置
ssl.client.truststore.passwordNONETruststore文件密码
ssl.client.truststore.reload.interval10000Truststore重载间隔,单位为毫秒

复制ssl-client.xml.example文件生成一份新的ssl-client.xml文件:
[root@hadoop01 hadoop]# cp ssl-client.xml.example ssl-client.xml

ssl-client.xml具体配置


  
  
     ssl.client.truststore.type
     jks
     Optional. The keystore file format, default value is "jks".
     
  

  
     ssl.client.truststore.location
     ${user.home}/keystores/truststore.jks
     Truststore to be used by clients like distcp. Must be specified.
     
  

  
     ssl.client.truststore.password
     Smx990726@
     Optional. Default value is "".
     
  

  
     ssl.client.truststore.reload.interval
     10000
     Truststore reload check interval, in milliseconds.
     Default value is 10000 (10 seconds).
     
  

  
  
     ssl.client.keystore.type
     jks
     Optional. The keystore file format, default value is "jks".
     
  

  
     ssl.client.keystore.location
     ${user.home}/keystores/client-keystore.jks
     Keystore to be used by clients like distcp. Must be specified.
     
  

  
     ssl.client.keystore.password
     Smx990726@
     Optional. Default value is "".
     
  

  
     ssl.client.keystore.keypassword
     Smx990726@
     Optional. Default value is "".
     
  


Step 4 激活Shuffle加密

激活Shuffle加密需要重启所有NodeManagers节点:start-all.sh

注意:使用加密的shuffle会带来明显的性能问题

Step 5 运行测试
hadoop jar /opt/hadoop-2.8.5/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar pi 4 1000

如果没有可信任证书,将出现如下错误(说明shuffle加密已经起作用,shuflle时需要使用证书加密):

 

成功的截图 :

 

 

注意:在这里我的执行正确,但是由于我的虚拟机硬盘默认8G,所以会kill mapreduce进程

Container killed on request. Exit code is 143
Container exited with a non-zero exit code 143

 修改虚拟机硬盘内存:

先将集群关闭:[root@hadoop01 ~]# shutdown -h now  三台节点都关闭

 

 

6 案例解析

客户端证书

目前,客户端证书(私钥)keystore文件对所有向集群提交作业的用户来说都是可读的,因此使用客户端证书也不能完全保证客户端作业是一个合法的reducer任务,一些非法的作业可以读取keystore文件,并使用客户端证书和shuffle服务器建立连接,但是除非它有一个合理的JobToken,否则不能从Shuffle上返回数据。一个作业,通过自己的JobToken仅可以检索属于它自己的数据。

重载Truststore

默认情况下,truststore每隔10秒重载一次配置。如果使用新的truststore文件替换旧的文件,这个文件会被重新读取。它上面的证书也会被换成新证书。通过这种机制可以向集群添加或者删除节点,或者添加或者移除受信任的客户端。新配置生效不必重启NodeManager。

7 案例总结

    在Hadoop集群中,默认情况下,任何人都可以提交作业,使用计算资源

    Map阶段完成后,在进行Reduce阶段时要经历Shuffle阶段在各节点间传输数据,默认情况下这个过程没有使用HTTPS传输

    通过本案例是Shuffle过程基于SSL进行传输数据

    要基于SSL需要配置keystore和truststore

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/757882.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号