大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。
首先给出原文链接: 原文链接
大数据本身是一个很宽泛的概念,Hadoop
生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的。你能够把它比作一个厨房所以须要的各种工具。
锅碗瓢盆,各有各的用处。互相之间又有重合。你能够用汤锅直接当碗吃饭喝汤,你能够用小刀或者刨子去皮。
可是每一个工具有自己的特性,尽管奇怪的组合也能工作,可是未必是最佳选择。
大数据,首先你要能存的下大数据。
传统的文件系统是单机的,不能横跨不同的机器。
HDFS
(Hadoop Distributed File System
)的设计本质上是为了大量的数据能横跨成百上千台机器,可是你看到的是一个文件系统而不是非常多文件系统。比方你说我要获取/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
都如上处理,你就得到了整个文件的词频结果。
这看似是个非常easy的模型,但非常多算法都能够用这个模型描写叙述了。
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
有巨大的优势。一个是它太easy写了。
刚才词频的东西。用SQL
描写叙述就仅仅有一两行,MapReduce
写起来大约要几十上百行。而更重要的是,非计算机背景的用户最终感受到了爱:我也会写SQL
。于是数据分析人员最终从乞求project师帮忙的窘境解脱出来,project师也从写奇怪的一次性的处理程序中解脱出来。
大家都开心了。Hive
逐渐成长成了大数据仓库的核心组件。甚至非常多公司的流水线作业集全然是用SQL
描写叙述。由于易写易改,一看就懂,easy维护。
自从数据分析人员開始用Hive
分析数据之后,它们发现,Hive
在MapReduce
上跑。太慢了!流水线作业集或许没啥关系,比方24小时更新的推荐,反正24小时内跑完就算了。可是数据分析,人们总是希望能跑更快一些。比方我希望看过去一个小时内多少人在可穿戴手环页面驻足。分别停留了多久。对于一个巨型站点海量数据下,这个处理过程或许要花几十分钟甚至非常多小时。而这个分析或许仅仅是你万里长征的第一步,你还要看多少人浏览了电子产品多少人看了拉赫曼尼诺夫的CD
,以便跟老板汇报。我们的用户是屌丝男闷骚女很多其它还是文艺青年/少女很多其它。你无法忍受等待的折磨,仅仅能跟project师说。快。快,再快一点。
于是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
。
你能够把他看作中央管理,好比你妈在厨房监工,哎,你妹妹切菜切完了,你能够把刀拿去杀鸡了。
仅仅要大家都服从你妈分配,那大家都能愉快滴烧菜。
你能够觉得,大数据生态圈就是一个厨房工具生态圈。为了做不同的菜。中国菜。日本菜,法国菜,你须要各种不同的工具。
并且客人的需求正在复杂化。你的厨具不断被发明,也没有一个万用的厨具能够处理全部情况,因此它会变的越来越复杂。
版权声明:本文博客原创文章。博客,未经同意,不得转载。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/117329.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...