码迷,mamicode.com
首页 > 其他好文 > 详细

了解大数据的技术生态系统 Hadoop,hive,spark(转载)

时间:2015-08-09 13:50:21      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:

首先给出原文链接: 原文链接

大数据本身是一个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的。你能够把它比作一个厨房所以须要的各种工具。

锅碗瓢盆,各有各的用处。互相之间又有重合。你能够用汤锅直接当碗吃饭喝汤,你能够用小刀或者刨子去皮。

可是每一个工具有自己的特性,尽管奇怪的组合也能工作,可是未必是最佳选择。

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

传统的文件系统是单机的,不能横跨不同的机器。

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

HDFS为你管理这些数据。

存下的数据之后,你就開始考虑怎么处理数据。尽管HDFS能够为你总体管理不同机器上的数据,可是这些数据太大了。

一台机器读取成TP的数据(非常大的数据哦。比方整个东京热有史以来全部高清电影的大小甚至更大)。一台机器慢慢跑或许须要好几天甚至好几周。对于非常多公司来说,单机处理是不可忍受的,比方微博要更新24小时热博,它必须在24小时之内跑完这些处理。

那么我假设要用非常多台机器处理,我就面临了怎样分配工作。假设一台机器挂了怎样又一次启动对应的任务。机器之间怎样互相通信交换数据以完毕复杂的计算等等。这就是MapReduce/ Tez/Spark的功能。

MapReduce是第一代计算引擎,TezSpark是第二代。MapReduce的设计,採用了非常简化的计算模型。仅仅有MapReduce两个计算过程(中间用Shuffle串联),用这个模型。已经能够处理大数据领域非常大一部分问题了。

那什么是Map什么是Reduce?

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

这看似是个非常easy的模型,但非常多算法都能够用这个模型描写叙述了。

Map+Reduce的简单模型非常黄非常暴力,尽管好用,可是非常笨重。

第二代的TezSpark除了内存Cache之类的新feature,本质上来说,是让Map/Reduce模型更通用,让MapReduce之间的界限更模糊。数据交换更灵活。更少的磁盘读写,以便更方便地描写叙述复杂算法,取得更高的吞吐量。

有了MapReduceTezSpark之后,程序猿发现,MapReduce的程序写起来真麻烦。他们希望简化这个过程。

这就好比你有了汇编语言。尽管你差点儿什么都能干了,可是你还是觉得繁琐。你希望有个更高层更抽象的语言层来描写叙述算法和数据处理流程。于是就有了PigHivePig是接近脚本方式去描写叙述MapReduceHive则用的是SQL。它们把脚本和SQL语言翻译成MapReduce程序,丢给计算引擎去计算,而你就从繁琐的MapReduce程序中解脱出来。用更简单更直观的语言去敲代码了。

有了Hive之后,人们发现SQL对照Java有巨大的优势。一个是它太easy写了。

刚才词频的东西。用SQL描写叙述就仅仅有一两行,MapReduce写起来大约要几十上百行。而更重要的是,非计算机背景的用户最终感受到了爱:我也会写SQL。于是数据分析人员最终从乞求project师帮忙的窘境解脱出来,project师也从写奇怪的一次性的处理程序中解脱出来。

大家都开心了。Hive逐渐成长成了大数据仓库的核心组件。甚至非常多公司的流水线作业集全然是用SQL描写叙述。由于易写易改,一看就懂,easy维护。

自从数据分析人员開始用Hive分析数据之后,它们发现,HiveMapReduce上跑。太慢了!流水线作业集或许没啥关系,比方24小时更新的推荐,反正24小时内跑完就算了。可是数据分析,人们总是希望能跑更快一些。比方我希望看过去一个小时内多少人在可穿戴手环页面驻足。分别停留了多久。对于一个巨型站点海量数据下,这个处理过程或许要花几十分钟甚至非常多小时。而这个分析或许仅仅是你万里长征的第一步,你还要看多少人浏览了电子产品多少人看了拉赫曼尼诺夫的CD,以便跟老板汇报。我们的用户是屌丝男闷骚女很多其它还是文艺青年/少女很多其它。你无法忍受等待的折磨,仅仅能跟project师说。快。快,再快一点。

于是ImpalaPrestoDrill诞生了(当然还有无数非著名的交互SQL引擎,就不一一列举了)。

三个系统的核心理念是,MapReduce引擎太慢,由于它太通用,太强壮。太保守,我们SQL须要更轻量,更激进地获取资源。更专门地对SQL做优化。并且不须要那么多容错性保证(由于系统出错了大不了又一次启动任务。假设整个处理时间更短的话,比方几分钟之内)。这些系统让用户更快速地处理SQL任务。牺牲了通用性稳定性等特性。假设说MapReduce是大砍刀,砍啥都不怕,那上面三个就是剔骨刀。机灵瑞丽,可是不能搞太大太硬的东西。

这些系统,说实话。一直没有达到人们期望的流行度。

由于这时候又两个异类被造出来了。

他们是Hive on Tez / SparkSparkSQL。它们的设计理念是。MapReduce慢,可是假设我用新一代通用计算引擎Tez或者Spark来跑SQL,那我就能跑的更快。并且用户不须要维护两套系统。

这就好比假设你厨房小,人又懒。对吃的精细程度要求有限。那你能够买个电饭煲。能蒸能煲能烧,省了好多厨具。

上面的介绍,基本就是一个数据仓库的构架了。

底层HDFS。上面跑MapReduce/Tez/Spark,在上面跑Hive,Pig。或者HDFS上直接跑Impala。Drill。Presto。这攻克了中低速数据处理的要求。

那假设我要更快速的处理呢?

假设我是一个相似微博的公司,我希望显示不是24小时热博,我想看一个不断变化的热播榜,更新延迟在一分钟之内,上面的手段都将无法胜任。于是又一种计算模型被开发出来。这就是Streaming(流)计算。

Storm最流行的流计算平台。流计算的思路是。假设要达到更实时的更新,我何不在数据流进来的时候就处理了?比方还是词频统计的样例。我的数据流是一个一个的词,我就让他们一边流过我就一边開始统计了。

流计算非常牛逼,基本无延迟,可是它的短处是。不灵活。你想要统计的东西必须预先知道,毕竟数据流过就没了。你没算的东西就无法补算了。因此它是个非常好的东西。可是无法替代上面数据仓库和批处理系统。

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

可是丫就是快。极快。

每一个不同的KV Store设计都有不同取舍,有些更快,有些容量更高,有些能够支持更复杂的操作。必有一款适合你。
除此之外。另一些更特制的系统/组件,比方Mahout是分布式机器学习库,Protobuf是数据交换的编码和库,ZooKeeper是高一致性的分布存取协同系统,等等。

有了这么多乱七八糟的工具。都在同一个集群上运转,大家须要互相尊重有序工作。

所以另外一个重要组件是,调度系统。如今最流行的是Yarn

你能够把他看作中央管理,好比你妈在厨房监工,哎,你妹妹切菜切完了,你能够把刀拿去杀鸡了。

仅仅要大家都服从你妈分配,那大家都能愉快滴烧菜。

你能够觉得,大数据生态圈就是一个厨房工具生态圈。为了做不同的菜。中国菜。日本菜,法国菜,你须要各种不同的工具。

并且客人的需求正在复杂化。你的厨具不断被发明,也没有一个万用的厨具能够处理全部情况,因此它会变的越来越复杂。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

了解大数据的技术生态系统 Hadoop,hive,spark(转载)

标签:

原文地址:http://www.cnblogs.com/yxwkf/p/4714928.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!