了解大数据的技术生态系统 Hadoop,hive,spark(转载)

了解大数据的技术生态系统 Hadoop,hive,spark(转载)

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

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

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

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

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117329.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【全套完结】数字信号处理—-全套Matlab实验报告【建议保存】「建议收藏」

    目录实验一、熟悉MATLAB环境和基本信号的产生与运算实验一、熟悉MATLAB环境和基本信号的产生与运算实验一、熟悉MATLAB环境和基本信号的产生与运算

    2022年4月8日
    39
  • Ubuntu 更换国内源[通俗易懂]

    Ubuntu 更换国内源[通俗易懂]Ubuntu系统自带的源都是国外的网址,国内用户在使用的时候网速比较慢。一个软件的下载是十分痛苦的,这里讲解一下如何将国外源更换为国内源,让你的网速Biu.Biu.Biu1.备份原来的源sudocp/etc/apt/sources.list/etc/apt/sources_init.list将以前的源备份一下,以防以后可以用的。2.更换源sudogedi…

    2022年5月4日
    41
  • CentOS 7 安装 MySQL「建议收藏」

    CentOS 7 安装 MySQL「建议收藏」官方推荐使用yum源来安装MySQL,本文讲述如何使用yum源来安装MySQL。一、添加MySQLyum源可以采用yumlocalinstall命令来添加MySQL源。在https://dev.mysql.com/downloads/repo/yum/页面选择合适rpm包,这些rpm包的作用就是添加MySQLyum源的。笔者下载的是mysql80…

    2022年5月22日
    41
  • pycharm 激活码2022【最新永久激活】

    (pycharm 激活码2022)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月29日
    3.3K
  • python sendfile_sendfile详解(转)[通俗易懂]

    python sendfile_sendfile详解(转)[通俗易懂]在apache,nginx,lighttpd等web服务器当中,都有一项sendfile相关的配置,在一些网上的资料都有谈到sendfile会提升文件传输性能,那sendfile到底是什么呢?它的原理又是如何呢?在传统的文件传输里面(read/write方式),在实现上其实是比较复杂的,需要经过多次上下文的切换,我们看一下如下两行代码:read(file,tmp_buf,len);write(…

    2022年6月6日
    91
  • java学生宿舍管理系统,来了就点个赞再走呗,即将毕业的兄弟有福了

    java学生宿舍管理系统,来了就点个赞再走呗,即将毕业的兄弟有福了引言:上次写了一个学生成功管理系统,有个老铁说不会运行,我答应给他写一个项目,并且附上运行的文档,于是这几天就利用摸鱼时间、晚上休息时间、中午午休时间写了这个宿舍管理系统,从表的设计和代码的编写都是自己弄的,数据库用mysql,web容器用tomcat,开发工具用eclipse\myeclipse,java方面入口都是用servlet,数据库连接用c3p0,总之都是用到比较基础的东西来写的,简单易懂,对于正在做毕业设计和刚入门时间不长的兄弟们来说,应该是比较好的学习代码了,希望对大家有所帮助。一张

    2022年7月16日
    19

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号