大数据生态圈及其衍生物

栏目: 数据库 · 发布时间: 5年前

内容简介:大数据这个概念本身就太大而且太宽,如果一定要严格定义是非常困难的一件事,不过Hadoop生态圈或者由其延伸的泛生态系统,基本上都是为了处理大量数据诞生的——一般而言,这种数据依赖单机很难完成。这个圈子里的工具,就像是我们厨房里的各种厨具——各自都有不同的用处,但也有一部分功能重合,比如盆和豌都可以用来喝汤,削皮刀和菜刀都可以用来去皮。但是,盆用来喝汤未免奇怪,削皮刀切菜也是万万不能。即使你强行要创造一些奇异的组合,即使最终完成工作,却不一定是最快、最好的选择。

大数据这个概念本身就太大而且太宽,如果一定要严格定义是非常困难的一件事,不过Hadoop生态圈或者由其延伸的泛生态系统,基本上都是为了处理大量数据诞生的——一般而言,这种数据依赖单机很难完成。

这个圈子里的工具,就像是我们厨房里的各种厨具——各自都有不同的用处,但也有一部分功能重合,比如盆和豌都可以用来喝汤,削皮刀和菜刀都可以用来去皮。

但是,盆用来喝汤未免奇怪,削皮刀切菜也是万万不能。即使你强行要创造一些奇异的组合,即使最终完成工作,却不一定是最快、最好的选择。

大数据生态圈及其衍生物

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

对传统的单机文件系统来说,横跨不同机器几乎是不可能完成的任务。而通过HDFS(Hadoop Distributed FileSystem),你可以通过横跨上千甚至上万台机器来完成大量数据得存储,同时这些数据全部都能归属在同一个文件系统之下。你可以通过引用一个文件路径获取存储在许多台机器上的数据文件。作为一个使用者,你完全不用去计较文件具体存储的位置,这个文件系统会为你搞定一切。

我们当然不是为了搜集数据而进行存储,我们还要用数据做一些事情。虽然我们通过HDFS存下了横跨上千台机器的数据,我们依然面临一个问题——这些数据过于庞大,如果只交给一台机器处理,我们可能得等上几周甚至更长。这些可能以T甚至于P来计量单位的数据,只靠一台机器真的能跑到地老天荒。

对于很多公司,这是无法接受的事情——我们都知道有各种热度排行,加入一台机器处理这个数据、计算热度、进行发布,可能一周之后出来结果,但大家早已经不关心了。

所以使用大量机器进行处理是必然的选择。在大量机器处理过程中,必须处理一些事务:任务分配、紧急情况处理、信息互通等等,这时候必须引入MapReduce / Tez / Spark 。这其中,前者可以成为计算引擎的第一代产品,后两者则是经过优化后的下一代。MapReduce采用了非常简单的计算模型设计,可以说只用了两个计算的处理过程,但是这个 工具 已经足够应付大部分的大数据工作了。

什么是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。这解决了中低速数据处理的要求。

在不久的将来,多智时代一定会彻底走入我们的生活,有兴趣入行未来前沿产业的朋友,可以收藏 多智时代 ,及时获取人工智能、大数据、云计算和物联网的前沿资讯和基础知识,让我们一起携手,引领人工智能的未来!


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

CSS

CSS

David Sawyer McFarland / O'Reilly / 2006-08-24 / USD 34.99

Book Description Web site design has grown up. Unlike the old days, when designers cobbled together chunky HTML, bandwidth-hogging graphics, and a prayer to make their sites look good, Cascading St......一起来看看 《CSS》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

SHA 加密
SHA 加密

SHA 加密工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具