了解大数据的技术生态系统 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

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

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

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

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

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • python爬虫全解

    python爬虫全解一、爬虫基础简介什么是爬虫:-通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程。爬虫的价值:-实际应用-就业爬虫究竟是合法还是违法的?-在法律中是不被禁止-具有违法风险-

  • Javascript之其实我觉得原型链没有难的那么夸张!

    原型链、闭包、事件循环等,可以说是js中比较复杂的知识了,复杂的不是因为它的概念,而是因为它们本身都涉及到很多的知识体系。所以很难串联起来,有一个完整的思路、脉络。我最近想把js中有意思的知识点都总结

  • python线程间通信的方式_android 线程间通信

    python线程间通信的方式_android 线程间通信1、python多线程#!/usr/bin/evnpython3#–*–coding:utf-8–*–#该实例反编译来说明函数执行流程importdisdefadd(a):a=a+1returnaprint(dis.dis(add))#Python中一个线程对应于C语言中的一个线程(CPython而言)(Python并不一定…

  • CSS 鼠标样式 cursor属性[通俗易懂]

    CSS 鼠标样式 cursor属性[通俗易懂]鼠标样式在浏览网页时,通常看到的鼠标光标形状有箭头、手形、沙漏等,而在windows中实际看到的鼠标指针种类比这个还要多。一般情况下,鼠标光标的形状由浏览器负责控制,大多数情况的光标形状为箭头形状,当指向链接时,光标形状会变成手指形状。为了创建丰富的Web应用,CSS中提供了cursor属性,允许设计师为页面上的任何元素自定义鼠标光标的形状。如,把鼠标光标样式设置为row-resize,表…

  • 无锁环形缓冲区的详细解释

    无锁环形缓冲区的详细解释由以下博客的分析可以知道,内核的kfifo使用了很多技巧以实现其高效性。比如,通过限定写入的数据不能溢出和内存屏障实现在单进程写单进程读的情况下不使用锁。因为锁是使用在共享资源可能存在冲突的情况下。还用设置buffer缓冲区的大小为2的幂次方,以简化求模运算。通过使用unsignedint为kfifo的下标,可以不用考虑每次下标超过size时对下表进行取模运算赋值,这里使用到了无符号整数的溢出回

  • printf的题目

    以前学习于渊老师的《自己动手写操作系统》一书的时候,也自己实现过printf,不过那是比较简单的版本。最近看《程序员面试宝典》,做到这么一道题目:#include<stdio.h>int

    2021年12月25日

发表回复

您的电子邮箱地址不会被公开。

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