外部存储可能适合Hadoop存储与灾备
使用Hadoop驱动大规模数据的分析并不一定意味着构建分布式存储的集群,一台好的旧阵列可能是一个更好的选择。
Hadoop的最初的架构设计是以横向扩展的方式使用相对便宜的商品服务器及其本地存储。Hadoop的最初目标是对数据进行符合成本效益的开发利用,这在以前是行不通的。我们都听说过大规模数据量、大规模数据类型、大规模数据速度等用于描述这些以前难以处理的数据集的词语。考虑到定义如此广泛的目标,大多数公司都可以指出他们打算开发利用的某类大规模数据。
大规模数据每天不断膨胀,存储厂商凭借其相对昂贵的SAN和网络附加存储(network attached storage,NAS)系统,开始参加大规模数据的派对。它们不能把所有这些数据留给往机箱里塞商品磁盘驱动器的服务器厂商。尽管采用Hadoop仍处于早期阶段,但是竞争和混乱的营销鼓噪甚嚣尘上。
高级别Hadoop和HDFS
在Hadoop的横向扩展设计中,集群的每个物理节点都托管了本地计算和数据共享;旨在支持经常需要穿越大规模数据集的应用程序,例如搜索。Hadoop的很多价值在于:它对横向扩展的集群中的分布式数据块有效地执行并行算法(parallel algorithm)的方式。
Hadoop由基于MapRduce的一个计算引擎和一个名为Hadoop 分布式文件系统(Hadoop Distributed File System,HDFS)的数据服务组成。Hadoop利用数据的高度“局部性”(locality),使用HDFS把大规模数据集散布到很多节点上,把并行的计算任务托付到每一个数据节点(即MapReduce的“映射”(map)部分),随后进行各种各样的重排和整理合并的步骤而得出结果。(即“规约”(reduce)部分)
通常,每个HDFS数据节点将被指派使用DAS磁盘。然后HDFS将向所有的数据节点复制数据,通常在不同的数据节点上生成两到三份的拷贝。复制的数据被放在不同的服务器节点上,而第二份复制的数据则放在不同的节点“机架”上,以避免机架级别的损失。
显然,复制比RAID占用了更多的原始容量,但是它也具备一些优势,例如避免重建窗口。
为什么使用企业级存储?
因此,如果HDFS以一种源于MapReduce式的处理方法轻易地处理了数据集的最大部分,使用相对便宜的本地磁盘并提供内置的“架构感知”复制,为什么要考虑使用企业级存储?举例来说,在HDFS元数据服务器节点中仍然有潜在的漏洞。尽管每一个版本的Hadoop在HDFS可靠性方面都做了改善,但是把HDFS元数据服务器用于更可靠的基于RAID的存储仍有争议。
备份、保护或者审计本机HDFS并非易事。当然,NAS和SAN内置了极好的数据保护和快照。
把外部共享存储用于大批数据有很多IT方面的原因。首先,尽管Hadoop可以横向扩展处理多个PB的数据,但是大多数大规模数据集很可能只有10TB到50TB的幅度。几个TB大小的传统的数据集几乎等于零处理,但恰好在横向扩展的SAN和NAS解决方案的成本效益范围之内。那些共享数据集对公司现有业务流程而言通常是不可或缺的,相对于HDFS,在企业级存储上可以更有效地被控制、管理和集成。
尽管有用于Hadoop生态系统的具备安全意识的部件(例如Sentry和Accumulo),数据安全和数据保护是考虑使用外部存储的其它主要原因。备份、保护或者审计本机HDFS并非易事。当然,NAS和SAN内置了极好的数据保护和快照。
使用外部企业级存储的时候,一款高可用的Hadoop应用程序(由于Hadoop逐步形成实时查询和流分析功能而变得越来越普遍)可能永远无法知道磁盘故障已经出现。
用外部存储构建Hadoop,你不仅可以把存储管理分开,也可以利用独立的“增长的载体”(vectors of growth)。毋须增加其它多余的资源就可以容易地增加存储或者计算。由于与Hadoop的“总量”(gross)复制相比企业级RAID解决方案将使用较少的磁盘占用空间,因此也有成本支出方面的优势。
把Hadoop横向扩展节点部署为虚拟机允许按需配置,并轻易地扩展或缩小集群。
共享是外部存储的制胜之道,因为把大规模数据移进和移出Hadoop集群具有挑战性。使用外部存储的时候,多个应用程序和用户可以通过不通的客户端访问相同的“主”数据集,甚至在其正在被Hadoop应用程序使用的时候进行更新和写数据。
虚拟化Hadoop
在虚拟化的Hadoop的场景中,外部存储也具有优势。我们预计这将成为在企业中部署Hadoop的常用方法。把Hadoop横向扩展节点部署为虚拟机允许按需配置,并轻易地扩展或缩小集群。
多个虚拟Hadoop节点可以被托管到每个虚拟机管理程序,并可以轻易地为指定的应用程序分配更多或者更少的资源。虚拟机管理程序级别的高可用(high-availability ,H/A)/容错功能可以被用于生产级别的Hadoop应用程序。性能是一个担心,但是更多的资源可以被动态地应用到需要的地方,为某些Hadoop应用程序提供即便不是优越也是对应的性能。
虚拟地存放大规模数据
考虑物理Hadoop架构的一个令人信服的理由是避免昂贵的SAN,尤其当数据集越来越大的时候。然而,在虚拟环境中,考虑外部存储可能更适合。一个原因是精简仅限于计算的虚拟Hadoop集群相当简单,但是,散发大规模数据集仍将是一项挑战。通过把数据托管到外部共享存储,精简虚拟Hadoop的托管就变得几乎无关紧要了,而DRS和HA之类的虚拟机管理程序的功能可以得到充分利用。
由于单个大规模数据集可以轻易地在多个虚拟化的Hadoop集群中被“恰当地”分享,因此有机会以相同的存储为多个客户端提供服务。通过消除数据集的多个拷贝,减少数据迁移的总量,并确保更高的可用性和数据保护,作为一款企业级生产级别的应用程序的Hadoop变得更可管理,并轻易地获得支持。在较少但相对更贵、存储选项更贵的虚拟服务器上托管虚拟化Hadoop的TCO仍然会比坚持使用专门的商品服务器物理集群的要低。
如何使用才是关键
与默认的DAS选项相比,外部存储更昂贵,但是这只是与存放数据有关的平衡账目的“其它”事情而已。关于使用外部存储的决定必须以TCO为基础,包括同时考虑数据集的传入来源和端到端的工作流。其它工作负载可能可以有效地共享一个单一的数据资源库,而现有的资产和技能也可以被利用。另外,高端存储的摄入、性能、容量或者可伸缩性可能有限制。