如何用形象的比喻描述大数据的技术生态?HadoopHiveSpark 之间是什么关系?

Posted 程序猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用形象的比喻描述大数据的技术生态?HadoopHiveSpark 之间是什么关系?相关的知识,希望对你有一定的参考价值。

来自:知乎

链接:http://www.zhihu.com/question/27974418

问题:如何用形象的比喻描述大数据的技术生态?Hadoop、Hive、Spark 之间是什么关系?


对于我们这些文科,商科生来说。我们刚刚搞懂服务器,数据库,C++,java等基础语言是个什么东西的时候,大数据时代来了,科技蜀黍又玩起Hadoop,HDFS,MapReduce,Common,Spark,Mahout,HBase,NoSQL,Cassandra,GFS, MapReduce, BigTable,Hive,Pig……这些蛇精病和大怪兽了。我不认识它们,还有什么妖怪没记进来的,请各位继续在评论里补充。


可各位大神能不能把这些混乱的技术妖词(对不起,正是因为不懂,所以很乱),做一个生态的比喻?比成,一棵树?一个城市?一个人的循环系统?随便你比……总之让我们这些技术白痴也能搞明白,它们之间是什么关系,谁是干什么的?


叩谢。


回答者:Xiaoyu Ma,号称是大数据工程师


大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的。你可以把它比作一个厨房所以需要的各种工具。锅碗瓢盆,各有各的用处,互相之间又有重合。你可以用汤锅直接当碗吃饭喝汤,你可以用小刀或者刨子去皮。但是每个工具有自己的特性,虽然奇怪的组合也能工作,但是未必是最佳选择。


大数据,首先你要能存的下大数据。


传统的文件系统是单机的,不能横跨不同的机器。HDFS(Hadoop Distributed FileSystem)的设计本质上是为了大量的数据能横跨成百上千台机器,但是你看到的是一个文件系统而不是很多文件系统。比如你说我要获取/hdfs/tmp/file1的数据,你引用的是一个文件路径,但是实际的数据存放在很多不同的机器上。你作为用户,不需要知道这些,就好比在单机上你不关心文件分散在什么磁道什么扇区一样。HDFS为你管理这些数据。


存的下数据之后,你就开始考虑怎么处理数据。虽然HDFS可以为你整体管理不同机器上的数据,但是这些数据太大了。一台机器读取成T上P的数据(很大的数据哦,比如整个东京热有史以来所有高清电影的大小甚至更大),一台机器慢慢跑也许需要好几天甚至好几周。对于很多公司来说,单机处理是不可忍受的,比如微博要更新24小时热博,它必须在24小时之内跑完这些处理。那么我如果要用很多台机器处理,我就面临了如何分配工作,如果一台机器挂了如何重新启动相应的任务,机器之间如何互相通信交换数据以完成复杂的计算等等。这就是MapReduce / Tez / Spark的功能。MapReduce是第一代计算引擎,Tez和Spark是第二代。MapReduce的设计,采用了很简化的计算模型,只有Map和Reduce两个计算过程(中间用Shuffle串联),用这个模型,已经可以处理大数据领域很大一部分问题了。


那什么是Map什么是Reduce?


考虑如果你要统计一个巨大的文本文件存储在类似HDFS上,你想要知道这个文本里各个词的出现频率。你启动了一个MapReduce程序。Map阶段,几百台机器同时读取这个文件的各个部分,分别把各自读到的部分分别统计出词频,产生类似(hello, 12100次),(world,15214次)等等这样的Pair(我这里把Map和Combine放在一起说以便简化);这几百台机器各自都产生了如上的集合,然后又有几百台机器启动Reduce处理。Reducer机器A将从Mapper机器收到所有以A开头的统计结果,机器B将收到B开头的词汇统计结果(当然实际上不会真的以字母开头做依据,而是用函数产生Hash值以避免数据串化。因为类似X开头的词肯定比其他要少得多,而你不希望数据处理各个机器的工作量相差悬殊)。然后这些Reducer将再次汇总,(hello,12100)+(hello,12311)+(hello,345881)= (hello,370292)。每个Reducer都如上处理,你就得到了整个文件的词频结果。


这看似是个很简单的模型,但很多算法都可以用这个模型描述了。


Map+Reduce的简单模型很黄很暴力,虽然好用,但是很笨重。第二代的Tez和Spark除了内存Cache之类的新feature,本质上来说,是让Map/Reduce模型更通用,让Map和Reduce之间的界限更模糊,数据交换更灵活,更少的磁盘读写,以便更方便地描述复杂算法,取得更高的吞吐量。


有了MapReduce,Tez和Spark之后,程序员发现,MapReduce的程序写起来真麻烦。他们希望简化这个过程。这就好比你有了汇编语言,虽然你几乎什么都能干了,但是你还是觉得繁琐。你希望有个更高层更抽象的语言层来描述算法和数据处理流程。于是就有了Pig和Hive。Pig是接近脚本方式去描述MapReduce,Hive则用的是SQL。它们把脚本和SQL语言翻译成MapReduce程序,丢给计算引擎去计算,而你就从繁琐的MapReduce程序中解脱出来,用更简单更直观的语言去写程序了。


有了Hive之后,人们发现SQL对比Java有巨大的优势。一个是它太容易写了。刚才词频的东西,用SQL描述就只有一两行,MapReduce写起来大约要几十上百行。而更重要的是,非计算机背景的用户终于感受到了爱:我也会写SQL!于是数据分析人员终于从乞求工程师帮忙的窘境解脱出来,工程师也从写奇怪的一次性的处理程序中解脱出来。大家都开心了。Hive逐渐成长成了大数据仓库的核心组件。甚至很多公司的流水线作业集完全是用SQL描述,因为易写易改,一看就懂,容易维护。


自从数据分析人员开始用Hive分析数据之后,它们发现,Hive在MapReduce上跑,真鸡巴慢!流水线作业集也许没啥关系,比如24小时更新的推荐,反正24小时内跑完就算了。但是数据分析,人们总是希望能跑更快一些。比如我希望看过去一个小时内多少人在充气娃娃页面驻足,分别停留了多久,对于一个巨型网站海量数据下,这个处理过程也许要花几十分钟甚至很多小时。而这个分析也许只是你万里长征的第一步,你还要看多少人浏览了跳蛋多少人看了拉赫曼尼诺夫的CD,以便跟老板汇报,我们的用户是猥琐男闷骚女更多还是文艺青年/少女更多。你无法忍受等待的折磨,只能跟帅帅的工程师蝈蝈说,快,快,再快一点!


于是Impala,Presto,Drill诞生了(当然还有无数非著名的交互SQL引擎,就不一一列举了)。三个系统的核心理念是,MapReduce引擎太慢,因为它太通用,太强壮,太保守,我们SQL需要更轻量,更激进地获取资源,更专门地对SQL做优化,而且不需要那么多容错性保证(因为系统出错了大不了重新启动任务,如果整个处理时间更短的话,比如几分钟之内)。这些系统让用户更快速地处理SQL任务,牺牲了通用性稳定性等特性。如果说MapReduce是大砍刀,砍啥都不怕,那上面三个就是剔骨刀,灵巧锋利,但是不能搞太大太硬的东西。


这些系统,说实话,一直没有达到人们期望的流行度。因为这时候又两个异类被造出来了。他们是Hive on Tez / Spark和SparkSQL。它们的设计理念是,MapReduce慢,但是如果我用新一代通用计算引擎Tez或者Spark来跑SQL,那我就能跑的更快。而且用户不需要维护两套系统。这就好比如果你厨房小,人又懒,对吃的精细程度要求有限,那你可以买个电饭煲,能蒸能煲能烧,省了好多厨具。


上面的介绍,基本就是一个数据仓库的构架了。底层HDFS,上面跑MapReduce/Tez/Spark,在上面跑Hive,Pig。或者HDFS上直接跑Impala,Drill,Presto。这解决了中低速数据处理的要求。


那如果我要更高速的处理呢?


如果我是一个类似微博的公司,我希望显示不是24小时热博,我想看一个不断变化的热播榜,更新延迟在一分钟之内,上面的手段都将无法胜任。于是又一种计算模型被开发出来,这就是Streaming(流)计算。Storm是最流行的流计算平台。流计算的思路是,如果要达到更实时的更新,我何不在数据流进来的时候就处理了?比如还是词频统计的例子,我的数据流是一个一个的词,我就让他们一边流过我就一边开始统计了。流计算很牛逼,基本无延迟,但是它的短处是,不灵活,你想要统计的东西必须预先知道,毕竟数据流过就没了,你没算的东西就无法补算了。因此它是个很好的东西,但是无法替代上面数据仓库和批处理系统。


还有一个有些独立的模块是KV Store,比如Cassandra,HBase,MongoDB以及很多很多很多很多其他的(多到无法想象)。所以KV Store就是说,我有一堆键值,我能很快速滴获取与这个Key绑定的数据。比如我用身份证号,能取到你的身份数据。这个动作用MapReduce也能完成,但是很可能要扫描整个数据集。而KV Store专用来处理这个操作,所有存和取都专门为此优化了。从几个P的数据中查找一个身份证号,也许只要零点几秒。这让大数据公司的一些专门操作被大大优化了。比如我网页上有个根据订单号查找订单内容的页面,而整个网站的订单数量无法单机数据库存储,我就会考虑用KV Store来存。KV Store的理念是,基本无法处理复杂的计算,大多没法JOIN,也许没法聚合,没有强一致性保证(不同数据分布在不同机器上,你每次读取也许会读到不同的结果,也无法处理类似银行转账那样的强一致性要求的操作)。但是丫就是快。极快。


每个不同的KV Store设计都有不同取舍,有些更快,有些容量更高,有些可以支持更复杂的操作。必有一款适合你。


除此之外,还有一些更特制的系统/组件,比如Mahout是分布式机器学习库,Protobuf是数据交换的编码和库,ZooKeeper是高一致性的分布存取协同系统,等等。


有了这么多乱七八糟的工具,都在同一个集群上运转,大家需要互相尊重有序工作。所以另外一个重要组件是,调度系统。现在最流行的是Yarn。你可以把他看作中央管理,好比你妈在厨房监工,哎,你妹妹切菜切完了,你可以把刀拿去杀鸡了。只要大家都服从你妈分配,那大家都能愉快滴烧菜。


你可以认为,大数据生态圈就是一个厨房工具生态圈。为了做不同的菜,中国菜,日本菜,法国菜,你需要各种不同的工具。而且客人的需求正在复杂化,你的厨具不断被发明,也没有一个万用的厨具可以处理所有情况,因此它会变的越来越复杂。


回答者:纪路,Pythoner/数据挖掘 http://mrobot.me


Home - The Big Data Landscape


有兴趣可以访问上面的网站,了解更多的知识。


我暂且就按照一个由远及近的顺序,按照时间的早晚从大数据出现之前的时代讲到现在。暂时按一个城市来比喻吧,反正Landscape的意思也大概是”风景“的意思。


早在大数据概念出现以前就存在了各种各样的关于数学、统计学、算法、编程语言的研究、讨论和实践。这个时代,算法以及各种数学知识作为建筑的原料(比如钢筋、砖块),编程语言作为粘合剂(比如水泥)构成了一座座小房子(比如一个应用程序),形成了一小片一小片的村庄(比如一台服务器)。这个时代村与村之间还没有高速公路(GFS, HDFS, Flume, Kafka等),只有一条泥泞不好走的土路(比如RPC),经济模式也是小作坊式的经济。一开始互联网并不发达,网速也不快,这种老土的方式完全应付得来,可是随着社交网络和智能手机的兴起,改变了这一切。网站流量成百上千倍的提高,数据变得更加多样化,计算机硬件性能无法按照摩尔定律稳定的提升,小村庄,小作坊生产的模式注定受到限制。人们需要更强大的模式...


起开始,人们以为只要有一个强大的中央数据库,也就是在所有的村庄之间建一座吞吐量巨大,并且兼容并蓄(非关系型,NoSQL)的仓库,用来中转每个村庄生产的大量异质货物就能够拉动经济的增长。可是没过多久,人们就意识到这是一个too young to simple的想法,因为这个仓库的大小也总是有上限的。


之后MapReduce的概念最早由google提出,用来解决大规模集群协同运算的问题,既然一台计算机性能有限,何不将他们联合起来?其野心勃勃,希望为每个村庄都建立一条”村村通“公路,也就是GFS了,就是Google分布式文件系统的意思,将不同服务器的硬盘连接起来,在外面看起来就好像一块巨大的硬盘。然后构建与其上的MapReduce就是一座工厂调度每个村庄的劳动力和物资,让这些村庄作为一个经济体运转起来。居民变得富裕起来了。


不过,富裕起来的只有”谷歌镇“,世界的其他村镇仍然过着原始的生活。这个时候雅虎和Apache的一帮人本着独乐乐不如众乐乐的精神,仿造google的思想,创建了HDFS(Hadoop 分布式文件系统,对应GFS)、Hadoop(对应google的MapReduce),并公开了全部的蓝图,供全世界免费使用。这样整个世界到处都建立起来了工厂,人们变得富裕起来了。这个时代,Hadoop叫做大数据基础设施。


俗话说:饱暖思淫欲,工厂的领导不满足于村镇工厂的粗放型生产,也不再想雇用那么多的劳动力,所以Mahout、HBase、Hive、Pig应运而生,他们都是数控机床,加工中心,只需要几名操作手就能够让整个工厂运转起来,自此人们安居乐业,丰衣足食。


当然,少数更有野心的资本家,不满足于现在的生产力,为了追求更高的利润(这是资本主义的本质),开发了效率更高的系统Spark,可以10倍于Hadoop的速度生产产品,新的时代才刚刚拉开序幕...


就是这样,以上!


回答者:董飞,微信订阅号:donglaoshi-123 | Coursera…


这一块关注过很久了,目前很多很成熟的组件。这是一张生态图,我大多数都在本文中介绍过了,主要的组件都是为了方便大家从底层的MapReduce模型中脱离出来,用高层语言来做分布式计算。




HBase:是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化数据集群。像Facebook,都拿它做大型实时应用 Facebook's New Realtime AnalyticsSystem: HBase to Process 20 Billion Events Per Day


Pig:Yahoo开发的,并行地执行数据流处理的引擎,它包含了一种脚本语言,称为Pig Latin,用来描述这些数据流。Pig Latin本身提供了许多传统的数据操作,同时允许用户自己开发一些自定义函数用来读取、处理和写数据。在LinkedIn也是大量使用。


Hive:Facebook领导的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计。像一些data scientist 就可以直接查询,不需要学习其他编程接口。


Cascading/Scalding:Cascading是Twitter收购的一个公司技术,主要是提供数据管道的一些抽象接口,然后又推出了基于Cascading的Scala版本就叫Scalding。Coursera是用Scalding作为MapReduce的编程接口放在Amazon的EMR运行。


Zookeeper:一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现。


Oozie:一个基于工作流引擎的开源框架。由Cloudera公司贡献给Apache的,它能够提供对Hadoop MapReduce和Pig Jobs的任务调度与协调。


Azkaban: 跟上面很像,Linkedin开源的面向Hadoop的开源工作流系统,提供了类似于cron 的管理任务。


Tez:Hortonworks主推的优化MapReduce执行引擎,与MapReduce相比较,Tez在性能方面更加出色。


至于Spark,我在其他的帖子中有详细阐述:与 Hadoop 对比,如何看待 Spark 技术? - 董飞的回答


回答者:白伯纯,http://sinofool.net EA | Renren | Baidu


让我用做饭来类比。


做饭自己吃 = 开发一个自己公司用的软件

在饭店做饭 = 开发一个商业软件

经营中央厨房 = 分布式处理软件


区别在哪呢?自己做饭吃,想怎么做怎么做。在饭店要满足大多数人的口味,还要控制成本。中央厨房核心难点是大规模生产的流程和质量控制。


====== 以下是吐槽 ======


其实还有一个容易混淆的东西,大数据是个商业概念,比较接近的技术名词是分布式系统。大数据的概念比分布式系统广,包括技术还包括技术产生的价值。


分布式系统的技术本身是盘冷菜,被大数据翻出来了而已。现在流行的这些软件思想基础都是二十世纪九十年代的研究成果而已。


数据价值也不是新概念了,统计学有很多经典案例来说明数据的价值,大数据理想中是突破传统的统计规模,产生质变。


理想和现实的差距还是很大,我没见过真正产生价值的大数据应用案例。也许是真有突破别人也不愿意分享吧。这导致我成了大数据黑,参考我去年写的文章:还要不要做大数据


回答者:帝喾蛮犬,看到认真的答案不点赞就是耍流氓。


Google内部早就开始玩大数据,发现时代跟不上他们的节奏,担心技术后继无人,于是发表了三篇论文(搜下gfs bigtable mapreduce)。有几个工作不饱和,整天没事干的人,想搞个开源的网页搜索(lucene nutch)。看到那三篇论文被震惊了,于是开始依葫芦画瓢,在一个二流的互联网公司(Yahoo)开始实践。这正中Google下怀。倒腾几下,出来了一头大象(hadoop),这只是个代号而已。大数据,不仅仅是存储海量的数据,更强调利用好数据的价值,这就是分析和计算。好比一个庞大的原子弹研发团队,爱因斯坦只有一个,把爱因斯坦压榨成疯子模样也只是杯水车薪,但是可以往里面投入能力差一点、各个大学、研究机构量产的、也有一定能力的学渣们(我靠),来一起搞,人海战术被证明是可行的,因为cpu不就是很多二极管(2货们)组成的嘛。每个学渣要能记住一些信息和处理一些信息。这就是分布式存储和计算(hdfs mapreduce),上层由爱因斯坦之类的来统一把控。好吧,开始跑,罗斯福问爱因斯坦,学渣们靠得住吗。爱因斯坦回答,这个系统本来就假设学渣们靠不住,他们天天dota,泡妹子,但系统有足够好的容错性,一个不行就换另一个,一个太慢就两个一起跑,谁快用谁,内部还有信用机制和黑名单呢。罗斯福说,我看行。


来自:知乎

链接:http://www.zhihu.com/question/27974418

荐号:IT创业网

互联网创业的时代,创业更具人文气息。聚最经典的IT创业技巧,最顶尖的商界精英交流平台。

微信号: chuangyetech
↑↑↑长摁二维码试试


●本文编号877,以后想阅读这篇文章直接输入877即可。

●本文分类“大数据”,搜索分类名可以获得相关文章。

●输入m可以获取到全部文章目录

●输入r可以获取到热门文章推荐

●输入f可以获取到全部分类名称



以上是关于如何用形象的比喻描述大数据的技术生态?HadoopHiveSpark 之间是什么关系?的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop生态优秀文章集锦

想了解大数据的鼻祖Hadoop技术栈,这里有一份优质书单推荐!

Hadoop如何形象描述大数据生态?

大数据学习之Hadoop生态圈

大数据生态技术体系都有哪些?

从Hadoop框架讨论大数据生态