生产环境 hadoop部署在超大内存服务器的虚拟机集群上 好 还是  几个内存较小的物理机上好?

虚拟机集群优点

虚拟化会带来一些其他方面的功能。
  1. 资源隔离。有些集群是专用的,比如给你三台设备只跑一个spark,那还算Ok。但在很多规模很小的团体中,在有限的硬件设备的情况下,又要跑spark,比如又要跑zookeeper、kafka等等,这个时候,我们希望它们之间是不会互相干扰的。假设你spark的配置没做好,内存占用太大了,你总不希望把你好端端zookeeper给影响得挂掉。那么此时虚拟机或者容器技术可以对物理资源进行隔离,防止这种情况出现。
  2. 快速部署,简化配置。无论对于新手还是老手来说,干这行非常痛苦的一点是各种框架的配置和部署,大量重复工作,又不怎么需要动脑子。所以你当然希望有一种方式,直接把你已经配置好的环境保存下来,作为一个镜像,然后当集群要扩展了,比如又增加了一个物理设备,你希望在上面虚拟化成三台虚拟机,两台运行spark,一台运行zookeeper,那简单了,把spark的镜像copy两份,zookeeper的镜像copy一份,网络配置好,开起来,一切都是那么潇洒...
  3. 调度单元。更高级的应用中,数据平台向整个团体或者公众提供服务。用户A希望有资源运行自己的应用,用户B也希望运行自己的应用,无论从安全角度还是管理角度上来说你都不希望他们之间是混杂的,这时候虚拟机也是一种解决方案。如果做一个高级点的调度器,当感知到spark工作压力非常大的时候启动一个zk镜像,反之减少一个镜像……这些功能在有虚拟机进行隔离时都会简单很多很多。
虚拟机或者容器来跑Hadoop和Spark,最大的优势就是在于方便部署和管理,并且共有云服务提供商可以提供弹性的服务,现在Databricks和Amazon,甚至国内的青云都提供了Spark虚拟机集群服务。我觉得虚拟化主要是针对大型云服务提供商而言的,集群的快速部署和便捷管理服务是很有市场的,不管是科研还是生产环境。
在此基础上我想补充一下:
1. 性能的隔离是有必要的,不然就会相互干扰,单个物理节点下用多线(进)程的方式的确从直观上性能是比虚拟化后要好,但是虚拟机带来的好处就是,一个服务器上可以跑多个集群,这些虚拟机可以分属于不同的集群。
2. 虚拟化技术作为云计算的基础,有其优势,它可以提供弹性资源服务,总体上是可以提高硬件使用率的,性能和资源使用率之间是存在一个tradeoff的。
3. 在按时间的计费模式下,像Spark这种对内存和CPU使用率较高的集群,部署到公有云中性价比较高。
另外一点,Hadoop部署到虚拟机集群中也已经有很多很多成熟的研究成功和工业产品,至于性能,据前Spark团队leader明风透露,阿里巴巴内部曾经试验过,大概性能损耗10%,这在大规模分布式系统中,和数据中心资源利用率比起来,应该不足为道。

虚拟机集群缺点

性能问题

作为分布式计算平台,性能是非常重要的一个指标,但绝对不是唯一一个指标。单纯从性能角度上来讲,硬件资源固定,虚拟化增大了开销,必然有所降低。(Hadoop和spark都是可以单机跑的。如果你的服务器只有一个node,那么单机跑要快很多)。
hadoop的关键在io
spark的关键在内存
hadoop主要是磁盘I/O问题,spark内存计算居多,这样反倒咱们一个启发,hadoop像似更适合物理机环境,spark可以存活在虚拟机里头。

虚拟机跑hadoop和spark当然能跑,但是性能会收到影响,毕竟单台机子是存在io瓶颈的,多台物理机io则可以分散和扩展。

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

经验之谈,10台pc远比买一台hp的2U跑虚拟机让Hadoop来得畅快。

安全问题

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

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

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

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

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

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

当然也有人说一台服务器只做一个虚拟机不就好了吗?可问题是,这样做的话为什么不直接装hadoop,非要为了部署方便而白白浪费掉30%的性能呢。每三台服务器就会浪费掉一台物理机的计算能力,代价太大了。

所以综上所述,最好还是同样的成本推荐物理机集群,而不是买一个大型服务器后虚拟机集群。

hadoop进阶----hadoop经验(一)-----生产环境hadoop部署在超大内存服务器的虚拟机集群上vs几个内存较小的物理机的更多相关文章

  1. 在Hadoop集群上的HBase配置

    之前,我们已经在hadoop集群上配置了Hive,今天我们来配置下Hbase. 一.准备工作 1.ZooKeeper下载地址:http://archive.apache.org/dist/zookee ...

  2. 用python + hadoop streaming 编写分布式程序(二) -- 在集群上运行与监控

    写在前面 相关随笔: Hadoop-1.0.4集群搭建笔记 用python + hadoop streaming 编写分布式程序(一) -- 原理介绍,样例程序与本地调试 用python + hado ...

  3. hadoop 把mapreduce任务从本地提交到hadoop集群上运行

    MapReduce任务有三种运行方式: 1.windows(linux)本地调试运行,需要本地hadoop环境支持 2.本地编译成jar包,手动发送到hadoop集群上用hadoop jar或者yar ...

  4. MapReduce编程入门实例之WordCount:分别在Eclipse和Hadoop集群上运行

    上一篇博文如何在Eclipse下搭建Hadoop开发环境,今天给大家介绍一下如何分别分别在Eclipse和Hadoop集群上运行我们的MapReduce程序! 1. 在Eclipse环境下运行MapR ...

  5. Hadoop集群上搭建Ranger

    There are two types of people in the world. I hate both of them. Hadoop集群上搭建Ranger 在搭建Ranger工程之前,需要完 ...

  6. Hadoop集群上使用JNI,调用资源文件

    hadoop是基于java的数据计算平台,引入第三方库,例如C语言实现的开发包将会大大增强数据分析的效率和能力. 通常在是用一些工具的时候都要用到一些配置文件.资源文件等.接下来,借一个例子来说明ha ...

  7. [转载] 把Nutch爬虫部署到Hadoop集群上

    http://f.dataguru.cn/thread-240156-1-1.html 软件版本:Nutch 1.7, Hadoop 1.2.1, CentOS 6.5, JDK 1.7 前面的3篇文 ...

  8. 把Nutch爬虫部署到Hadoop集群上

    原文地址:http://cn.soulmachine.me/blog/20140204/ 把Nutch爬虫部署到Hadoop集群上 Feb 4th, 2014 | Comments 软件版本:Nutc ...

  9. 项目进阶 之 集群环境搭建(三)多管理节点MySQL集群

    上次的博文项目进阶 之 集群环境搭建(二)MySQL集群中,我们搭建了一个基础的MySQL集群,这篇博客咱们继续讲解MySQL集群的相关内容,同时针对上一篇遗留的问题提出一个解决方案. 1.单管理节点 ...

随机推荐

  1. 火狐插件安装-基于web自动化测试

    一.Firebug 安装 1.  打开火狐浏览器—选择右上角“打开菜单”(图一)----附件组件(图二) 图一 图二 2.  点击:扩展(图三)—-------用于所有附加组件的工具(图四)----选 ...

  2. RHEL7 利用双网卡绑定实现VLAN

    使用nmcli创建bond配置 #nmcli connection add type bond ifname bond0 con-name bond0 mode active-backup #nmcl ...

  3. 对PBFT算法的理解

    PBFT论文断断续续读了几遍,每次读或多或少都会有新的理解,结合最近的项目代码,对于共识的原理有了更清晰的认识.虽然之前写过一篇整理PBFT论文的博客,但是当时只是知道了怎么做,却不理解为什么.现在整 ...

  4. Notes of Daily Scrum Meeting(11.5)

    Notes of Daily Scrum Meeting(11.5) 今天是我们学习学长代码,同时学习安卓语言的第三天.我们和学长沟通了一下,仔细讨论后得出一个结论,学长在 IOS平台上的代码可以借鉴 ...

  5. Scrum Meeting 10.31

    成员 今日任务 明日任务 今日工作时长 徐越 整理开发文档,学习ip相关知识,学习servlet相关知识 代码迁移,学习数据库相关知识 5h 赵庶宏 学习学长的servlet代码 进行数据库的连接 4 ...

  6. C#获取周一、周日的日期 函数类

    #region 得到一周的周一和周日的日期        /// <summary>         /// 计算本周的周一日期         /// </summary> ...

  7. bata6

    目录 组员情况 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:恺琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示组内最新成果 团队签入记 ...

  8. 服务 在初始化安装时发生异常:System.IO.FileNotFoundException: 未能加载文件或******

    这个问题是在用installutil.exe安装服务时候碰到的 解决方法就是把installutil.exe文件直接复制到要安装的目录下 installutil.exe的所在位置 windows/mi ...

  9. win32.gui.api.con(前置,鼠标点击,发送数据的Dome)

    # -*- coding: UTF-8 -*- import win32gui, win32con import os import time import win32gui import win32 ...

  10. Mysql 的InnoDB事务方面的 多版本并发控制如何实现 MVCC

    Mysql的MVCC不能解决幻读的问题,但是Mysql还有间隙锁功能,Mysql的间隙锁工作在Repeatable Read隔离级别下面,可以防止幻读, 参考:Mysql 间隙锁原理,以及Repeat ...