存储和计算的融合
在过去十年中,IT组织有标准化的刀片服务器和SAN(存储区域网络),以满足他们的网格和计算密集型工作负载。虽然这种模式对一些标准的应用,如Web服务器,应用服务器,规模较小的结构化数据库和简单的ETL(提取,转换,装载)有很大的意义,基础设施的需求已经发生变化,数据量和用户数已经大幅增长。Web服务器现在前端使用缓存层,数据库大规模并行使用本地磁盘,ETL作业正在推动比他们可以在本地处理能力更多的数据。硬件厂商建立创新体系,以满足这些要求,包括存储刀片,SAS(串行连接SCSI)交换,外部SATA阵列和更大容量的机架单元。
Hadoop的目的是基于一种新的方法来存储和处理复杂的数据。传统方式依靠SAN满足海量存储和可靠性,然后通过刀片集合进行处理,取而代之,Hadoop在软件层面处理大数据量和可靠性。 Hadoop把数据均衡分布到集群上,通过复制副本以确保数据的可靠性和容错。因为数据和处理能力是分布在服务器上,处理指令可以直接发送到存储数据的服务器。由于在Hadoop集群的每个服务器上存储和处理数据,他们需要进行配置,以满足数据存储和处理要求。
工作负载压力问题
在几乎所有情况下,MapReduce作业会遇到瓶颈,或者是从磁盘或从网络(作为IO密集工作)读取数据,或者是计算数据(CPU密集任务)。IO密集工作的一个例子是排序,这就需要非常小的计算(简单的比较)和大量的读取和写入磁盘。CPU密集型的工作的一个例子是分类,其中一些输入数据需要非常复杂的方式计算来确定一个实体。
这里有几个IO密集型工作例子:
1.索引
2.搜索
3.分组
4.解码/解压缩
5.数据导入和导出
这里有几个CPU密集型工作例子:
1.机器学习
2.复杂的文本挖掘
3.自然语言处理
4.特征提取
为了充分优化他们的Hadoop硬件,我们的客户需要了解他们的工作负载,在开始的时候,我们经常面临典型的鸡和蛋的问题。大部分团队在建立一个Hadoop集群时还不知道他们的工作负载特征,往往运行Hadoop的第一个任务,和他们熟练精通之后的使用方式大相径庭。此外,有些工作负载可能会受到无法预料的方式限制。例如,有时理论上IO密集型工作实际上可能因为用户选择了压缩方式而变为CPU密集型。有时可能使用不同算法改变了MapReduce作业的限制。由于这些原因,当团队不熟悉需要运行的工作负载特点时,他们运行一个平衡型的Hadoop集群是有道理的。一旦他们在平衡型集群上开始运行,团队可以建立MapReduce作业的基准,逐步了解他们的特点。
通过全面监控Hadoop集群,直接测量实际工作负载和确定瓶颈所在。我们建议在所有Hadoop机器上安装Ganglia提供实时统计,有关CPU,磁盘和网络负载。安装了Ganglia,Hadoop的管理员可以运行自己的MapReduce作业,并检查Ganglia仪表盘来观察每一台机器执行情况。
除了与工作负载适配的集群建设,我们鼓励客户能够与硬件厂商探讨和了解供电和制冷的经济选择方案。由于Hadoop需要运行几十,几百或上千个节点,投资于低功耗硬件,一个运营团队可以节省相当数量的钱。每个硬件厂商都能够提供如何监控供电和制冷的工具和建议。
如何挑选适合你的Hadoop集群的硬件
选择机器配置的第一步是了解你的运营团队已经管理的硬件类型。运营团队往往有新机器采购方面的看法,他们倾向于已经熟悉的硬件。Hadoop不是唯一的可以享受规模效益好处的系统。如果你不知道你的工作负载特点,记住第一个Hadoop集群采用平衡的硬件选择方案。
一个基本的Hadoop集群中的节点有四种类型。我们这里把执行特定任务的机器视为一个节点。大部分机器将作为Datanode和TaskTracker工作。正如我们前面提到的,这些节点存储数据和执行计算功能。在一个平衡的Hadoop集群中,我们建议Datanode/TaskTracker采用以下硬件规格:
· 4个1TB硬盘,支持JBOD
· 2个四核CPU,至少2-2.5GHz
· 16-24GB 内存(如果你考虑HBase,24-32GB)
· 千兆以太网
namenode负责协调集群中的数据存储,jobtracker协调数据计算任务。最后的节点类型是secondarynamenode,小型集群它可以和 namenode共用一台机器,较大的群集可以采用和namenode节点相同的硬件。我们建议客户购买加固的服务器来运行的 namenodes和jobtrackers,配有冗余电源和企业级RAID磁盘。
namenodes也需要更多的RAM,与集群中的数据块数量相对应。一个好的经验是分布式文件系统中每存储一百万个数据块,namenode中对应1GB内存。对于一个100个Datanode的集群,32GB RAM的namenode可以提供足够的扩展空间。我们也建议有一个备用机,当 namenode或jobtracker 其中之一突然失败时可以替代使用。
当您的Hadoop集群增长超过20台机器,我们建议配置初始集群,因为它跨越两个机架,每个机架顶部有机架千兆交换机,这些交换机连接10千兆以太网的互连或核心交换机。有两个逻辑机架,运营团队可以更好地理解内部机架和跨机架的网络需求。
有了Hadoop集群,团队可以开始确定工作负载和准备工作负载基准,以确定CPU和IO瓶颈。经过一段时间的基准设定和监测,该小组将有一个更好的了解,应该如何配置更多的机器。随着规模增长,通常会形成一个异构的Hadoop集群。这样,从一套不是很完美地适合你的工作负载的集群起步,将不会是一种浪费。
下面是各种不同工作负载的硬件配置清单,包括我们最初的“起点”硬件建议:
· 轻型处理配置(1U/machine):两个四核CPU,8GB内存,4个磁盘驱动器(1TB或2TB)。注意CPU密集型的工作,如自然语言处理,在数据处理之前加载大型模型到RAM的,应配置2GB内存每CPU核,而不是1GB内存每CPU核。
· 平衡计算配置(1U/machine):两个四核CPU,16到24GB内存,4个磁盘驱动器直连主板控制器(1TB或2TB)。这些往往在一个单一的2U机柜有两个主板和8个驱动器的。
· 重存储配置(2U/machine):两个四核CPU,16到24GB的内存,12个磁盘驱动器(1TB或2TB)。这种类型机器的功耗,闲置状态200W左右,高活跃时350W。
· 计算密集配置(2U/machine):两个四核CPU,48-72GB的内存,8个磁盘驱动器(1TB或2TB)。这些往往在大内存驻留模型和大量索引数据缓存组合时经常使用。
其他硬件方面的考虑
当我们遇到应用程序产生大量的中间数据,我们建议每台机器拥有一个双端口以太网卡或双通道以太网卡提供2Gbps。对于那些已经转移到10千兆以太网或Infiniband的客户,这些解决方案可以用来解决网络密集型工作负载。如果你在考虑切换到10千兆以太网,要先确定你的操作系统和BIOS是兼容的。
当计算内存需求,Java管理虚拟机占用到10%的因素。我们建议配置Hadoop,使用严格的堆大小限制,以避免内存交换到磁盘。交换大大影响MapReduce作业性能,可以加大RAM配置以避免这种情况。
同样重要的是优化RAM的内存通道带宽。例如,当使用双通道内存,每台机器应该配置DIMM组。对于三通道内存,每台机器应该配置三组DIMM。这意味着一台机器可能配置18GBs(9x2GB)内存,而不是16GBs(4x4GB)。
结论
采购合适的Hadoop集群硬件需要基准和精心策划,充分理解工作负载。然而,Hadoop集群通常是异构环境,我们建议起步时采用平衡配置方案来部署初始硬件。