搭建一个Hadoop集群需要选择合适的主机,这里主要考虑CPU、内存、硬盘、网卡,另外一个Hadoop集群的主机数通常会具有一定规模几十台、上百台甚至更多,那么主机自身的功耗,以及空调降温的功耗也是一笔不容忽视的开销。
关于主机选择
为Hadoop集群选择合适的主机需要对集群进行性能测试、全面的理解集群的工作负载。分析集群的瓶颈主要是在计算上还是IO上。更高的性能通常意味着更高的价格。我们需要根据集群的工作负载情况来在集群性能和硬件支出之间作出平衡。
在几乎所有情形下,MapReduce要么会在从硬盘或者网络读取数据时遇到瓶颈(称为IO受限的应用),要么在处理数据时遇到瓶颈(CPU受限)。排序是一个IO受限的例子,它需要很少的CPU处理(仅仅是简单的比较操作),但是需要大量的从硬盘读写数据。模式分类是一个CPU受限的例子,它对数据进行复杂的处理,用来判定本体。
下面是更多IO受限的工作负载的例子:
索引
分组
数据导入导出
数据移动和转换
下面是更多CPU受限的工作负载的例子:
聚类/分类
复杂文本挖掘
自然语言处理
特征提取
如下图所示:
如果集群的工作主要受IO限制,那么应选择存储优化的硬件,如果集群的负载主要受CPU限制,那么应该选择计算优化的硬件。对于一个新的集群,或者不能准确评估负载类型时,建议先选择均衡型的硬件。然后在集群上运行MapReduce测试任务来分析瓶颈究竟是在IO还是CPU,并根据实际情况作出调整。
轻处理型配置:2个16核心CPU 24-64GB内存 8块硬盘(1TB 或 2TB)
均衡型配置: 2个16核心CPU 48-128GB内存 12-16块硬盘(1TB 或 2TB)
重存储型配置:2个16核心CPU 48-96GB内存 16-24块硬盘(2TB 或 4TB)
计算加强型配置:2个16核心CPU 64-512GB内存 8块硬盘(1TB 或 2TB)
NameNode推荐配置
4-6块 1TB 硬盘(1块给操作系统,2块给FS image [RAID 1],1块给Zookeeper , 一块给Journal Node)
2 个 4/8/16 核心处理器,主频至少为 2-2.5GHz
64 - 128G 内存
千兆网卡或万兆网卡
DataNode推荐配置
12-24块1-4TB硬盘
2个 4/8/16核心处理器,主频至少2-2.5GHz
64-512BG 内存
千兆或万兆网卡(存储密度越高,需要的网络网络吞吐越高)
如果集群的主机数超过20,那么推荐将集群划分为2个机架,每个机架配备一个万兆的顶层交换机。运维团队需按照逻辑机架来组织集群网络的拓扑结构。
关于RAID
Hadoop将数据分布在集群当中,在软件层面来保证性能(本地块加载,最小化数据移动)、数据的可靠性以及容错(块副本)。尽管建议采用RAID(Redundant Array of Independent Disk,即磁盘阵列)作为NameNode的存储器以保护元数据,但是若将RAID作为DataNode的存储设备则不会给HDFS带来益处。HDFS所提供的节点间数据复制技术已可满足数据备份需求,无需使用RAID的冗余机制。
此外,尽管RAID条带化技术(RAID 0)被广泛用户提升性能,但是其速度仍然比用在HDFS里的JBOD(Just a Bunch Of Disks)配置慢。JBOD在所有磁盘之间循环调度HDFS块。RAID 0的读写操作受限于磁盘阵列中最慢盘片的速度,而JBOD的磁盘操作均独立,因而平均读写速度高于最慢盘片的读写速度。需要强调的是,各个磁盘的性能在实际使用中总存在相当大的差异,即使对于相同型号的磁盘。
最后,若JBOD配置的某一磁盘出现故障,HDFS可以忽略该磁盘,继续工作。而RAID的某一盘片故障会导致整个磁盘阵列不可用,进而使相应节点失效。
关于功耗
Hadoop生态系统被设计为一种并行处理环境。在采购处理器时不推荐购买主频过高的芯片。因为主频较高的芯片功耗较大,并且发热比较高。中档的处理器结合主频、核心数和价格来看更具有性价比。
参考:
http://blog.cloudera.com/blog/2013/08/how-to-select-the-right-hardware-for-your-new-hadoop-cluster/
https://zh.hortonworks.com/blog/why-not-raid-0-its-about-time-and-snowflakes/