hadoop,spark在虚拟机集群里跑还有性能上的优势吗?

理由
举报 取消

如题,系统搭建在公司的虚拟机集群上,这样还有木有性能上的优势?或者说这样搭建分布式计算系统还有意义么?反正最终都是服务器的内存和硬盘,我感觉用多线程,多进程的老方法,直接在服务器上跑,省去那些集群间的调度和网络io,是不是会更快一些?小白不懂,求大侠相助

2017年12月21日 7 条回复 1743 次浏览

发起人:毅然 初入职场

素食者/鸡尾酒爱好者

回复 ( 7 )

  1. 昆吾
    理由
    举报 取消

    作为分布式计算平台,性能是非常重要的一个指标,但绝对不是唯一一个指标。单纯从性能角度上来讲,硬件资源固定,虚拟化增大了开销,必然有所降低。但是虚拟化会带来一些其他方面的功能。

    1. 资源隔离。有些集群是专用的,比如给你三台设备只跑一个spark,那还算Ok。但在很多规模很小的团体中,在有限的硬件设备的情况下,又要跑spark,比如又要跑zookeeper、kafka等等,这个时候,我们希望它们之间是不会互相干扰的。假设你spark的配置没做好,内存占用太大了,你总不希望把你好端端zookeeper给影响得挂掉(躺枪_(:з」∠)_)。那么此时虚拟机或者容器技术可以对物理资源进行隔离,防止这种情况出现。
    2. 快速部署,简化配置。无论对于新手还是老手来说,干这行非常痛苦的一点是各种框架的配置和部署,大量重复工作,又不怎么需要动脑子。所以你当然希望有一种方式,直接把你已经配置好的环境保存下来,作为一个镜像,然后当集群要扩展了,比如又增加了一个物理设备,你希望在上面虚拟化成三台虚拟机,两台运行spark,一台运行zookeeper,那简单了,把spark的镜像copy两份,zookeeper的镜像copy一份,网络配置好,开起来,一切都是那么潇洒…
    3. 调度单元。更高级的应用中,数据平台向整个团体或者公众提供服务。用户A希望有资源运行自己的应用,用户B也希望运行自己的应用,无论从安全角度还是管理角度上来说你都不希望他们之间是混杂的,这时候虚拟机也是一种解决方案。如果做一个高级点的调度器,当感知到spark工作压力非常大的时候启动一个zk镜像,反之减少一个镜像……这些功能在有虚拟机进行隔离时都会简单很多很多。

    随便想了几个理由,应该还有很多,虚拟化这方面的专家应该更有发言权,毕竟干分布式计算的也只是虚拟化技术的受益者之一。

    问题中谈到了性能,当然虚拟化的引入比裸奔性能上一定会有影响,如果影响很大的话,在做架构设计的时候就要根据实际需求进行取舍;然而比如像container,docker等轻量级虚拟化技术的出现,使它对性能的影响被压缩到了一个很小的地步,对于大多数分布式系统来说,这点性能损耗并不会有太大的影响……然后你懂的……

  2. 李冰
    理由
    举报 取消

    确实没有必要虚拟,Hadoop和spark都是可以单机跑的。如果你的服务器只有一个node,那么单机跑要快很多。

  3. Harry Zhu
    理由
    举报 取消

    hadoop的关键在io

    spark的关键在内存

    虚拟机,没错,跑当然能跑,尤其作为测试环境,但是扯得蛋真的很疼,是真的很疼的那种

    如果生产环境资源有限,spark可以放在vm中跑,只要载入数据时注意点; Hadoop就尽量在物理机上面跑吧,节点少点比n个vm都强太多

    经验之谈,你在太平洋攒10台pc远比你买一台hp的2U跑虚拟机让Hadoop来得畅快

    我们用的是hp的2U机器25块900gb硬盘物理机作为节点来跑的,酸爽

  4. 孤寂摩天轮
    理由
    举报 取消

    我同意楼上 @杨甬舟的说法。虚拟机或者容器来跑Hadoop和Spark,最大的优势就是在于方便部署和管理,并且共有云服务提供商可以提供弹性的服务,现在Databricks和Amazon,甚至国内的青云都提供了Spark虚拟机集群服务。我觉得虚拟化主要是针对大型云服务提供商而言的,集群的快速部署和便捷管理服务是很有市场的,不管是科研还是生产环境。在此基础上我想补充一下:

    1. 性能的隔离是有必要的,不然就会相互干扰,单个物理节点下用多线(进)程的方式的确从直观上性能是比虚拟化后要好,但是虚拟机带来的好处就是,一个服务器上可以跑多个云用户集群,方便管理,资源效率也能有所提高。

    2. 虚拟化技术作为云计算的基础,有其优势,它可以提供弹性资源服务,总体上是可以提高硬件使用率的,性能和资源使用率之间是存在一个tradeoff的。

    3. 在按时间的计费模式下,像Spark这种对内存和CPU使用率较高的集群,部署到公有云中性价比较高。

    另外一点,Hadoop部署到虚拟机集群中也已经有很多很多成熟的研究成功和工业产品,至于性能,据透露,阿里巴巴内部曾经试验过,大概性能损耗10%,这在大规模分布式系统中,和数据中心资源利用率比起来,应该不足为道。

    其实要看你们公司想怎么搞了,要是这些机器就用来跑你的这个集群,那就裸奔试试看呗,不然的话,虚拟化还是有存在的必要的。

    另外,传送门

    [1]Three reasons you need to run Spark in the cloud

    [2]Databricks Cloud: Making Big Data Easy

  5. 向磊
    理由
    举报 取消

    性能问题在hadoop虚拟化里其实是个次要问题,虽然也确实性能差。

    更重要不要做虚拟化的原因是你的很多hadoop虚拟机很有可能其实是跑在一台物理服务器上的,那这台物理服务器宕机就会导致整个集群不可用。

    另外,虚拟化也可能使用的是共享存储,那么这样会让hadoop内建的冗余机制变得毫无意义。

    第三,虚拟化里,你无法划分正确的机架来让hadoop合理的分布数据块存放位置。

    最后,虚拟化的网络是软件定义的,底层发生问题你很难对hadoop定位和排错。

    这些才是不要用虚拟化最重要的原因,排除这些才谈到性能问题。

    当然曾经也有人跟我抬杠,说一台服务器只做一个虚拟机不就好了吗?可问题是,你要这样做的话为什么不直接装hadoop,非要为了部署方便而白白浪费掉30%的性能呢。每三台服务器就会浪费掉一台物理机的计算能力,代价太大了,除非土豪的国企或政府,否则没人会这么干。

  6. 知足常乐
    理由
    举报 取消

    我非常赞同 Harry Zhu,hadoop主要是磁盘I/O问题,spark内存计算居多,这样反倒咱们一个启发,hadoop像似更适合物理机环境,spark可以存活在虚拟机里头。这样两套集群间的组合不知道是否合适。但是,在网上看到,通常喜欢把spark节点与hdfs节点部署到一块,减少网络带宽,又陷入了另外一个矛盾?

  7. harry
    理由
    举报 取消

    这就是为什么要跑在docker里呀

我来回答

Captcha 点击图片更换验证码