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

大数据本身是一个很宽泛的概念,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

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

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

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

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

$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('

    ').addClass('pre-numbering').hide();
    $(this).addClass('has-numbering').parent().append($numbering);
    for (i = 1; i ').text(i));
    };
    $numbering.fadeIn(1700);
    });
    });

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

了解大数据的技术生态系统 Hadoop,hive,spark(转载)的更多相关文章

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

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

  2. 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机)

    引言 在大数据学习系列之一 ----- Hadoop环境搭建(单机) 成功的搭建了Hadoop的环境,在大数据学习系列之二 ----- HBase环境搭建(单机)成功搭建了HBase的环境以及相关使用 ...

  3. 一文看懂大数据的技术生态Hadoop, hive,spark都有了[转]

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

  4. 浅析大数据的技术生态圈(Hadoop,hive,spark)

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

  5. 大数据学习系列之八----- Hadoop、Spark、HBase、Hive搭建环境遇到的错误以及解决方法

    前言 在搭建大数据Hadoop相关的环境时候,遇到很多了很多错误.我是个喜欢做笔记的人,这些错误基本都记载,并且将解决办法也写上了.因此写成博客,希望能够帮助那些搭建大数据环境的人解决问题. 说明: ...

  6. 大数据的前世今生【Hadoop、Spark】

      一.大数据简介 大数据是一个很热门的话题,但它是什么时候开始兴起的呢? 大数据[big data]这个词最早在UNIX用户协会的会议上被使用,来自SGI公司的科学家在其文章“大数据与下一代基础架构 ...

  7. 大数据学习系列之Hadoop、Spark学习线路(想入门大数据的童鞋,强烈推荐!)

    申明:本文出自:http://www.cnblogs.com/zlslch/p/5448857.html(该博客干货较多) 1 Java基础: 视频方面:          推荐<毕向东JAVA ...

  8. 大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解

    引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单 ...

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

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

随机推荐

  1. phpcms v9框架的目录结构分析

    phpcms v9框架的目录结构分析:      了解v9框架的目录结构,有助于帮助我们快速建立起对v9框架的一个整体认识 打开"mycms"项目,有如下文件和目录      使用 ...

  2. Angularjs 基于karma和jasmine的单元测试

    目录: 1. 单元测试的配置 2. 实例文件目录解释 3. 测试controller     3.1 测试controller中变量值是否正确     3.2 模拟http请求返回值,测试$http服 ...

  3. MySQL Windows ZIP 免费安装和启动设置

    MySQL Windows ZIP免安装版,设置和启动的过程事实上挺麻烦的.以下一步一步介绍使用的过程: 1.下载Windows (x86, 64-bit), ZIP Archive: 2.解压zip ...

  4. 解决Ubuntu和Windows该文件乱码问题

    1.转换文件内容编码    Windows在自然纯文本文件.当中国作为编码GBK,在Ubuntu下乱码,可以使用iconv命令转换:    iconv -f gbk -t utf8 source_fi ...

  5. cocos2d-x3.0数据结构

    1.cocos2d::Vector 1.头报价"CCVector.h"头文件. 2.保存的数据类型必须是cocos2d::Ref的子类. 3.实现是动态加入数据集合即链表.主要的使 ...

  6. Java乔晓松-android中获取图片的缩略图(解决OutOfMemoryError)内存溢出的Bug

    由于android获取图片过大是会出现内存溢出的Bug 07-02 05:10:13.792: E/AndroidRuntime(6016): java.lang.OutOfMemoryError 解 ...

  7. Sliverlight实例之 使用 ControlTemplate 自定义按钮的外观

    按钮,最终效果,如下图: 见Project21_ButtonSkin 1, 创建Sliverlight项目 说明: generic.xaml:样式和模板就被定义在这个文件里 MyButton.cs:控 ...

  8. CKEditor上传插件

    CKEditor上传插件 前言 CKEditor上传插件是不是免费的,与您分享在此开发.这个插件是基于ASP.NET MVC下开发的,假设是webform的用户或者其他语言的用户.能够參考把serve ...

  9. 跟我extjs5(03--在项目过程中加载文件)

    跟我extjs5(03--在项目过程中加载文件) 上一节中用sencha工具自己主动创建了一个项目.而且能够在浏览器中查看. 如今我们来看看js类载入过程. 例如以下图所看到的: watermark/ ...

  10. 如何区分MNO和MVNO

    MVNO(Mobile Virtaul Network Operator)虚拟网络运营商,没有自己的物理网络,租用MNO(Mobile Network Operator)网络提供的网络服务. 我们知道 ...