Hadoop-2.2.0中文文档—— MapReduce 下一代 - Encrypted Shuffle
来源:互联网 发布:office教程 知乎 编辑:程序博客网 时间:2024/06/15 21:50
简介
Encrypted Shuffle capability (加密洗牌功能?)允许用HTTPS 和 可选的客户端验证 (也称作双向的 HTTPS, 或有客户端证书的 HTTPS) 去加密 MapReduce shuffle.它包括:
- 在HTTP 和 HTTPS 之间绑定 shuffle 的一个 Hadoop 配置
- 用来指定 keystore 和 truststore 属性的Hadoop配置(位置,类型,密码) 用于 shuffle 服务和reducer任务去取 shuffle 数据。
- 在集群中交叉重载 truststores (当一个节点加入或删除时).
配置
core-site.xml 属性
要允许加密shuffle, 在 core-site.xml 中对集群中的所有节点设置下面的属性:
属性默认值说明hadoop.ssl.require.client.cert
false
客户端证书是否需要hadoop.ssl.hostname.verifier
DEFAULT
提供给HttpsURLConnections的主机名验证器. 合法的值是:DEFAULT, STRICT, STRICT_I6, DEFAULT_AND_LOCALHOST 和ALLOW_ALL
hadoop.ssl.keystores.factory.class
org.apache.hadoop.security.ssl.FileBasedKeyStoresFactory
要用的KeyStoresFactory实现hadoop.ssl.server.conf
ss-server.xml
要抽取keystore信息的 ssl服务器中的文件。这个文件要在classpath中查找, 一般应该在 Hadoop conf/ 目录中。
hadoop.ssl.client.conf
ss-client.xml
要抽取keystore信息的 ssl服务器中的文件。这个文件要在classpath中查找, 一般应该在 Hadoop conf/ 目录中。
重要: 当前需要把客户端证书设置为false。参考 Client Certificates 一节以获得细节内容。
重要:在集群配置文件中的所有属性应该标记为 final。
示例 :
... <property> <name>hadoop.ssl.require.client.cert</name> <value>false</value> <final>true</final> </property> <property> <name>hadoop.ssl.hostname.verifier</name> <value>DEFAULT</value> <final>true</final> </property> <property> <name>hadoop.ssl.keystores.factory.class</name> <value>org.apache.hadoop.security.ssl.FileBasedKeyStoresFactory</value> <final>true</final> </property> <property> <name>hadoop.ssl.server.conf</name> <value>ssl-server.xml</value> <final>true</final> </property> <property> <name>hadoop.ssl.client.conf</name> <value>ssl-client.xml</value> <final>true</final> </property> ...
mapred-site.xml
属性
要允许加密shuffle, 在 mapred-site.xml 中对集群中的所有节点设置下面的属性:
属性默认值说明mapreduce.shuffle.ssl.enabled
false
加密 shuffle允许与否重要: 在集群配置文件中的这个属性应该标记为 final。
示例 :
... <property> <name>mapreduce.shuffle.ssl.enabled</name> <value>true</value> <final>true</final> </property> ...
Linux 容器执行器应该设置为阻止作业任务读取服务器的keystore信息,以及获得shuffle服务器证书。
参考 Hadoop Kerberos 配置,以获得此处如何做的细节。
Keystore 和 Truststore 的设置
当前 FileBasedKeyStoresFactory
是 KeyStoresFactory
的唯一实现. FileBasedKeyStoresFactory
实现用了下面的属性, 在 ssl-server.xml 和 ssl-client.xml 文件中,用来配置 keystores 和 truststores.
ssl-server.xml
(Shuffle server) 的配置:
mapred 用户应该拥有ssl-server.xml文件并有唯一地访问权。
属性默认值说明ssl.server.keystore.type
jks
Keystore 文件类型ssl.server.keystore.location
NONEKeystore 文件的位置. mapred 用户应该拥有此文件并有唯一地访问权。
ssl.server.keystore.password
NONEKeystore 文件密码ssl.server.truststore.type
jks
Truststore 文件类型ssl.server.truststore.location
NONETruststore 文件的位置. mapred 用户应该拥有此文件并有唯一地访问权。
ssl.server.truststore.password
NONETruststore 文件密码ssl.server.truststore.reload.interval
10000Truststore 重载间距, 毫秒值示例:<configuration> <!-- Server Certificate Store --> <property> <name>ssl.server.keystore.type</name> <value>jks</value> </property> <property> <name>ssl.server.keystore.location</name> <value>${user.home}/keystores/server-keystore.jks</value> </property> <property> <name>ssl.server.keystore.password</name> <value>serverfoo</value> </property> <!-- Server Trust Store --> <property> <name>ssl.server.truststore.type</name> <value>jks</value> </property> <property> <name>ssl.server.truststore.location</name> <value>${user.home}/keystores/truststore.jks</value> </property> <property> <name>ssl.server.truststore.password</name> <value>clientserverbar</value> </property> <property> <name>ssl.server.truststore.reload.interval</name> <value>10000</value> </property></configuration>
ssl-client.xml
(Reducer/Fetcher) 的配置:
mapred 用户应该拥有ssl-server.xml文件并它应该有默认的权限。
属性默认值说明ssl.client.keystore.type
jks
Keystore 文件类型ssl.client.keystore.location
NONEKeystore 文件的位置. mapred 用户应该拥有此文件并有唯一地访问权。
ssl.client.keystore.password
NONEKeystore 文件密码ssl.client.truststore.type
jks
Truststore 文件类型ssl.client.truststore.location
NONETruststore 文件的位置. mapred 用户应该拥有此文件并有唯一地访问权。
ssl.client.truststore.password
NONETruststore 文件密码ssl.client.truststore.reload.interval
10000Truststore 重载间距, 毫秒值示例 :
<configuration> <!-- Client certificate Store --> <property> <name>ssl.client.keystore.type</name> <value>jks</value> </property> <property> <name>ssl.client.keystore.location</name> <value>${user.home}/keystores/client-keystore.jks</value> </property> <property> <name>ssl.client.keystore.password</name> <value>clientfoo</value> </property> <!-- Client Trust Store --> <property> <name>ssl.client.truststore.type</name> <value>jks</value> </property> <property> <name>ssl.client.truststore.location</name> <value>${user.home}/keystores/truststore.jks</value> </property> <property> <name>ssl.client.truststore.password</name> <value>clientserverbar</value> </property> <property> <name>ssl.client.truststore.reload.interval</name> <value>10000</value> </property></configuration>
激活Encrypted Shuffle
当你改变了上面的配置,要通过重启所有的 NodeManagers 来激活 Encrypted Shuffle.
重要: 使用 encrypted shuffle 会导致对性能有明显影响。用户应该避免这种情况,并尽可能地 保留1或更多的加密 shuffle 核心。(?)
ClientCertificates 客户端证书
使用客户端证书并不能完全保证客户端是作业的一个reducer任务。当前,客户端证书(他们的私钥)keystore 文件 必须对所有提交作业到集群的用户 是可读的。这意味着一个欺诈性的作业可以读这些 keystore 文件,并在其上使用客户端证书与一个Shuffle服务器建立安全连接。然而,除非欺诈性作业有一个合理的 JobToken, 否则它将不能从 Shuffle server 上检索数据。一个作业,用其自己的 JobToken, 仅可以检索属于它自身的数据。
重载Truststores
默认地, truststores 会每10秒重载一次他们的配置文件。如果在一个旧的 truststore 文件 上复制了一个新的,它会被重新读取,它的证书也会替换掉旧的。这种机制对于从集群上添加或删除节点,或者是添加/删除信任的客户端非常有用。这种情况下,客户端或者 NodeManager 证书就被添加到(或从中删除)系统中的所有的 truststore 文件上,并且不必重启 NodeManager 守护进程,新的配置就会被发现。
Debugging
注意: 启用 debugging 仅仅是为了发现和解决问题,作业也只是运行在小量数据上。会几个数量级地减慢作业,也是冗长的。(你可能需要增加 mapred.task.timeout 防止作业失败,因为任务执行如此之慢。)
要在 reducers 中允许 SSL debugging, 设置
-Djavax.net.debug=all
in themapreduce.reduce.child.java.opts
属性; 例如:<property> <name>mapred.reduce.child.java.opts</name> <value>-Xmx-200m -Djavax.net.debug=all</value> </property>
你可以在每个作业上都这样做,或用
mapred-site.xml 的集群范围内的设置。
要在 NodeManager 中设置这个属性, 请在
yarn-env.sh
文件中设置:YARN_NODEMANAGER_OPTS="-Djavax.net.debug=all $YARN_NODEMANAGER_OPTS"
- Hadoop-2.2.0中文文档—— MapReduce 下一代 - Encrypted Shuffle
- Hadoop-2.2.0中文文档—— MapReduce 下一代 - Encrypted Shuffle
- Hadoop-2.2.0中文文档—— MapReduce下一代- 可插入的 Shuffle 和 Sort
- Hadoop-2.2.0中文文档—— MapReduce下一代- 可插入的 Shuffle 和 Sort
- Hadoop-2.2.0中文文档——Apache Hadoop 下一代 MapReduce (YARN)
- Hadoop-2.2.0中文文档——MapReduce 下一代 -——集群配置
- Hadoop-2.2.0中文文档——MapReduce 下一代 -——集群配置
- Hadoop-2.2.0中文文档——MapReduce 下一代 —配置一个单节点集群
- Hadoop-2.2.0中文文档—— MapReduce 下一代--容量调度器
- Hadoop-2.2.0中文文档—— MapReduce 下一代 -- 公平调度器
- Hadoop-2.2.0中文文档—— MapReduce 下一代--容量调度器
- Hadoop-2.2.0中文文档——MapReduce--写YARN应用
- Hadoop-2.2.0中文文档——MapReduce--写YARN应用
- hadoop一些基本知识——Mapreduce shuffle和排序
- Hadoop mapreduce shuffle
- 下一代hadoop(Mapreduce),YARN/MRv2
- Hadoop-2.2.0中文文档—— 从Hadoop 1.x 迁移至 Hadoop 2.x
- Hadoop-2.2.0中文文档—— Shell命令
- ToolRunner机制
- Puppet Internals
- Spring的组件自动扫描机制
- 代理传值 回调的使用
- OC-文件夹/文件的创建
- Hadoop-2.2.0中文文档—— MapReduce 下一代 - Encrypted Shuffle
- 《Linux设备驱动程序》——中断处理
- 行人检测算法(ICF DPM)&CCV(A Morden Computer Vision Library)的使用&VisualBox下使用Ubuntu
- 使用SVN的时候右键里找不到checkout选项的解决方法
- JVM整理
- oracle中rownum和rowid的区别
- URL编码与解码
- 重装系统 SSD+HDD并开启IRST(英特尔快速存储技术)
- 在构造函数内调用non-final函数时要当心