程序员必备的「大数据入门」知识

前言

只有光头才能变强。

文本已收录至个人GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3ygit

这篇文章主要是入门大数据,不涉及到高深的知识点和理论,我相信每一个人都看得懂。若是文章有错误的地方,不妨在评论区友善指出~github

1、什么是大数据?

1.1 前置知识

我有的时候给外行人讲解什么是数据库,就经常用Excel来举例子(由于大多数人认识什么是Excel)。在知乎有一个相似的题目《有excel了要数据库干啥?》,你们能够去看看:数据库

其实很大一部分缘由就是:Excel能处理的数据量远远没有数据库得多。因为咱们互联网产生的数据是很是很是多的,因此咱们通常选择数据库来存储数据。服务器

Excel只有104w行,多了加载不进去的 ---- @知乎 EamonLiao

众所周知,咱们能存多少数据,是取决于咱们硬盘的大小的。好比,个人磁盘的大小就256GB(实际能存储的大小是没有256GB的,但这里我就不展开了),这意味着我这电脑只能存储比256GB要小的数据。网络

硬盘的大小

为了可以更好地管理计算机的数据(访问和查找变得更加简单),咱们就有了文件系统框架

文件系统

有了文件系统,已经能够存储数据了(很方便咱们去获取),那为何还会有数据库呢?分布式

文件系统存在如下缺点: 数据共享性差,冗余度大; 数据独立性差工具

数据库系统实现总体结构化,这是数据库系统与文件系统的本质区别。 -----《数据库系统概论》oop


数据库其实就是为了针对特定类型数据处理而设计的系统,而文件系统则可看做通用型的数据存储系统 @知乎 吴穗荣性能

再回到大数据上,大数据就看名字咱们就知道:数据量很大。大到什么程度呢?一块普通的硬盘不能将一个文件存储下来。

那我还想将这个文件存下来,怎么办呢?方案其实很简单(说白了一个是垂直伸缩,一个是水平伸缩):

  • 多买几块硬盘,组成一个更大的“硬盘”,但愿能容纳更多的数据。

    • RAID(独立磁盘冗余阵列)技术是将多块普通磁盘组成一个阵列,共同对外提供服务
    • 好比,我如今以为个人电脑16GB不够用了,而个人主板有两个内存槽,我多买一条16GB的内存条插入。那我就能够说,个人电脑是32GB内存的。
  • 把这个文件切开几份,存到不一样的硬盘中

    • 好比我有1个TB的文件,我把它切分红5份,每份200G,存到不一样的服务器中。

若是是普通的用户,确定选择的是多买一块硬盘,升级硬件啊。可是互联网公司就不这样干,他们就选择将一个文件切分红几份,放到不一样的服务器中。为何?

  1. 顶级的电脑硬件成本很大。(单台计算机性能到必定的量上,再升级的成本就很是高)
  2. 单单一台顶级的电脑可能也没法处理掉这么大量的数据

垂直伸缩和水平伸缩

综上所述,目前互联网企业中都是选择水平伸缩在一个系统中添加计算机来知足不断增加的用户量和支撑数据的平稳运行。

1.2 解决存储问题

随着数据量愈来愈大,在一台机器上已经没法存储全部的数据了,那咱们会将这些数据分配到不一样的机器来进行存储,可是这就带来一个问题:不方便管理和维护

因此,咱们就但愿有一个系统能够将这些分布在不一样操做服务器上的数据进行统一管理,这就有了分布式文件系统

  • HDFS是分布式文件系统的其中一种(目前用得最普遍的一种)

在使用HDFS的时候是很是简单的:虽然HDFS是将文件存储到不一样的机器上,可是我去使用的时候是把这些文件当作是存储在一台机器的方式去使用(背后倒是多台机器在执行):

  • 比如:我调用了一个RPC接口,我给他参数,他返回一个response给我。RPC接口作了什么事其实我都不知道的(可能这个RPC接口又调了其余的RPC接口)-----屏蔽掉实现细节,对用户友好

HDFS使用

1.3 解决计算问题

上面咱们使用HDFS做为分布式文件系统,已经能够把数据存到不一样的机器上(或者在不一样的机器上读取到数据)。能够经过简单命令行的方式对文件的简单的存取

如今呢,因为数据量是很是大的,分散到不一样的机器上。咱们想要对数据进行处理,咱们确定会有一段写好的程序。处理的方式有两种:

  • 将数据传递给程序(机器A/B/C的数据传给机器D程序来执行)
  • 程序到数据所在的地方执行(将程序分别机器A/B/C上执行)

选哪一个?咱们通常会采用”程序到数据所在的地方执行“,由于在大数据里边咱们的数据量很大,若是要把机器A/B/C的数据输入到机器D上,这样不划算。

  • 数据量很大,经过网络传输大数据到某一台机器上作操做,不合适。
  • 机器D只有一台机器,处理的效率低下。

因此咱们会将程序分别放到机器A/B/C上处理,原本程序就很是小,放到别的机器上是轻轻松松的。还可使用机器A/B/C的资源作运算,这就很合适了。

「将数据传递给程序」这种就是所谓的“移动存储到计算”,而「程序到数据所在的地方执行」这种就是所谓的“移动计算到存储的观念”。

在大数据的领域里, 移动计算比移动数据更划算MapReduce就是这样干的:

  • 每台机器执行任务的时候去检查本身有没有相应的程序,若是没有则经过网络下载程序包,而后经过反射来加载程序

2、大数据没有想象中神秘

在刚听到「大数据」这个词的时候,可能有的人会想问:所谓大数据,那数据是从哪里来的呢

简单来讲能够归类为三类:

  • 日志
  • 数据库
  • 爬虫

一、 爬虫应该很好理解,就是经过网络爬虫获取外部数据,将这些数据本身存储起来。不少的比价网站就是爬取各类电商网站的数据,而后比较各个网站的数据后获得结果。自己它们网站自己是没有这个数据的,这个数据是从别人那爬过来的。

二、数据库原本就已经存储了咱们的数据,而咱们要作的只是把数据库的数据导入咱们的大数据平台那儿,让数据可以获得更好的分析。

三、日志这块其实我更多想说的是打点(埋点)这块。有的人会把这埋点和日志的概念分开,只是我把它给合在一块儿叫「日志」。日志有用户行为日志(埋点),也有系统的运行产生的日志。用户行为日志这块说白了就是:从你进去某个APP的一刻开启。几乎你全部的操做都会被记录下来(点了某个tag、在某个tag停顿了多少秒)。猜你喜欢这类的系统就是根据你以往行为来对进行推荐。

好了,如今咱们有不一样的地方收集到数据,咱们要最终要作的就是把这个数据汇总到一块儿来进行存储和分析。

因而咱们就须要将日志、数据库、爬虫这些不一样数据源的数据导入到咱们的集群中(这个集群就是上面提到的,分布式文件系统(HDFS),分布式计算系统)。

因为数据源的不一样,因此会有多种的工具对数据进行导入。好比将日志的数据收集咱们会有Flume,从数据库同步咱们会有Sqoop。这也就是所谓的ETL(萃取「extract」、转置「transform」、加载「load」)

ETL是将 业务系统的数据通过抽取、清洗转换以后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一块儿,为企业的决策提供分析依据。

:不要被上面的Sqoop、Flume 这样的名词给吓着了,其实就是现有的成熟的框架技术

咱们把全部的数据收集起来,把这个存储数据的地方叫作数据仓库。基于数据仓库咱们统计能各类的指标,基于这些指标能够指导咱们是否要作一个需求或决策

好比说:如今咱们要对APP的首页改版了,但不知道用户是否能接受此次的改版。因而咱们就能够先对一少部分的用户作实验(这一部分的用户看到的是改版后的首页),咱们根据这一部分用户的行为来判断这一次的改版是否有比较好的效果

  • 用户的行为咱们都有收集起来。只要将实验用户关联到对应的指标,与现有的指标作一次对比,咱们大概就知道此次改版是否真的合理。
这种拿一部分流量作实验,咱们也称这种作法为「 ABTest」,若是对ABTest感兴趣的同窗能够在个人 GitHub下搜索关键字「ABTest」来阅读具体的文章哦~

最后

这篇文章简单的说了一下所谓的「大数据」中的数据是从哪里来的,因为数据量很大,因此咱们要解决数据的存储和计算的问题。

基于存储和计算问题咱们业内就提供了不少现成的技术实现了,下面图中的技术每一种类型我后续都会讲解到,能够关注我,不迷路哦

参考资料:《从0开始学大数据》--李智慧

若是你们想要实时关注我更新的文章以及分享的干货的话,能够关注个人公众号「Java3y」。

  • 🔥海量视频资源
  • 🔥Java精美脑图
  • 🔥Java学习路线
  • 🔥开发经常使用工具
  • 🔥精美整理好的PDF电子书

在公众号下回复「888」便可获取!!

本已收录至个人GitHub精选文章,欢迎Starhttps://github.com/ZhongFuCheng3y/3y

求点赞 求关注️ 求分享👥 求留言💬 对我来讲真的 很是有用!!!

相关文章
相关标签/搜索