集群硬件规划与节点配置
1. 总体规划的考虑
Hadoop集群的瓶颈:IO(Disk,Net)
Spark集群的瓶颈:CPU,内存
hadoop可以在一台机器上运行,该方式主要用于测试,显然不适合大量的数据。许多人从一个小的集群开始,并根据需要增长它最初可能只有4到6个节点。随着数据量的增长,可以很容易地添加更多的节点。
决定集群何时需要增长的方法:
需要增加计算能力,增加需要存储的数据量,增加处理任务所需的内存数量
基于存储容量的集群增长通常是一种很好的方法。
例:
- 数据每周增长大约3TB
- hdfs设置复制每个块3次
- 因此每周需要9TB的额外存储空间,加上一些开销————比如说,25%的磁盘空间
- 假设有12x3TB硬盘的机器,这相当于每三周需要一台新机器。或者:两年的数据1.2petabytes
- 需要大约35台机器
1.1 集群规模控制
硬盘
6T的数据容量,副本数量一般默认为3,那么仅这些就需要18T硬盘,稍微大一点20T,这仅仅是HDFS存储。
(这里说的是一个月的,数据保存几个月,就乘几倍)
如果集群上面要跑计算,MR计算出来的数据要保存HDFS的。所以还要根据结果数据来做判断。
一般是这样计算硬盘大小 (原始数据+中间数据+结果数据)*副本数量=总硬盘大小内存
namenode主要用内存保存block和node之间对应关系,也需要根据数据大小计算
6T/Block大小(默认为128M)=有多少block–>M个
一个block占多少内存: 保守地设置每一百万数据块需要1000MB内存
namenode总内存(兆M)=M*1000MB/100万
datanode的内存: 一般问题不大,根据性能的需要设置机器数量
根据Task任务的数量和你的性能指标来做决定
一个Block对应一个Mapper任务,上面算出来M个Block了,mapper任务也是那么多
实际测试一下一定数据量在x台机器上运行时间,根据你的指标去评定要多少台机器
1.2 集群建议
最好是做成HA高可用集群,hadoop集群的性能和节点个数近似成正向关系
尽量不要使用云部署(产生网络争用)
- 通常是远程的,而不是本地的磁盘(还通常只有一个卷)
- 通常无法保证节点的放置位置(可能在同一物理主机上的虚拟机上拥有一个块的三个副本)
- 推荐使用hadoop集群专用的物理硬件
在概念验证集群中使用虚拟化是完全合理的,或者数据中心的限制意味着使用专用硬件是不可能的。
对于云部署,cloudera与亚马逊合作,支持cloudera企业的AWS
不建议使用刀片服务器
- 刀片服务器机架如果发生故障会导致许多节点不可用
- 单独的叶片通常具有非常有限的RAM和硬盘容量,且不可扩展
- 底盘与机架顶部交换机之间的网络连接可能会成为瓶颈
从某种程度上说,从节点容易发生故障与任务失败(这是在hadoop中构建的一个假设)
- NameNode会自动将失败节点上的块复制到集群中的其他节点,保证三个副本
- ApplicationMasters将自动重新分配运行在失败节点上的任务
- ResourceManager将重新启动在失败的节点上运行的ApplicationMasters
如果未配置为HA,主节点容易引发单点故障
- 如果NameNode宕机,则无法访问集群
- 如果资源不足,则新的任务将不会被运行
- 在运行生产作业时,为HA配置NameNode和ResourceManager
2. 选择合适的硬件
2.1 主节点配置
一个NameNode守护进程,一个NodeManager守护进程,一个StandbyNameNode(或SecondaryNameNode)守护进程
在小型集群中,Namenode和ResourceManager经常在同一台机器上运行,有时甚至是SecondaryNameNode与NameNode和ResourceManager在同一台机器上。重要的是,至少有一个NameNode的元数据副本存储在单独的机器上
2.2 从节点配置
普通配置
- 12x3TB sataⅡ硬盘,不实用阵列磁盘,使用磁盘簇配置
- 2x6 -core 2.9GHz cpu,15mb缓存
- 64GB RAM(20左右的节点数量)
- 万兆以太网
高端配置
- 24x1TB nearlice / MDL sas硬盘,Raid盘阵,磁盘簇配置
- 2x6 -core 2.9GHz cpu,15mb缓存
- 128GB RAM(或更多)
- 万兆以太网
其他配置
- 双电源,双以太网卡
- 提供故障转移机制(HA高可用集群,数千台需要搭建HA+Federation联邦高可用集群)
- Raided硬盘:
Raid 0 条带(数据分开存)
Raid 1 镜像(备份,高可靠,可实现热插拔)
2.3 CPU
16核与八核cpu现在普遍可用,应该启用超线程和快速路径互连(QPI)
Hadoop节点通常限制在磁盘IO和网络,所以*的CPU通常是没有必要的。但是如果特定工作负载需要,可能需要在从节点上有更多的处理能力(spark)
如:聚类和分类、复杂的文本挖掘、自然语言处理、特征提取、图像处理
2.4 Core与内存
从节点的核心数,内存大小限定MapTask,ReduceTask,ApplicationMaster的执行情况
经验法则:任务总数=物理处理器核心的数量-1 (最低要求)
RAM内存大小:1~20节点(64GB),20~300节点(96GB),300~1000节点(128GB),千节点以上(256GB)
JVM内存大小:一般不要超过200G或不超过70%的机器内存(官方),一般不要超过100G(实际)
- 每个map和reduce任务通常需要2GB到4GB的内存
每个ApplicationMaster通常需要1GB的内存
从节点不应该使用虚拟内存
确保有足够的内存能够运行所有的任务,以及DataNode和NodeManager进程,操作系统的开销HDFS缓存还会使用从节点上额外的内存空间,因此用尽可能多的ram来装备你的从属节点
对于具有高内存需求的工作负载来说,每个从属节点的内存配置高达512GB
2.3 磁盘
hadoop的架构影响了磁盘空间的需求。默认情况下,文件的备份数为3。临时数据存储通常需要集群的原始磁盘容量的20%到30%
一般来说相同的存储空间,小容量磁盘组的要好于大容量磁盘组(寻址时间,并行计算)
目前,机械硬盘的性价比比固态硬盘(ssd)要高得多
3.5英寸磁盘(更快,更便宜,容量大于2.5寸磁盘)
7,200转 SATAⅡ/(没有必要使用1,5000转的硬盘)
每个节点的硬盘个数:4到24个磁盘(甚至更多)
24x1TB硬盘很可能优于12x2TB硬盘(不同的任务更有可能访问不同的磁盘)每个从节点硬盘的最大值为36TB最佳
从节点不受益于使用RAID存储(RAID striping(RAID 0)实际上比HDFS使用的JBOD配置慢)
RAID 0读写操作受到RAID阵列中最慢磁盘的速度限制
JBOD上的磁盘操作是独立的,因此平均速度大于最慢的磁盘
雅虎的一项测试显示,JBOD的执行速度比raid0快30%到50%,取决于执行的操作如果节点宕机后重新复制,则会导致大量网络通信
hdfs通过在多个节点上复制块来提供数据冗余
3. 集群节点配置
以20台节点为例,如下图:
上一篇: linux安装maven
推荐阅读