部署Hadoop集群为什么优先选择硬件方式而不是虚拟化方式?

刀片服务器、SAN、虚拟化技术

“螺旋式前进”这种东西存在于各个领域,在大规模数据存储与处理上,一样如此。

曾经,当管理人员购买服务器的时候,如需更高的性能,则会购买更高配置的服务器,这种做法称之为 “纵向扩展(Scale up)” ;后来当我们意识到纵向扩展会带来更高的开销时,我们开始采用购买更多的服务器来解决问题,而不是购买更高端的服务器,这种做法叫做 “横向扩展(Scale Out)” 。今天的数据中心就是如此,由于机架空间是很重要的一个因素,因此发展出了现在我们称为 “刀片服务器” 的1U、2U 这种概念的服务器,可以使得在一个机架内装入更多的服务器。再后来,发现其实很多服务器的利用率都不高,于是又发展出了虚拟化技术,以更充分的利用各个服务器资源。

存储发展也是同样,先是单机内单块儿硬盘的存储追求更高的容量和更高的IO,遇到困难后,在单机内发展多块硬盘做RAID做小规模横向扩展,再后来,独立出SAN和NAS用很多硬盘来做大规模的横向扩展。

Hadoop 也是基于同样的横向扩展理念发展出来的。那么 Hadoop 在使用现在流行的刀片服务器、SAN和虚拟化技术上,是否和传统服务一样会提高性能呢?不尽然。

先说 Hadoop 操作的特点。Hadoop 是对IO性能非常敏感的,操作过程中将会有大量的IO操作。Hadoop 不需要 RAID,相反,使用RAID可能会降低 worker 的性能; Hadoop 希望硬盘使用 JBOD (Just Bunch of Disk 就是简单的一堆硬盘) 的简单形式,说白了,磁盘不需要特殊处理,简单的由操作系统挂载即可。这样的好处是,每一个磁盘将有独立的 IO,互相之间不需要协作,谁的数据准备好了,就把谁的数据从缓冲直接送到对应进程。而RAID的麻烦在于磁盘之间有协作,往往最慢的磁盘决定了整个RAID的性能,更严重的是,由于所有磁盘都通过一块RAID控制芯片,往往该芯片成为了磁盘性能的瓶颈。

对于 SAN 和 NAS 来说,具有和 RAID 同样的特性,由于大量的磁盘位于1-2个控制芯片之后,他们的IO无法像JBOD那样充分利用,受限于控制芯片,从而导致当集群中大量的节点并发访问的时候,很容易会造成其控制芯片的拥堵。这与传统意义上的服务器不同,在传统意义上 SAN 和 NAS 会大幅提高 IO 性能,但是 Hadoop 所需的 IO 要远远超过当前 SAN 或 NAS 的能力,至少在性价比上,SAN 和 NAS 并不是很适用于 Hadoop 的操作特性。

那么,当 Hadoop 遇到虚拟化后,问题同样就会暴露出来,由于虚拟化的系统无法意识到别的系统的存在,因此在磁盘IO调度上,无法整体的优化调度。我们知道磁盘和Flash不同,其固有的物理特性是顺序读写速度很快,但是寻道时间则很慢。而 虚拟化技术会使得操作系统无法优化调度寻道操作,导致会产生大量的寻道,从而无法充分利用磁盘顺序读写的能力 ,而降低了性能(这也是为什么Hadoop Block非常大的原因之一,用于将数据顺序写入磁盘,并顺序读出,以大幅增加IO性能)。

刀片服务器的问题是在于内部空间十分有限,前文所知,Hadoop 的需要大量的IO,因此一个节点内,如果有更多的独立磁盘,其IO性能会更好。这也是为什么前文中提议配置时,24 x 1TB 的磁盘比 12 x 3TB 的磁盘要更好的原因。刀片服务器内部的空间限制,往往束缚了增加更多硬盘的可能性。

从这里,我们就更好的能够看出 Hadoop 所谓的运行于独立的商用服务器,以及其特意强调的 Share Nothing 的构架的原因。任务独立、IO独立对于Hadoop来说,会产生更好的性能,换句话说,这种 Share Nothing的构架,会更充分的利用硬件资源。

参考1:http://twang2218.github.io/readings/hadoop-operations/hadoop-operations-notes-ch04.html

参考2:http://www.ha97.com/5673.html

时间: 2024-11-25 08:15:52

部署Hadoop集群为什么优先选择硬件方式而不是虚拟化方式?的相关文章

通过Sahara部署Hadoop集群

声明: 本博客欢迎转载,但请保留原作者信息,并请注明出处! 作者:郭德清 团队:华为杭州OpenStack团队 在前一篇文章对Sahara的安装配置做了下总结,今天主要对如何在Sahara环境上部署Hadoop集群做一个总结,也把自己部署的时候填过的坑总结下,避免其他人在同一个坑掉下. 1.  上传镜像 这边选择的是vanilla的镜像,下载地址:http://docs.openstack.org/developer/sahara/userdoc/vanilla_plugin.html ,我选择

阿里云ECS服务器部署HADOOP集群(五):Pig 安装

本篇将在阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建的基础上搭建. 1 环境介绍 一台阿里云ECS服务器:master 操作系统:CentOS 7.3 Hadoop:hadoop-2.7.3.tar.gz Java: jdk-8u77-linux-x64.tar.gz Pig: pig-0.17.0.tar.gz 2 Pig 下载 下载 pig-0.17.0.tar.gz 并在合适的位置解压缩,笔者这里解压缩的路径为: /usr/local 将解压得到的目录改

阿里云ECS服务器部署HADOOP集群(四):Hive本地模式的安装

本篇将在阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建的基础上搭建. 本地模式需要采用MySQL数据库存储数据. 1 环境介绍 一台阿里云ECS服务器:master 操作系统:CentOS 7.3 Hadoop:hadoop-2.7.3.tar.gz Java: jdk-8u77-linux-x64.tar.gz Hive:apache-hive-2.3.6-bin.tar.gz Mysql: Mysql 5.7 MySQL Connector-J:mysql-

阿里云ECS服务器部署HADOOP集群(七):Sqoop 安装

本篇将在 阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建 阿里云ECS服务器部署HADOOP集群(二):HBase完全分布式集群搭建(使用外置ZooKeeper) 阿里云ECS服务器部署HADOOP集群(三):ZooKeeper 完全分布式集群搭建 阿里云ECS服务器部署HADOOP集群(四):Hive本地模式的安装 的基础上搭建. 1 环境介绍 一台阿里云ECS服务器:master 操作系统:CentOS 7.3 Hadoop:hadoop-2.7.3.tar

阿里云ECS服务器部署HADOOP集群(六):Flume 安装

本篇将在阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建的基础上搭建. 1 环境介绍 一台阿里云ECS服务器:master 操作系统:CentOS 7.3 Hadoop:hadoop-2.7.3.tar.gz Java: jdk-8u77-linux-x64.tar.gz Flume:apache-flume-1.8.0-bin.tar.gz 2 Flume 下载 下载 apache-flume-1.8.0-bin.tar.gz 并在合适的位置解压缩,笔者这里解压

阿里云ECS服务器部署HADOOP集群(三):ZooKeeper 完全分布式集群搭建

本篇将在阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建的基础上搭建,多添加了一个 datanode 节点 . 1 节点环境介绍: 1.1 环境介绍: 服务器:三台阿里云ECS服务器:master, slave1, slave2 操作系统:CentOS 7.3 Hadoop:hadoop-2.7.3.tar.gz Java: jdk-8u77-linux-x64.tar.gz ZooKeeper: zookeeper-3.4.14.tar.gz 1.2 各节点角色

实战CentOS系统部署Hadoop集群服务

导读 Hadoop是一个由Apache基金会所开发的分布式系统基础架构,Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS.HDFS有高容错性特点,并且设计用来部署在低廉的(low-cost)硬件上:而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序:HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming acces

集群配置虚拟主机及部署Hadoop集群碰到的问题

配置集群方案 Ubuntu下的配置apache虚拟主机方案: 对其中的Master节点配置虚拟主机,可以通过Chrome浏览器访问目录. 安装虚拟主机之前,先安装Apache2 sudo apt-get install apache2 再安装php5 sudo apt-get install php5 然后,进入 /etc/apache2/sites-available文件夹,添加”*.conf”文件 往该文件里写入 <VirtualHost *:80> ServerName author.x

使用shell脚本实现自动化部署hadoop集群

有四台Linux服务器,其中一台为主,其它为从.服务器使用的是CentOS6.5,jdk选择1.6,hadoop选择1.0.4版本.要到实际环境中应用还要根据实际情况做修改. 如果是新装好的系统,要先配置好ip,shell脚本如下: #!bin/bash read "input ip:" ip echo 'the default hostname is master' sed -i '$aIPADDR='$ip /etc/sysconfig/network-scripts/ifcfg-