集群硬件规划

##1. 总体规划的考虑

Hadoop集群的瓶颈:IO(Disk,Net)
Spark集群的瓶颈:CPU,内存

hadoop可以在一台机器上运行,该方式主要用于测试,显然不适合大量的数据。许多人从一个小的集群开始,并根据需要增长它最初可能只有4到6个节点。随着数据量的增长,可以很容易地添加更多的节点。

决定集群何时需要增长的方法:
需要增加计算能力,增加需要存储的数据量,增加处理任务所需的内存数量
基于存储容量的集群增长通常是一种很好的方法。

例: 
   	- 数据每周增长大约3TB
   	- hdfs设置复制每个块3次
   	- 因此每周需要9TB的额外存储空间,加上一些开销————比如说,25%的磁盘空间
   	- 假设有12x3TB硬盘的机器,这相当于每三周需要一台新机器。或者:两年的数据1.2petabytes
   	- 需要大约35台机器

1.1 集群规模控制

  1. 硬盘
    6T的数据容量,副本数量一般默认为3,那么仅这些就需要18T硬盘,稍微大一点20T,这仅仅是HDFS存储。
    (这里说的是一个月的,数据保存几个月,就乘几倍)
    如果集群上面要跑计算,MR计算出来的数据要保存HDFS的。所以还要根据结果数据来做判断。
    一般是这样计算硬盘大小 (原始数据+中间数据+结果数据)*副本数量=总硬盘大小

  2. 内存
    namenode主要用内存保存block和node之间对应关系,也需要根据数据大小计算
    6T/Block大小(默认为128M)=有多少block–>M个
    一个block占多少内存: 保守地设置每一百万数据块需要1000MB内存
    namenode总内存(兆M)=M*1000MB/100万
    datanode的内存: 一般问题不大,根据性能的需要设置

  3. 机器数量
    根据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内存大小:120节点(64GB),20300节点(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通过在多个节点上复制块来提供数据冗余

你可能感兴趣的:(hadoop)