简单介绍

Encrypted Shuffle capability (加密洗牌功能?

)同意用HTTPS 和 可选的client验证 (也称作双向的 HTTPS, 或有client证书的 HTTPS) 去加密 MapReduce shuffle.它包含:

  • 在HTTP 和 HTTPS 之间绑定 shuffle 的一个 Hadoop 配置
  • 用来指定 keystore 和 truststore 属性的Hadoop配置(位置,类型,password) 用于 shuffle 服务和reducer任务去取 shuffle 数据。

  • 在集群中交叉重载 truststores (当一个节点增加或删除时).

配置

core-site.xml 属性

要同意加密shuffle, 在 core-site.xml 中对集群中的全部节点设置以下的属性:

属性 默认值 说明
hadoop.ssl.require.client.cert false client证书是否须要
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信息的 sslserver中的文件。

这个文件要在classpath中查找, 一般应该在 Hadoop conf/ 文件夹中。
hadoop.ssl.client.conf ss-client.xml 要抽取keystore信息的 sslserver中的文件。

这个文件要在classpath中查找, 一般应该在 Hadoop conf/ 文件夹中。

重要: 当前须要把client证书设置为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 容器运行器应该设置为阻止作业任务读取server的keystore信息,以及获得shuffleserver证书。

參考 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 NONE Keystore 文件的位置. 

mapred 用户应该拥有此文件并有唯一地訪问权。

ssl.server.keystore.password NONE Keystore 文件password
ssl.server.truststore.type jks Truststore 文件类型
ssl.server.truststore.location NONE Truststore 文件的位置. 

mapred 用户应该拥有此文件并有唯一地訪问权。
ssl.server.truststore.password NONE Truststore 文件password
ssl.server.truststore.reload.interval 10000 Truststore 重载间距, 毫秒值

演示样例:

<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 NONE Keystore 文件的位置. 

mapred 用户应该拥有此文件并有唯一地訪问权。
ssl.client.keystore.password NONE Keystore 文件password
ssl.client.truststore.type jks Truststore 文件类型
ssl.client.truststore.location NONE Truststore 文件的位置. 

mapred 用户应该拥有此文件并有唯一地訪问权。
ssl.client.truststore.password NONE Truststore 文件password
ssl.client.truststore.reload.interval 10000 Truststore  重载间距, 毫秒值
演示样例 :
<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 client证书

使用client证书并不能全然保证client是作业的一个reducer任务。当前。client证书(他们的私钥)keystore 文件 必须对全部提交作业到集群的用户 是可读的。这意味着一个欺诈性的作业能够读这些 keystore 文件,并在其上使用client证书与一个Shuffle服务器建立安全连接。然而。除非欺诈性作业有一个合理的 JobToken, 否则它将不能从 Shuffle server 上检索数据。 一个作业,用其自己的 JobToken, 仅能够检索属于它自身的数据。

重载Truststores

默认地。 truststores 会每10秒重载一次他们的配置文件。假设在一个旧的 truststore 文件 上复制了一个新的,它会被又一次读取。它的证书也会替换掉旧的。这样的机制对于从集群上加入或删除节点。或者是加入/删除信任的client很实用。这样的情况下,client或者 NodeManager 证书就被加入到(或从中删除)系统中的全部的 truststore 文件上,而且不必重新启动 NodeManager 守护进程,新的配置就会被发现。

Debugging

注意: 启用 debugging 不过为了发现和解决这个问题。作业也不过执行在小量数据上。 会几个数量级地减慢作业,也是冗长的。(你可能须要添加 mapred.task.timeout 防止作业失败。由于任务执行如此之慢。) 要在 reducers 中同意 SSL debugging, 设置-Djavax.net.debug=all in the mapreduce.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的更多相关文章

  1. Hadoop-2.2.0中文文档—— MapReduce下一代- 可插入的 Shuffle 和 Sort

    简单介绍 可插入的 shuffle 和 sort 功能,同意在shuffle 和 sort 逻辑中用可选择的实现类替换.这个情况的样例是:用一个不是HTTP的应用协议,如RDMA来 shuffle 从 ...

  2. Hadoop-2.2.0中文文档——MapReduce 下一代 -——集群配置

    目的 这份文档描写叙述了怎样安装.配置和管理从几个节点到有数千个节点的Hadoop集群. 玩的话,你可能想先在单机上安装.(看单节点配置). 准备 从Apache镜像上下载一个Hadoop的稳定版本号 ...

  3. Hadoop-2.2.0中文文档—— MapReduce 下一代--容量调度器

    目的 这份文档描写叙述 CapacityScheduler,一个为Hadoop能同意多用户安全地共享一个大集群的插件式调度器,如他们的应用能适时被分配限制的容量. 概述 CapacitySchedul ...

  4. Hadoop-2.2.0中国文档—— MapReduce 下一代 -- 公平调度

    目的 此文档描写叙述了 FairScheduler, Hadoop 的一个可插入式的调度器,同意 YARN 应用在一个大集群中公平地共享资源. 简单介绍 公平调度是一种分配资源给应用的方法.以致到最后 ...

  5. Apache Spark 2.2.0 中文文档

    Apache Spark 2.2.0 中文文档 - 快速入门 | ApacheCN Geekhoo 关注 2017.09.20 13:55* 字数 2062 阅读 13评论 0喜欢 1 快速入门 使用 ...

  6. Apache Storm 1.1.0 中文文档 | ApacheCN

    前言 Apache Storm 是一个免费的,开源的,分布式的实时计算系统. 官方文档: http://storm.apache.org 中文文档: http://storm.apachecn.org ...

  7. Django2.0中文文档

    title: Django2.0中文文档 tags: Python,Django,入沐三分 grammar_cjkRuby: true --- Django2.0版本已经发布了,我们先来看一个图片 从 ...

  8. webpack4.0中文文档踩坑记录

    一直没有正儿八经去看过webpack4.0的文档,前段时间工作比较轻松,于是就有了此文...面都这样一个问题:请问在您的开发生涯中,令你最痛苦最无奈的是什么?小生的回答只有一个:“阅读那些令人发指的文 ...

  9. Apache Spark 2.2.0 中文文档 - Spark 编程指南 | ApacheCN

    Spark 编程指南 概述 Spark 依赖 初始化 Spark 使用 Shell 弹性分布式数据集 (RDDs) 并行集合 外部 Datasets(数据集) RDD 操作 基础 传递 Functio ...

随机推荐

  1. js 构造函数(construction)与原型(prototype)

    1.面向对象:js原型 java有class和instance,js仅仅有构造函数(function Cat(name,age){this.name=name;this.age=age}),为了实现数 ...

  2. Python list替换元素

    替换直接对应位置赋值 假设现在班里仍然是3名同学: >>> L = ['Adam', 'Lisa', 'Bart'] 现在,Bart同学要转学走了,碰巧来了一个Paul同学,要更新班 ...

  3. 关于SQLite在Android开发中的知识点总结

    一.存放位置 1.内部存储-放在 data/data 底下, 也就是内部存储, 里面的文件以及文件夹是私有的, 其他 app 不能访问, 也随着 app 卸载而删除; 2.放在 sd 卡里面, 如果设 ...

  4. 〖C++〗string2int把字符串转换成int的函数

    #include <stdio.h> #include <stdlib.h> #include <string.h> int string2int(char *ar ...

  5. JAVA实现zip压缩需要注意的问题

    近来对院社二维码平台进行2.0升级改造.于昨日踩到一个巨坑.特此记录... 需求源于院社编辑在批量下载二维码的时候,系统后台需要对所要下载的二维码进行重命名和zip打包压缩. 系统测试的时候发现:首次 ...

  6. 调试Felix Framework

    这里是指用Eclipse调试Felix Framework自身. 1. 首先安装Eclipse Java EE,然后再安装Java Source Attacher,这样才会在Jar文件的右键菜单“属性 ...

  7. android下载

    1. 源码下载链接: http://source.android.com/source/downloading.html 参考链接: Android源码下载方法详解 2. SDK下载 http://d ...

  8. EL表达式中fn函数

    JSTL 使用表达式来简化页面的代码,这对一些标准的方法,例如bean的getter/setter方法,请求参数或者context以及 session中的数据的访问非常方便,但是我们在实际应用中经常需 ...

  9. MVC与MVP(转)

    MVC模式已经出现了几十年了,在GUI领域已经得到了广泛的应用,由于微软ASP.NET MVC Framework的出现,致使MVC一度成为.NET社区的热名话题.作为MVC的变种MVP模式,也已经出 ...

  10. C# AutoResetEvent

    文章转载自:C# AutoResetEvent AutoResetEvent 常常被用来在两个线程之间进行信号发送 AutoResetEvent是.net线程简易同步方法中的一种,两个线程共享相同的A ...