Cloudera创始人兼CTO Amr Awadallah 诞生于2005年的Hadoop,目前已经成为全球IT产业的宠儿,但是云计算时代Hadoop又有什么作为呢?Cloudera创始人兼CTO Amr Awadallah带来了《Hadoop的前世今生》主题演讲。他指出Hadoop是一个能够对大量数据进行分布式处理的软件框架,就是因为具备可靠、高效、可伸缩的特点,Hadoop目前已经成为云计算和大数据系统中的关键部分,本次演讲Amr Awadallah不仅展示最新的Hadoop实践应用案例,还为大家带来第一手的Hadoop经验分享。 文字实录如下: 为什么有这么多人采纳Hadoop?为什么大数据是一个新的东西?这是我周三谈的,如果你没有听到,你可以看一下我的视频录像。关于Hadoop,这里我想谈一下它的历史,然后我想谈一下Hadoop将来会发生什么,希望给大家一个基础知识关于Hadoop如何进行运行,希望大家不会感到枯燥。 Hadoop的起源 事实上,我们很多东西都是从零开始做起的,在Hadoop的历史之前,我想跟大家讲一下我自己,我是Cloudera的创始人兼CTO。 在2002年之前开始在一个项目上合作,目的是建立起网络,从网络上建立起很多信息,然后用这样的一些网页给这个世界备受关注的。因为当时他们看了Google文件,就是在2003年和2004年有这样的一个文件。然后他们有这样的一个网络使用的文件,像这样一些论文你可以在网上下载和读一下。Google并不是这个系统的源代码 ,它只是把这个论文出版了,然后在那之后它们把这个文件中的一些概念放到了这个项目里,包括这样一种分布的系统等。 2005年,雅虎挣扎了一年,因为他们针对自己的内部系统做了一些改进,而他们的成本非常高,所以他们所做的最后引擎的项目并不是非常成功,他们并没有赚到很多的钱。因为他们必须得从基础架构开始,所以他们是完全不一样的架构方式。我当时在雅虎工作就已经在争论这件事情,我们到底是从零做起来建立自己的系统,还是我们可以作为雅虎这样一个公司,来利用开源代码 。这样一来我们就可以占有更多技术方面的资源,占有开源代码,通过这样的方式节省一些人力物力和财力。 当时有一个雅虎的同事 ,后来跳槽去微软了。我们谈论过我们所使用的方法,我们建立文件系统的方式,这是我们的武器,但是这些武器妨碍了雅虎的创新速度,而现在Google的创新速度还是非常快,尤其在网络应用这一块。当时我们在公司内部做了一些讨论和争论,我们希望能够使用开源代码 ,因为现在Google用了很多开源代码,如果我们也能用到这些开源代码,雅虎也能获得像Google一样的成功。 还有一位创始人是从Facebook跳过来的,他加入了我,建立了这个Cloudera公司。后来另外一位也加入了Cloudera,那时候我们很多技术都还不是非常成熟,也为Hadoop的开发铺垫了一些基础。2008年,Hadoop出现。事实上,Hadoop技术先出现的,名字是稍后出现的,名字这个东西很怪异。是我们其中一人,他儿子有一个玩具象,就给他的玩具大象起了名字叫Hadoop,然后他就拿小孩说的这个名字来命名了,这个技术已经非常流行了。在2008年时,我们蜂窝的技术中使用了Hadoop技术。 Hadoop的主要功能 刚才我已经给大家介绍了Hadoop的起源,你们知道不知道Hadoop分布式系统是什么?你们了解不了解Hadoop分布式文件系统?Hadoop有两个主要功能。第一个功能是Hadoop分布式文件系统,另一个是减少镜像。这个所谓的分布式文件系统,不管是微软,还是其他的公司,它们是把文件存储起来叫做文件系统,然后在这个文件系统上面运行很多应用程序。不管哪个公司,它们的做法都是一样的,所有的应用程序都是在文件系统上跑的。Hadoop它做的是一个开放式的数据中心的文件系统,也就是说你的应用程序不是在单机上的文件系统上运行的,它是在多个分布式文件系统上运行的。周三的时候我在这方面已经说到了,这个分布式文件系统的好处就是具有灵活性、可扩展性以及经济性,就是你可以随时随地、随心所欲地存储数据,扩展性就是你可以无限多的增加节点。还有是开源代码 ,这样你就不需要付很多钱安装。灵活性、可扩展性、经济性是Hadoop的特点。 Hadoop在这个系统中位于核心部位,在这个上可以发布一系列应用程序,Apache FLUME已经在连接上发挥很大的作用,同时可以通过它的这个接口和微软的程序访问起来。Apache可以减少使用Hadoop的延时。Google所发布的文件叫“Google大表”,在大表方面也有非常好的应用性。所有的系统和每个主线都是在Hadoop里面做的,你可以在Hadoop里面进行开发,然后把它安装在这个系统当中,它跟这个数据连接有关。你可以在云上运行Hadoop,只要你有良好的API接口,不管怎么说,你在这个平台上都可以很轻松地创建Hadoop。所以你应该关注一下Apache是什么,Apache跟雅虎有关,它是一个基本框架,Apache框架现在已经为很多的技术所使用了,而且Apache它能够让域名节点的可获得性得到很大的提高,也就是说现在所做的是基础架构的工作,所有的基础架构程序都是在Apache上走的。比方说你有作业1、作业2、作业3,那么它可以顺序地进行执行,而且它使用的编程语言也是非常简单的。Apache AHOUT是另外一个项目,我们做了一些关于建立一个跟操作系统比较像的东西,如果我们使用的是Linux的话,那么我们就可以充分使用开源系统带来的好处。 HDFS是Hadoop分布式系统,就是给您一个文件,它可以分成几个部分放在不同的区存储,我们对于每一个文件我们都有三个备份,备份1、备份2、备份3分别存在不同的地方。那么应用程序是你可以放在文件,比方说有一些文件是经常被访问的,叫“热文件”,这种文件你可以给它分配10或者20的备份,备份能给你带来什么好处?首先是可持久性,你做的不是全文本的复制或者复本,你只是按照一种更加稳妥的方式进行文件的存储,而且不需要创建更多的备份。还有是你可以通过非常可获得性的方式存储这些文件的备份。同时,你可以把你机架从三个减少到一个半。还有一点,就是可持续性和可获得性,因为对文件你有很多不同的备份,那么一个备份宕掉了,但是我还是可以执行我的应用程序,因为我的文件备份在另外一个机器上可以找得到。如果我没有进行这样方式的备份的话,那么一个文件宕掉了,那么我一定要指望这个交换机恢复了以后才能继续执行这个程序。还有一点,就是我们在同样的一个分区上可以跑很多个应用程序,对于经常访问 的文件增加它的备份,通过这种方式增加了它的本地访问量,也做好本地化了,不需要占用很多的带宽。 HDFS还减少延时,减少读取和写进的东西,在这样的文件系统当中,你可能在这个文件当中进行读取和改变。如果你想这样做的话你就要进行锁定 ,这样其他的用户就不能改变这个文件。我们不允许你去改变这个文件,你要想改变这个文件的话,你把你想改变的文件做成一个副本,这样我们就不会把这个文件锁住和影响其他人访问 这个文件,这就是HDFS的好处,这就是我们所提供的HDFS的机制。还有是在HDFS上经常会检查分区,在后台运行的,而且很慢,它查得是所有分区,可以看到检查结果,看到三个副本之间是不是已经不匹配 了,如果不匹配了说明一个副本已经发生改变了,这样一来会造成故障。HDFS能做的是什么?它能够让你以最低的成本使用硬件,并且能够保持最好的实时的可获得性。这样一来就可以尽可能多的吸纳数据。还有一点,是当出现故障的时候都几乎隐藏了,你也不需要担心。 Hadoop可扩展的秘密 MapReduce系统有这样一个模型,这是MapReduce整体的编程,这是分布式系统的管理。在这个系统下,要改变这个系统。实际上MapReduce是当你有这样一个工作,然后再看一下你想去访问这其中哪一个,然后会看一下它的数据、它的位置,这是一个秘密,为什么Hadoop会这么强大,这么可扩展的秘密,因为它总是要努力的去把你的任务进行排成,就是尽可能的让它和你的数据有一个很密切的联系。所以说它会有这样一些线索知道数据在哪里,然后我希望我的这个工作也是在这里进行。我希望有另一个服务器非常近,因为有的时候这个机架如果被封闭的话那么就有延迟和流量的阻塞。它在机群中看一下,然后获得很好的加强。 HDFS和MapReduce要去分解征服每个不同,所以我会看一下五个不同的。1这在里,另一个在2,另一个在3,那么就会看每一个任务的进程,如果有一个任务延迟了,那像2会在其他的计算速度之后,它有一个延迟,那我就把它挂起,它可能负载过大了,或者其他的原因。它可以保护这样的一些延迟的任务。在机群中有一些百分比任务有滞后现象,所以一个工作完成了,其他的工作还在进行之中,你就希望其他的这些工作能有这种重新的分配。这样的话可以在高层排成。 首先有高阶的系统的架构,有1.0、2.0的模型,这个是在我们的同一个机群中的东西,它知道在机群中所处的位置。哪一个文件还是编码怎样,还有哪一个服务器有这样的一个副本,所以它得告诉你这个数据在哪。它的源数据在Hadoop1.0中可以有很强的复制性,可以进行重建。如果有问题的话就是能力的问题了。如果1.0瘫痪 了,那么你大概需要5-3分钟让机群重新启动。 在机群中的工作在哪里,所有在机群中的工作必须重新再启动,这是很大的问题,这个大的问题在Hadoop2.0已经解决。 关于Hadoop 2.0 现在我们有两个Name Node,有一个活动的,另一个是待命的,那么这两者之间的区别是什么?主要的Name Node如果出现故障可以被探测,会告诉大家这个Name Node出现问题,然后告诉第二个Name Node启动,这样可以给一些时间让第一个Name Node进行恢复。但如果要是待命的出现问题那就有问题了,所以要逐渐的改变HDFS。活跃的跟待命的进行沟通,所以你要有一个系统,如果系统达到100G,那么它们之间可以很好的进行通讯,它们都是服务同一个文件系统的。如果只有这样一个原始的,你要重新购买另一个硬盘加入新的Name Node。另外一个非常关键的事情,就是Hadoop 2.0有这样的一个联合,文件系统是5000个节点,这是一个限制,很多公司已经把它进行了突破,如果比4000个节点多的话就有一种联合在Hadoop里,这样就可以有1000个节点,可以有很多的机群,你可以把它建成统一的HDFS的机群,然后可以有一个全球 通用的系统,它会有更多的Name Node。Name Node可以把故障进行割礼,如果一个机群有故障了,你可以有解决方案和复制。一个机群有问题并不意味着所有机群都出现鼓掌,所以它可以控制机群的故障范围。每1000个Name Node都可以进行分离的出现故障的Name Node。 关于MapReduce ,它非常年轻,它是一个编程的Node在MapReduce,可以以一种比较廉价的方式运行。这个可以提供的是运行其他编程在这个MapReduce,现在数据的排成能力不仅仅可以让你使用MapReduce,在其他的地方也可以使用。另外一块MapReduce1.0里的关键点中可以把它进行分离,这样可以增加很多效率。在这,你可以有这个池,可以作为一个集群使用,所以它的效率更高。它的可用性更高,它的可扩展性更高,并不是只有一个。而且你现在可以把它分配作业的方式在升级方面或者扩展没有任何的障碍。两个月以前我们提供一个新的版本,我们已经有2.0版本,有社区发布了。 另外一个是我们有非常稳健的18工程师组成 的工程团队,他们同样跟所有的社区进行团队合作。,我们也得到其他很多网络公司的帮助。我们在名字节点方面进行了重新的改编,因为我们知道名字节点它在任何时候都可能宕掉,都可能失效。那我们现在使用这个方式,就可能当这个节点或者磁盘出现问题的时候能够马上恢复。同样是关于作业故障,每一个作业追踪器追踪到一个作业,这样一来就可以提供系统的稳定性。我今天早上已经谈到过这个问题了,现在很明显的趋势是现在挂很多的硬盘 ,有的时候一个节点上可能挂24个盘,一个盘坏掉的话我们就把整个名字节点废掉,然后把所有的名字节点数据进行复制。如果你只有4个盘好办,但是我们不能这样做,也就是说我们不能下面一个盘坏了,然后把其他没坏的盘进行复制,这样工作量太大了,这并不是好的方式。还有另外的一点,就是在可获得性方面。我们现在可以有多机群的备份方式,也就是说现在你可以有2-3个机群,然后他们都可以进行实时的相互支持。这样一来的话就会不会再有死循环的情况出现了,让可获得性得到提高。 这个所谓的可获得性我们可以看到,Hadoop可以提供,而且已经得到了极大的改善。还有就是可扩展性,现在HDFS的联合方式可以进行水平的扩展,而且可以增加很多的节点,增加多少都可以,但是现在每个作业追踪器负责一个作业,这样一来不管你增加几个节点都没有限制,你甚至可以增加4000个节点。还有就是性能方面的提高,我们知道,现在所使用的THF这些性能都有所提高,而且都提高了起码百分之百 ,也就是说性能翻了一倍。还有我们这种随机寻找的方式、搜索的方式性能也提高了百分之百。而且你使用的其实是一种半结构的语言,不管是JAVA还是其他的语言进行搜索。 还有其他的一些性能表现方面的提高,比方说HDFS的输出性能也有所提高,这样一来数据它就离它的任务更加近了,而且数据之间的竞争就减少了。还有其他的一些改善,比方说以前的数据挖掘功能,因为我们现在发现比方说这个Windows或者其他的Hadoop的工具,ODBC的驱动器,它现在已经得到BI工具,通过这种方式它就可以用于很多BI工具上去,得到很多高的安全性能方面的加强。这样一来的话,作业的调配的方面,你在申请一个资源的话,你都可以把你的优秀性提高,通过这种方式你就能够达到这个作业的执行权。现在我们可以加这个数据的快照,通过这种方式来备份数据。还有,我们可以通过不同的方式进行数据的处理,并且我们也可以进行工作负荷的管理,而且我们可以进行数据的分析,尤其是源数据的管理。还有就是可以通过这种交互式的方式提供这些数据。我想接下来的两年,所有这些性能都会体现出来,而且能够实现更高的稳定性,而且能够实现比较低的延时 |
|