91e8badcf455a6c66acb3b59a845625b
神奇的大数据

本文是我准备分享的大数据系列的第一篇文章,为什么以这篇开头,又为什么用一个这样的名字?

那可就说来话长了,其实, 主要是因为我当时就是这么过来的。

在一个夜黑风高的晚上,一个被生活所迫的苦逼码农,正在公司加班写着bug,没错,这个人就是我。
突然老大走过来对我说:由于公司需要,准备把你调到大数据组去,稍微准备一下。

当时我就一脸蒙蔽,因为那时我对所谓的大数据完全没有认知,第二天大数据负责人(也就是我后面的上级)给我发了一篇文章,让我好好看看:并且理解一下大数据是什么?大数据有什么特点?为什么会有大数据?大数据主流技术和组件有哪些?以及大数据经历了一个怎么样的过程?大数据未来的发展怎么样?

而当时的那篇文章,我经过个人理解和包装优化之后,就有了接下来的内容。

那么接下来,我们就从上面几个问题出发,站在一个外行来认知一下神奇的大数据

一. 大数据是什么?

大数据(big data),是IT行业术语,主要指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

其实就是一句话:海量或者巨量数据的集合

二. 大数据有什么特点?

4V Or 5V?
  • 1.Volume:巨量的数据量,包括采集,存储和计算的量.大数据的起始计量单位至少是P(1000个T)级的,或者更高的E(100万个T)级或Z(10亿个T)级.

  • 2.Variety:非结构化数据,很大的多样性,比如:文本/图片/视频/文档等.

  • 3.Value:数据的价值性,在实际操作过程中,可以使用的数据量是海量的,但是并不是所有的数据都是有价值的,很多的价值比例在10%以下,这是我们最需要解决的问题.

  • 4.Velocity:数据增长速度,处理速度很快,时效性的要求也很高,比如交通监控要求对一段时间的数据进行采集,处理,并快速计算出结果,这样才能有效的缓解交通的拥堵等,这跟传统数据挖掘有显著的区别.

如果硬是要说5V,那么会再加上一个
  • 5.Veracity:数据的真实性,准确性和可信赖度,提升数据的质量,质量提高了,会间接的提高其他的4V水平.

三. 为什么会有大数据?

大数据之所以能够受到大量的关注,主要基于三方面原因

  1. 大数据开辟了新的价值空间,这个价值空间就是数据价值,数据价值从某种程度上来看,也是对于互联网价值的一种体现。
  2. 大数据能够促进社会资源的数据化,从而提升社会资源的利用率,大数据未来的发展潜力还是非常巨大的。
  3. 大数据是人工智能和未来各种高科技产物的重要基础,一切的价值都离不开的数据。

但是迄今为止,归根结底都是因为随着移动互联网的兴起,尤其这两年随着5G时代的开启,云计算、人工智能、物联网等应用快速落地,促使网络上的数据流量更加与日俱增。

四. 大数据主流技术和组件有哪些?

作为一个大数据的技术人员,一定需要知道的一个常识就是,大数据的所有相关技术都是从Google的三驾马车开始的

  • 《Google file system》:论述了怎样借助普通机器有效的存储海量的大数据;
  • 《Google MapReduce》:论述了怎样快速计算海量的数据;
  • 《Google BigTable》:论述了怎样实现海量数据的快速查询;

apache根据这三本秘籍研究出对应的武学巨著《hadoop》,Hadoop包括三大部分,分别是hdfs、MapReduce和hbase:

  • hdfs解决大数据的存储问题
  • mapreduce解决大数据的计算问题
  • hbase解决大数据量的查询问题

然后来看一张图,具体组件细节,原理,使用,后面会有专门的文章一一介绍

五. 大数据经历了一个怎么样的过程?

一开始,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的,随着数据量的增加和用户需求日益更新,大数据经历了一个翻天腹地的变化。

1. 分布式文件系统

大数据,首先你要能存的下大数据。传统的文件系统是单机的,不能横跨不同的机器。

HDFS(Hadoop Distributed FileSystem)的设计本质上是为了大量的数据能横跨成百上千台机器,但是你看到的是一个文件系统而不是很多文件系统。

比如你说我要获取/hdfs/tmp/file1的数据,你引用的是一个文件路径,但是实际的数据存放在很多不同的机器上。你作为用户,不需要知道这些,就好比在单机上你不关心文件分散在什么磁道什么扇区一样。

2. 分布式计算系统

HDFS为你管理这些数据。存的下数据之后,你就开始考虑怎么处理数据。虽然HDFS可以为你整体管理不同机器上的数据,但是这些数据太大了。一台机器读取成T上P的数据(很大的数据哦,比如整个东京热有史以来所有高清电影的大小甚至更大),一台机器慢慢跑也许需要好几天甚至好几周。

对于很多公司来说,单机处理是不可忍受的,比如微博要更新24小时热博,它必须在24小时之内跑完这些处理。那么我如果要用很多台机器处理,我就面临了如何分配工作,如果一台机器挂了如何重新启动相应的任务,机器之间如何互相通信交换数据以完成复杂的计算等等。

这就是MapReduce / Tez / Spark的功能。MapReduce是第一代计算引擎,Tez和Spark是第二代。MapReduce的设计,采用了很简化的计算模型,只有Map和Reduce两个计算过程(中间用Shuffle串联),用这个模型,已经可以处理大数据领域很大一部分问题了。

那什么是Map什么是Reduce?考虑如果你要统计一个巨大的文本文件存储在类似HDFS上,你想要知道这个文本里各个词的出现频率。

你启动了一个MapReduce程序。

  1. Map阶段,几百台机器同时读取这个文件的各个部分,分别把各自读到的部分分别统计出词频,产生类似(hello, 12100次),(world,15214次)等等这样的Pair(我这里把Map和Combine放在一起说以便简化);
  2. Reduce阶段, 这几百台机器各自都产生了如上的集合,然后又有几百台机器启动Reduce处理。Reducer机器A将从Mapper机器收到所有以A开头的统计结果,机器B将收到B开头的词汇统计结果(当然实际上不会真的以字母开头做依据,而是用函数产生Hash值以避免数据串化。因为类似X开头的词肯定比其他要少得多,而你不希望数据处理各个机器的工作量相差悬殊)。然后这些Reducer将再次汇总,(hello,12100)+(hello,12311)+(hello,345881)= (hello,370292)。每个Reducer都如上处理,你就得到了整个文件的词频结果。
3. 分布式内存计算

这看似是个很简单的模型,但很多算法都可以用这个模型描述了。Map+Reduce的简单模型很黄很暴力,虽然好用,但是很笨重。

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

4. 万物皆SQL

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

于是就有了Pig和Hive。

  • Pig是接近脚本方式去描述MapReduce,
  • Hive则用的是SQL。

它们把脚本和SQL语言翻译成MapReduce程序,丢给计算引擎去计算,而你就从繁琐的MapReduce程序中解脱出来,用更简单更直观的语言去写程序了。

有了Hive之后,人们发现SQL对比Java有巨大的优势。一个是它太容易写了。刚才词频的东西,用SQL描述就只有一两行,MapReduce写起来大约要几十上百行。而更重要的是,非计算机背景的用户终于感受到了爱:我也会写SQL!

于是数据分析人员终于从乞求工程师帮忙的窘境解脱出来,工程师也从写奇怪的一次性的处理程序中解脱出来。大家都开心了。Hive逐渐成长成了大数据仓库的核心组件。甚至很多公司的流水线作业集完全是用SQL描述,因为易写易改,一看就懂,容易维护。

5. 即席查询

自从数据分析人员开始用Hive分析数据之后,它们发现,Hive在MapReduce上跑,真TM慢!流水线作业集也许没啥关系,比如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。你可以把他看作中央管理,好比你妈在厨房监工,哎,你妹妹切菜切完了,你可以把刀拿去杀鸡了。只要大家都服从你妈分配,那大家都能愉快滴烧菜。

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

微批一体化

Spark在SQL上的优化,尤其是DataFrame到DataSet其实是借鉴的Flink的。Flink最初一开始对SQL支持得就更好。

Spark的cache in memory在Flink中是由框架自己判断的,而不是用户来指定的,因为Flink对数据的处理不像Spark以RDD为单位,就是一种细粒度的处理,对内存的规划更好。3、Flink原来用Java写确实很难看,现在也在向Spark靠拢,Scala的支持也越来越好。

不管怎么说,二者目前都是在相互吸收。

尤其在去年阿里收购了Data Artisans之后,出了一个Blink,对过去的Flink进行的全面的优化,改进和功能拓展,据说在批处理完全上升一个层级,感觉很值得去一试。

数据中台

阿里提出了“大中台,小前台”,其中台事业部包括搜索事业部、共享业务平台、数据技术及产品部,数据技术及产品部应是数据中台建设的核心部门。

所谓数据中台,即实现数据的分层与水平解耦,沉淀公共的数据能力,笔者认为可分为三层,数据模型、数据服务与数据开发,通过数据建模实现跨域数据整合和知识沉淀,通过数据服务实现对于数据的封装和开放,快速、灵活满足上层应用的要求,通过数据开发工具满足个性化数据和应用的需要

后来就有了阿里的 全栈式数据开发平台DataWorks 以及 数据中台(数据仓库)建设方法论构建体系 DataWorks,包括阿里最近在推广的基于PG实现的一款交互式分析产品Hologres,据说是可以解决现在市面上大部分公司所遇到的实时数仓的问题,我们公司前段时间也在做Holo的技术调研

这里总结一下演讲过程与细节
  • mapreduce-> hive,pig、impla等SQL ON Hadoop的简易修炼秘籍
  • MapReduce-> 推出基于内力(内存)的《Spark》,意图解决所有大数据计算问题
  • Hadoop(只能批量计算)-> SparkStreaming、Storm,S4等流式计算技术,能够实现数据一来就即时计算
  • flink--流计算和批量计算的统一体
  • 数据中台与一站式解决方案

六. 大数据未来的发展怎么样?

其实如果你有一定的认知和思考能力,从近几年移动互联网带来的海量数据,带动大数据的发展,为各大企业带来可见价值,以及市面上岗位的稀缺,薪资的定位。

再回到这两年5G的面世,不难想象未来大数据行业的发展绝对是没有任何一个行业可以媲美(希望没有人喷),不管是想从事大数据相关岗位的工作,还是想通过大数据或大数据技术赚点外快,异或是想直接通过大数据创业的,赶紧行动起来,跟着我一步一步学习,我一直坚信,努力的人终究会有回报。

七. 补充

最后宣传一下后面将会推出的一系列大数据相关文章,并归类与对应专栏,想了解,学习,深入大数据开发朋友,可以关注或订阅相关专栏,也可以单篇购买,如有任何疑问都可以通过评论提出,我一定会第一时间回复,同时个人的一些理解,如有不当之处,还望多多指教。

《大数据面试指南》 https://xiaozhuanlan.com/bigdata_interview?rel=vivian
《离线与实时数仓》 https://xiaozhuanlan.com/datawarehouse?rel=vivian
© 著作权归作者所有
这个作品真棒,我要支持一下!
专注大数据开发,数仓开发,BI数据开发, 1. SQL、Python、Java 2. Hadoop、Spark、F...
0条评论
top Created with Sketch.