转载

设计高可用性、容错和数据隔离的Hadoop集群

Hadoop不再仅仅是一个时髦词,它已成为业务需求。数据总是大量涌入,但是在最近,我们可能已经在解锁这种指数级增长的数据。大数据分析中的现代技术提供了新的方法来识别和纠正故障、帮助数据挖掘、提供优化反馈,这些方法是无穷无尽的。现代的Hadoop生态系统不仅提供了可靠的分布式聚合系统,无缝地提供数据的并行处理,同时也通过分析来提供大数据的见解。

在这篇文章中,我们将研究一种高可用、容错的Hadoop集群的设计。但首先让我们潜入到Apache Hadoop的核心部件中,在这之后我们将通过一些修改,来满足简约的设计需求列表,即充分发挥底层Apache Hadoop的基础设施优势,同时又增加安全性和数据级隔离。那么,让我们先来谈谈核心组件(如图1所示)

设计高可用性、容错和数据隔离的Hadoop集群

图1:Apache的Hadoop的核心组件

HDFS集群

HDFS集群是由一个NameNode和多个DataNodes组成的主从结构,如图2所示。NameNode是个数据管理器,负责管理HDFS文件和块,还有文件系统的命名空间。该信息作为命名空间镜像和可编辑的日志永久保存在本地驱动器上。NameNode还存储非持久性的信息,例如给定文件中所有块(block)的位置。 HDFS文件被分成块,然后复制和存储在DataNodes上。每个DataNode定期与NameNode同步块信息。HDFS的架构考虑到Apache Hadoop的数据存储、容错性和防损数据丢失的需要。

设计高可用性、容错和数据隔离的Hadoop集群

图2:HDFS架构 - NameNode(主) - DataNodes(从)配置

YARN(YARN应用资源协调)架构

MapReduce 2.0或YARN分摊了JobTracker(Hadoop以前版本的作业调度器)中的责任,这样应用管理和资源管理就分割开来。YARN还可以帮助不同的作业进行调度和监控资源管理。

ResourceManager是一个全局性的主控的资源仲裁员。ApplicationMaster负责管理不同的用户应用,每个应用程序对应一个 ApplicationMaster。因此,你可以有一个ApplicationMaster 对应一个MapReduce应用,而另一个ApplicationMaster对应一个交互式应用,以及其它类似的情况。JobHistoryServer守护进程负责跟踪这些应用程序,并记录其完成。最后,每个节点(node)上还有一个称为NodeManager(类似于先前版本的TaskTracker)的从属逻辑实体,负责跟踪该节点上运行的任务。 YARN架构照顾了Apache Hadoop数据计算和管理方面的需要。

设计高可用性、容错和数据隔离的Hadoop集群

图3:YARN架构 - ResourceManager中(主) - ApplicationMaster+ NodeManager(主+从)配置

现在,我们有了Apache Hadoop核心部件的背景,让我们快速记下这个简约的设计需求列表。我会先把它们列举出来,然后详细论述在Apache Hadoop 2上如何满足这些需求。

需求:

  • 高可用性 - 集群应永远不会失败。
  • 安全性 - 集群应涵盖所有的安全层次
  • 向外扩展 - 最大化(网络IO)性能并最大限度地减少物理尺寸。
  • 虚拟机上的Hadoop - 弹性、改进的多租户、提高系统的利用率。

高可用性

Hadoop 2版本,建立了主备的NameNode配置,以此避免了单点故障。当保守的故障切换控制器(Failover Controller)检测到故障,它可以让备用节点接管,让主用节点退下来(通过“隔离”或“拍其他节点的头部”)。因为主用和备用的NameNodes分享了可编辑日志和报告,备用NameNode可以非常迅速地接管。

同样,YARN中ResourceManager也可以支持高可用性。切换控制器是ResourceManager的一部分,它在主用ResourceManager失败后会让备用ResourceManager来接管。

安全

每当谈论安全,我们谈的就是“防御层”(也被称为“防御环”)。这些层包括认证,授权,审计和数据保护:

安全 - 身份验证(Authentication):

在原生Apache Hadoop中最常见的认证形式就是Kerberos。认证可以是从用户到服务,例如HTTP认证;或者可以是从服务到服务(代表用户 - 例如用户代理;或作为服务,例如客户端SSL证书)。

安全性 - 授权(Authorization):

Apache Hadoop已经提供了类似Unix的文件权限,也有针对Map Reduce任务、YARN的访问控制列表,等等。

安全性 – 责任(Accountability)/审计(Audit):

问责需要审计日志,原生Apache Hadoop在NameNodes上提供了审计日志,记录文件的创建、打开,等等。另外,还有一些针对JobTracker、JobHistoryServer和ResourceManager的历史记录。历史日志记录了特定集群上运行的所有作业。

安全 –数据静止(Data at Rest)和数据移动(Data in Motion)时的保护:

在数据静止时进行加密是很容易做到的,可以使用操作系统所提供的任何加密方法,或者其他硬件级的加密。另一方面,针对移动中数据的加密,需要在配置文件中使能,具体详述如下:

通过RPC交互的客户端,可以启用SASL(简单认证和安全层)协议,这通过设置core-site.xml中的'hadoop.rpc.protection=privacy'完成。注意:JAVA SASL提供不同级别的数据保护(也称为QOP - 保护质量)。根据所需的质量,用户可以将保护参数设定为“authentication”表示为仅需要身份认证; “integrity”表示为需要身份认证和数据交换的完整性;“privacy”表示需要添加加密(对称密钥)和避免“中间人”(man-in-the-middle)的攻击。无论完整性检查和加密都会带来性能开销。

HDFS数据使用的数据传输协议(DTP)不使用SASL框架进行认证,从而产生的直接影响是没有QOP(保护质量)。因此,有必要来包装DTP并与SASL进行握手,这可通过在hdfs-site.xml中设置'dfs.encrypt.data.transfer=true'来实现。

最后,基于SSL的HTTP只要简单设置'dfs.https.enable=true',然后在hdfs-site.xml中设定“dfs.client.https.need-auth=true'就能实现双向SSL。对于MapReduce的洗牌(Shuffle),SSL可以通过在mapred-site.xml中设置“mapreduce.shuffle.ssl.enabled=true'来启用。

向外扩展

虽然Hadoop吹嘘仅需要廉价的商用硬件,但Hadoop的数据流量始终是一个大问题。即使你只有一个中等规模的集群,仍会有很多复制流量,Mappers和Reducers之间也会有数据移动。因此,选用支持集群硬件的网络骨干网是非常重要的,它可以同时满足良好的性能和足够的经济性,达到甚至超越向外扩展的需求。

在Servergy公司,我们设计这样一个系统,使用飞思卡尔的QorIQ T4240 64位通信处理器。高能效的Servergy CTS存储设备(在图4中示出)具有两个T4240处理器。每个T4240都有安全协处理器用于加速加密/解密操作。该T4240还拥有四个万兆以太网端口和一个20Gig SRIO(serial Rapid IO)端口。 SRIO提供低延迟,高带宽互连。我们目前的单一集群只使用八个万兆以太网端口中的四个,每个Servergy CTS设备 - 两个万兆以太网端口连接到活动的交换机和其他两个分别连接到冗余/待机开关,以提供在交换机级别的高可用性,这种构造示于图5。注意:根据部署我们可以将万兆以太网端口绑定以增加带宽或者使用SRIO低延迟传输。

设计高可用性、容错和数据隔离的Hadoop集群

图4:Servergy CTS存储设备框图

设计高可用性、容错和数据隔离的Hadoop集群

图5:CTS设备解决方案: 10x12x2=240核; 480线程

虚拟机上的Hadoop

许多在Hadoop集群上的系统不仅处理计算需求,同时也提供数据存储。因此,如果你正考虑将Hadoop作为一种服务,那么就需要关注数据安全。进入虚拟化!虚拟化不仅提供了所需的隔离,同时也提供了弹性。虚拟化增强了YARN提供的多租户特性,并最大限度地提高了资源的利用率和系统的利用率。除了以上所说,易于部署的也是虚拟化的很大的优势。

跟随Hadoop的传统布局,每个虚拟机(VM)可以运行NodeManager/TaskTracker和DataNode,如图6所示。这种配置没有体现虚拟化的所有好处。首先,这种配置并不是真的有弹性;你必须预先为你的(增长)需求进行配置。例如,在紧密配置的集群上任何的数据增长将需要添加新的节点到集群中,但现在计算资源是空闲的,所以有必要去平衡集群,并且数据计算和数据存储也没有分离。

设计高可用性、容错和数据隔离的Hadoop集群

图6:虚拟机上传统Hadoop布局

为了使其更有弹性,我们可以改变虚拟机的数据和计算配置,设计成更加面向服务的体系结构,将更有利于Hadoop作为一种服务提供者(甚至是基础设施即服务的提供者)。让我们来讨论两个新的配置:

设计高可用性、容错和数据隔离的Hadoop集群

图7:虚拟化的Hadoop在SOA(面向服务)架构中配置

图7给出了一种配置,我们有一个虚拟化的DataNode对应了多个NodeManagers/TaskTracker。更多的NodeManagers可以作为虚拟节点被添加到集群中,这取决于集群的计算需求。因为每个虚拟机都在运行自己的NodeManager,所以这种配置不仅提供了计算和数据层面的隔离,还提供了巨大的多租户隔离。关键是要找到一个很好的平衡,即在一个给定的主机上,虚拟DataNode对应的虚拟NodeManagers的数目。这将在很大程度上取决于你的数据,复制因子,应用程序和集群容量。

在基础设施即服务(IaaS)领域的另一种配置获得了很多的关注,即有持久性数据,并加入虚拟化的计算节点(NodeManagers/ TaskTracker);或者组合数据节点和计算节点来完成集群。这种构造示于图8。

设计高可用性、容错和数据隔离的Hadoop集群

图8:虚拟化的Hadoop在IaaS(基础设施即服务)中配置

这里的基础设施需要关注所有的网络、负载均衡和持久性数据的存储需要。集群和虚拟机管理器控制负责控制Hadoop集群,后者是由计算的虚拟机(TaskTracker/NodeManagers)和“DataNode+ NodeManager”组合虚拟机所组成。此配置易于对在云中的HDFS数据进行访问(当需要计算时),并且也便于数据备份到持久的存储器中。在这样的结构中,没有必要在云中长时间运行集群,因为所有的数据(原始、分析或挖掘)都会持久的存储。

作者简介

设计高可用性、容错和数据隔离的Hadoop集群 莫妮卡.贝克威思 是软件性能工程师,在硬件行业工作超过十年。她最新的头衔是Servergy公司的性能架构师- Servergy是一家技术解决方案的集成公司,专注于数据安全。在Servergy之前,莫妮卡曾在甲骨文/ Sun和AMD为服务器级系统优化JVM。莫妮卡在2013年被JavaOne评为摇滚明星扬声器(Rock Star speaker @JavaOne)。你可以在Twitter(@mon_beck)上跟踪莫妮卡的信息。

查看英文原文: Designing a Highly Available, Fault Tolerant, Hadoop Cluster with Data Isolation

正文到此结束
Loading...