在Hadoop邮件列表中,一个经常出现的问题是“为什么Hadoop更青睐使用一组单独的硬盘(JBOD)而不使用通过RAID-0磁盘阵列管理的一组硬盘?”
注:在Hadoop集群中,有一个建议:在配置时,将每个磁盘都分开。有人形象地将之称为“JBOD(Just a Box of Disks)。”
于是,有了以下这篇文章。摘自Hortonworks的两篇文章,第一篇是Steve Loughran所撰写的《Why not RAID-0? It’s about Time and Snowflakes》,第二篇是对Greg Bruno博士(工程副总裁及StackIQ联合创始人)的一个采访《Proper Care and Feeding of Drives in a Hadoop Cluster: A Conversation with StackIQ’s Dr. Bruno》。两篇文章从不同角度论证为什么Hadoop更青睐JBOD而不是RAID-0。
RAID-0又称为Stripe或Striping,其原理是把连续的数据分散到多个磁盘上存取,这样,系统有数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于它自己的那部分数据请求。这种数据上的并行操作可以充分利用总线的带宽,显著提高磁盘整体存取性能。多年应用下来,RAID-0优势很明显。
但Steve Loughran认为,其并不适合Hadoop。
与RAID-0阵列的同组管理相比,Hadoop更喜欢一组单独磁盘。在Hadoop集群中,读取速度是最能体现性能的重要指标。在Steve Loughran文章中,尤其强调了这一点,他还指出,由于驱动器速度显著不同,RAID-0读取速度往往取决于阵列中最慢的一块磁盘。很多时候,RAID-0配置读取速度甚至会比non-RAID更慢。更大的问题是可靠性。如果一组磁盘被配置为RAID-0阵列,一旦一个磁盘出现故障,将使得整组都宕机。如果所有磁盘都在一个节点中,那么势必会影响整个节点的数据都出现问题。所以,如果配置多个RAID-0阵列,那么单故障发生时,整体系统出问题的概率得到了无限放大。