本文内容来自网络,对原文内容和格式做了细微调整,并配图以便阅读理解。
如想查看初始信息,请点击原文

00 引言

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

01 - HDFS(Hadoop Distributed FileSystem)

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

02 - MapReduce、Tez、Spark

存的下数据之后,开始考虑怎么处理数据。
虽然HDFS可以整体管理不同机器上的数据,但是这些数据太大了。一台机器读取成T上P的数据,一台机器慢慢跑也许需要好几天甚至好几周。
对于很多公司来说,单机处理是不可忍受的,比如微博要更新24小时热博,它必须在24小时之内跑完这些处理。
那么如果要用很多台机器处理,就面临了如何分配工作,如果一台机器挂了如何重新启动相应的任务,机器之间如何互相通信交换数据以完成复杂的计算等等。
这就是MapReduce / Tez / Spark的功能。MapReduce是第一代计算引擎,Tez和Spark是第二代。

MapReduce的计算模型,只有Map和Reduce两个计算过程(中间用Shuffle串联),已经可以处理大数据领域很大一部分问题了。
假设一个巨大的文本文件存储在类似HDFS上,想要知道这个文本里各个词的出现频率。然后启动了一个MapReduce程序。

Map阶段,几百台机器同时读取这个文件的各个部分,分别把各自读到的部分分别统计出词频,产生类似(hello,12100次),(world15214次)等等这样的Pair(这里把Map和Combine放在一起说以便简化)。
这几百台机器各自都产生了如上的集合,然后又有几百台机器启动Reduce处理。

Reduce阶段,Reducer机器A将从Mapper机器收到所有以A开头的统计结果,机器B将收到B开头的词汇统计结果,等等。
当然实际上不会真的以字母开头做依据,而是用函数产生Hash值以避免数据串化。,避免数据处理各个机器的工作量相差悬殊。
然后这些Reducer将再次汇总,(hello,12100)+(hello,12311)+(hello,345881)=(hello,370292)。
每个Reducer都如上处理,就得到了整个文件的词频结果。这看似是个很简单的模型,但很多算法都可以用这个模型描述了。
Map+Reduce的简单模型虽然好用,但是很笨重。

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

03 - Pig、Hive

有了MapReduce,Tez和Spark之后,程序员发现,MapReduce的程序写起来真麻烦。他们希望简化这个过程。
这就好比你有了汇编语言,虽然你几乎什么都能干了,但是你还是觉得繁琐。你希望有个更高层更抽象的语言层来描述算法和数据处理流程。于是就有了Pig和Hive。

Pig是接近脚本方式去描述MapReduce,Hive则用的是SQL。
它们把脚本和SQL语言翻译成MapReduce程序,丢给计算引擎去计算,
使用Pig和Hive,就可以从繁琐的MapReduce程序中解脱出来,用更简单更直观的语言去写程序了。

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

04 - Impala、Presto、Drill

自从数据分析人员开始用Hive分析数据之后,发现Hive在MapReduce上跑,非常慢!
流水线作业集也许没啥关系,比如24小时更新的推荐,反正24小时内跑完就算了。但人们总是希望能跑更快一些,以便及时进行数据分析。
于是Impala,Presto,Drill诞生了(当然还有无数非著名的交互SQL引擎,就不一一列举了)。

MapReduce引擎太慢,因为它太通用,太强壮,太保守
而Impala,Presto,Drill的核心理念是:需要更轻量,更激进地获取资源,更专门地对SQL做优化,而且不需要那么多容错性保证。让用户更快速地处理SQL任务,牺牲了通用性稳定性等特性。
如果说MapReduce是大砍刀,砍啥都不怕,那么Impala,Presto,Drill就是剔骨刀,灵巧锋利,但是不能搞太大太硬的东西。

05 - Hive on Tez/Spark、SparkSQL

因为Hive on Tez/Spark和SparkSQL的出现,很大程度上导致Impala、Presto、Drill一直没有获得广泛的流行度,
Hive on Tez/Spark和SparkSQL的设计理念是:MapReduce慢,但如果使用新一代通用计算引擎Tez或者Spark来跑SQL,就能跑的更快。而且用户不需要维护两套系统。
这就好比如果厨房小,人又懒,对吃的精细程度要求有限,那就可以买个电饭煲,能蒸能煲能烧,省了好多厨具。

06 - Storm

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

那如果要更高速的处理呢?
如果是一个类似微博的公司,希望显示一个不断变化的热播榜,更新延迟在一分钟之内,上面的手段都将无法胜任。
于是又一种计算模型被开发出来,这就是Streaming(流)计算。Storm是最流行的流计算平台。

流计算的思路是:在数据流进来的时候就处理,达到更实时的更新。
还是词频统计的例子,数据流是一个一个的词,数据流通过时就开始统计了。
流计算基本无延迟,但短处是不灵活,想要统计的东西必须预先知道,毕竟数据流过就没了,你没算的东西就无法补算了。
Storm虽好,但是无法替代数据仓库和批处理系统。

07 - KV Store(Cassandra,HBase,MongoDB等)

独立的模块KV Store就是说,有一堆键值,能很快速滴获取与这个Key绑定的数据。
比如用身份证号,能取到对应的身份数据。
这个动作用MapReduce也能完成,但是很可能要扫描整个数据集。
而KV Store专用来处理这个操作,所有存和取都专门为此优化了。从几个P的数据中查找一个身份证号,也许只要零点几秒。
这让大数据公司的一些专门操作被大大优化了。比如网页上有个根据订单号查找订单内容的页面,而整个网站的订单数量无法单机数据库存储,就会考虑用KV Store来存。

KV Store的理念是:速度快,极快。
虽然KV Store基本无法处理复杂的计算,大多没法JOIN,也许没法聚合,没有强一致性保证(不同数据分布在不同机器上,每次读取也许会读到不同的结果,也无法处理类似银行转账那样的强一致性要求的操作)。
不同的KV Store设计都有不同取舍,有些更快,有些容量更高,有些可以支持更复杂的操作。

08 - 特制的系统/组件

除此以上介绍之外,还有一些更特制的系统/组件,比如

  • Mahout:分布式机器学习库
  • Protobuf:数据交换的编码和库
  • ZooKeeper:高一致性的分布存取协同系统
  • 等等。

09 - Yarn、Mesos

在同一个集群上运转如此之多的系统和组件,想要有序工作,就必须使用资源调度系统。现在最流行的是Yarn。
可以把资源调度系统看作中央管理,好比老板娘在厨房监工,只要大家都服从任务分配,那大家都能愉快滴烧菜。

10 - 结尾

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

参考信息

The Big Data Landscape
hadoop生态圈介绍

Data - 大数据生态圈的更多相关文章

  1. 大数据基础知识问答----spark篇,大数据生态圈

    Spark相关知识点 1.Spark基础知识 1.Spark是什么? UCBerkeley AMPlab所开源的类HadoopMapReduce的通用的并行计算框架 dfsSpark基于mapredu ...

  2. 民生银行十五年的数据体系建设,深入解读阿拉丁大数据生态圈、人人BI 是如何养成的?【转】

    早在今年的上半年我应邀参加了由 Smartbi 主办的一个小型数据分析交流活动,在活动现场第一次了解到了民生银行的阿拉丁项目.由于时间关系,嘉宾现场分享的内容非常有限.凭着多年对行业研究和对解决方案的 ...

  3. Data - 大数据分析学习之路

    一.大数据分析的五个基本方面 可视化分析 大数据分析的使用者有大数据分析专家,同时还有普通用户,但是他们二者对于大数据分析最基本的要求就是可视化分析,因为可视化分析能够直观的呈现大数据特点,同时能够非 ...

  4. 一个 介绍 superset Kylin 以及大数据生态圈的 博文

    superSet http://superset.apache.org/installation.html https://segmentfault.com/a/1190000005083953 ht ...

  5. Hadoop生态圈-大数据生态体系快速入门篇

    Hadoop生态圈-大数据生态体系快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.大数据概念 1>.什么是大数据 大数据(big data):是指无法在一定时间 ...

  6. 大数据技术生态圈形象比喻(Hadoop、Hive、Spark 关系)

    [摘要] 知乎上一篇很不错的科普文章,介绍大数据技术生态圈(Hadoop.Hive.Spark )的关系. 链接地址:https://www.zhihu.com/question/27974418 [ ...

  7. 一文教你看懂大数据的技术生态圈:Hadoop,hive,spark

    转自:https://www.cnblogs.com/reed/p/7730360.html 大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞 ...

  8. 大数据hadoop生态圈

    大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的.你可以把它比作一个厨房所以需要的各种工具.锅碗瓢盆,各有各的用处,互相之间又有重合.你可 ...

  9. 一文看懂大数据的技术生态圈,Hadoop,hive,spark都有了

    一文看懂大数据的技术生态圈,Hadoop,hive,spark都有了 转载: 大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的.你可以把它 ...

随机推荐

  1. Python自动化测试PO模式

    页面元素定位信息 页面元素定位信息文件 [leadscloud_login] input_user_name = xpath>//*[@id='main']/div/div[2]/div[2]/ ...

  2. Hadoop添加LZO压缩支持

    启用lzo的压缩方式对于小规模集群是很有用处,压缩比率大概能降到原始日志大小的1/3.同时解压缩的速度也比较快. 安装 准备jar包 1)先下载lzo的jar项目https://github.com/ ...

  3. git rev-list 按照时间来列出两个 commit id 之间的相差数

    git rev-list 按照时间来列出两个 commit id 之间的相差数 git rev-list: Lists commit objects in reverse chronological ...

  4. 《流畅的Python》Object References, Mutability, and Recycling--第8章

    Object References, Mutability, and Recycling 本章章节: Variables Are Not Boxes identity , Equality ,  Al ...

  5. C# 任务、线程、同步(五)

    1.数据流使用  TPL Data Flow 类库 class Program { static void Main(string[] args) { // ActionBlock(); // Sou ...

  6. 3、获取Class对象的三种方式

    3.获取Class对象的三种方式 要想对字节码文件进行解刨,必须要有字节码文件对象 Object类中的getClass方法 通过对象静态属性 .class来获取对应的Class对象 只要通过给定类的字 ...

  7. for迭代多个对象

    1.传统方法 from random import randint chinese = [randint(60, 100) for _ in range(40)] math = [randint(60 ...

  8. [USACO19OPEN]Snakes

    题目链接 题目简介:有n组,每组有若干个蛇的蛇队伍.(也可以理解为n条长度若干的蛇.)我们要用网捕捉,中途可以改变网的大小.目标是浪费空间最小. 解法:首先明确方法:DP.设f[i][t]为捕捉了n条 ...

  9. pyecharts v1 版本 学习笔记 柱状图

    柱状图 bar 基本演示例子 from pyecharts import options as opts from pyecharts.charts import Bar c =( Bar().add ...

  10. 重新梳理一下adb操作app(golang版)

    主要参考我之前整理的内容https://www.cnblogs.com/pu369/p/10490668.html,梳理简化一下思路,以便于用最简单的代码来应对无聊人士的要求. 需求主要是:打开手机. ...