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。你可以把他看作中央管理,好比你妈在厨房监工,哎,你妹妹切菜切完了,你可以把刀拿去杀鸡了。只要大家都服从你妈分配,那大家都能愉快滴烧菜。

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

夏磊洲:大数据应用领域总结来讲分为离线计算和实时计算。随着数据量的增加,OLTP模式已经难以胜任,于是OLAP逐渐成为主流。无论是实时计算还是离线计算,基本思想是相同的,即:分而治之。大型互联网公司,单次业务需处理的数据量达到在TB级以上时,仿佛三维世界的小人不小心踏进了四维空间碎片,就像星际穿越里的那位哥们,一切记忆中非常简单的事物此时都变得异常复杂。复杂到用diff来比较两个文件都变得十分困难,复杂到我们给文件里地数据排个序都似乎变得不可能。此时,我们就像浪潮之巅里地弄潮儿,不知不觉间遇到了技术瓶颈。我们想呼救,发现众屌丝比我们还挫,我们试图突破,但总是不尽如人意,有些人想到了用超大型计算机,然而处理结果还是跟不上数据量的增加,好痛苦,好无助….

然而就在此时,仿佛晴天一声霹雳,谷歌的三篇论文给我们带来了曙光,给了我们希望。GFS解决了海量数据存储的问题,MapReduce解决了分布式计算的问题,BigTable帮助我们构建分布式的数据仓库。我们欢呼,跪舔,并且对未来充满了希望,but, 我们发现坑爹的谷歌只点化了大众,缺没有开源代码。怎么办呢,只有自己挽起袖子撸一个出来了。于是,华强北山寨版大组合Hadoop出来了。hadoop完全一对一山寨了谷歌的三篇论文的思想,憋出了HDFS(山寨自GFS), MapReduce, Hbase(BigTable)……

纪路:我暂且就按照一个由远及近的顺序,按照时间的早晚从大数据出现之前的时代讲到现在。暂时按一个城市来比喻吧,反正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的速度生产产品,新的时代才刚刚拉开序幕…

End.

http://www.36dsj.com/archives/25752

大数据真的很牛B吗?不不不,10分钟让你读懂它相关推荐

  1. 零基础学习java大数据真的难吗?

    java是一门永不言败的开发语言,随着软件行业的兴盛,现在学习java的人员也是越来越多了,但是想要学好java的话自学是没有那么容易的事情.特别是对于零基础的学员来,所以对于零基础的学员来说都是要参 ...

  2. 同时买票是怎么实现的_搞笑GIF段子:这位挖掘机司机真的很牛,同时胆子很大...

    柯基的萌除了小短腿,原来还有它的大耳朵 这位挖掘机司机真的很牛,同时胆子很大 谁说的伤口不能碰水的,它这不还好好地活着吗 小伙子不按常理出牌,万万没想到结果是这样 这个车看着挺上档次的,走在街上回头率 ...

  3. 小米电视是鸿蒙系统吗,小米高管:华为鸿蒙真的很牛,如果都能实现就更牛逼了!...

    原标题:小米高管:华为鸿蒙真的很牛,如果都能实现就更牛逼了! 8月9日华为发布了鸿蒙系统,10日紧接着又发布了搭载鸿蒙系统的荣耀智慧屏,这是华为第一次推出智能电视,也是开启鸿蒙生态链最重要的一步,荣耀 ...

  4. oppo android多大内存,OPPO R15使用感受,大内存真的很有必要

    原标题:OPPO R15使用感受,大内存真的很有必要 在我们的身边,总会遇到有朋友问自己换新手机有什么建议,有些人喜欢经常换手机,紧追时尚潮流,随心所欲,而有的人追求实在使用,希望一台手机能用个长时间 ...

  5. 可牛真的很牛,从安装开始就没有结束.

    可牛真的很牛 于是打口水仗,又是被收购.到底是怎么样的一个公司和产品呢?公司无从了解,倒是产品能随时下载.在1.0正式版颁布之际体验了一把什么叫不负责任. 看见了吧,停在这里没动静了.我等,我等... ...

  6. 大数据学习之推荐算法真的很牛逼吗?

    本文转载自科多大数据 很多产品,真的是像表面看上去的推荐算法牛逼成就了他们吗? 记得在2007年,Yahoo发布了新的搜索广告系统Panama(内部可以看作是一个推荐算法),试图于Google的Adw ...

  7. 这样的 20 张数据可视化大屏真的很香,数据直接套用即可(含源码)

    最近有不少小伙伴问我:有没有数据可视化大屏模板,而且要酷炫的那种. 今天正好有时间,给大家准备了20张精美.炫酷而且十分实用的可视化大屏模板,涉及机械.加工.零售.银行.交通等行业. 只要你有数据就能 ...

  8. 二本电气工程应届生收割5个offer,转型大数据真的与专业无关

    双非二本大四学生,电气工程及其自动化专业,非科班.大二开始实习,秋招拿了360.海康威视等5家offer,其中三家大数据,两家Java开发. 学习与面试历程 2017年底,在朋友的帮助下,开始接触编程 ...

  9. 社交网络+大数据真的用来可以模拟一个活人吗?

    最近在B站恶补了一部几年前的英剧.<黑镜>(Black Mirror). 这片子风格奇特,每一集都独立成篇,讲一个完全架空的故事.其题材天马行空无迹可循,所以我一直是拿它当英国版的< ...

最新文章

  1. C++ stringstream 简化数据类型转换
  2. Nginx访问VM虚拟机CentOS 7系统与本地Windows系统共享目录403
  3. mysql sql_safe_updates 分析
  4. 《Linux内核设计与实现》读书笔记(十一)- 定时器和时间管理
  5. postgresql 远程用户_构建Python pandas基于SSH远程MySQL和PostgreSQL的数据分析
  6. iOS- 非整星的评分控件(支持小数)
  7. 分类二级联动 php,学习猿地-php实现二级联动菜单
  8. IDEA 初次使用,记录心得
  9. “C 不再是一种编程语言”
  10. Win11如何自动关机 windows11自动关机的设置方法
  11. Facebook团队关于网页缓存的再实践
  12. C++ 对Ctrl+Z的解释
  13. 鸡兔同笼(一道明显的体现cin和cout运行较慢的特点)
  14. 《太上感应篇》告诉我们,人的起心动念都得小心啊,哈哈。
  15. python制作ico图标_Python 批量 png 转 ico
  16. 【历史上的今天】10 月 17 日:微软发布 Windows 8.1;IMDb 成立;海盗湾创始人诞生
  17. kalilinux安装中文输入法 安装fcitx,小企鹅输入法。
  18. 自我思考:世界观与方法论——关于做事方法,情商,智商,爱商的深入思索
  19. hypothesisTest
  20. 生成自己的app key文件

热门文章

  1. WPF TabControl 美化
  2. Android 点击按钮带有震动效果,使用Vibrator
  3. win8.1磁盘使用率100解决方法
  4. 如何理解API?API 是如何工作的?(5分钟诠释)
  5. php微信生成签名_微信APP支付服务端PHP生成签名
  6. nvm安装与使用详解(Window11)
  7. 2017“编程之美”终章:AI之战勇者为王
  8. 对象头与锁与synchronized简述
  9. 网上不需要实名的物联卡能用吗?有什么安全隐患?
  10. android bp文件_理解Android.bp