通俗易懂的大数据讲义(一)

导读 : 每当和别人聊到大数据或者大数据技术的时候,就会遇到特别大的gap,因为这个名词本身就是一个非常宽泛的内容,会把各种老概念和新概念混淆在一起,因此我公开一些自己的讲义,肯定有很多问题,但是可能会起到一个入门和抛砖引玉的作用。第一篇内容是到Hadoop生态圈为止了,别的东东下次有时间再说吧。

第一章 大数据的定义

一些定义

Gartner

大数据”是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力来适应海量、高增长率和多样化的信息资产。

麦肯锡

一种规模大到在获取、存储、管理、分析方面大大超出了传统数据库软件工具能力范围的数据集合,具有海量的数据规模、快速的数据流转、多样的数据类型和价值密度低四大特征。

比较认同的定义

It's not a technology or platform, a project and an objective with a single completion point.
It is a journey, a process, and a strategic effort across the organization.
其实大数据像一个思潮,或者文艺复兴的状态,并没有一个十分准确的定义,每个人都在这个环境中,影响着这个环境,与此同时也它被影响着。

个人的看法

产生原因

Big Data 像文艺复兴的思潮一样地发展,产生的原因是

  • 互联网的发展,产生了海量可获得的非结构化数据 (TB级别,PB级别)
  • 传统数据库在处理海量非结构化数据产生的瓶颈 (Schema的限制,事务性的限制)
  • 分布式技术和搜索技术的适时发展 (云计算,搜索,爬虫等等)

生态圈

大数据生态圈就是一个厨房工具生态圈。为了做不同的菜,中国菜,日本菜,法国菜,你需要各种不同的工具。而且客人的需求正在复杂化,厨具不断被发明,也没有一个万用的厨具可以处理所有情况,因此它会变的越来越复杂。你可以把它比作一个厨房所以需要的各种工具。锅碗瓢盆,各有各的用处,互相之间又有重合。你可以用汤锅直接当碗吃饭喝汤,你可以用小刀或者刨子去皮。但是每个工具有自己的特性,虽然奇怪的组合也能工作,但是未必是最佳选择。

比如说可以吃饭的组合

  • 筷子 + 勺子
  • 筷子 + 吸管
  • 刀 + 叉
  • 刀 + 筷子
  • 筷子也可做成中空的当吸管用

其实大数的状态和以上的吃饭的餐具类似,完成一件事情的时候也有着不同的组合,完全看个人习惯和业务需求。

应用场景

  • 精准营销和推介 : 淘宝,京东的网页广告投放
  • 预测 : 股票涨跌 行业风口 天气预报
  • 人工智能 : AlphaGo
  • 数据挖掘 发现规律 作决策 :啤酒尿布,粉色儿童用品和安全套的例子

其中一个例子

图1 日本地区罩杯分布
图2 罩杯大小与网购购买力的关系

上述例子表明,罩杯大的女性网购偏多,也就是大胸妹子花钱多,而B杯或以下的,网购的比例明显变少,虽然这个例子充满满满的恶意,但是这个例子也反映出大数据的应用普遍性,在各行各业都有用。

本章要点

  • 什么是大数据? 请不要纠结具体概念,只要描述即可
  • 一般情况下多大的数据量级? 一般是TB级别,有时会上PB,但也没有严格的定义
  • 大数据更像个生态圈,更像一个工具集合

第二章 传统关系型数据库的限制

结构化数据的限制

一些技术名词

  • SQL - Structure Query Language (结构化查询语言)
  • RDBMS - Retional Database Management System (关系型数据库管理系统)
  • No-SQL - Not only Query Language (非结构化查询语言)

传统数据库一般都具有表结构的,例如下表:

表People

Name ID Telephone
张三 1 13811111111
李四 2 15911111111
王五 3 18811111111

而互联网的发展造成了过多的非结构化数据:

{
  "姓名" : “张三”,
  "身份证号" : “110111131313131313”,
  "电话" : {
    "手机" : “13811111111”,
    "单位" : “010-32323232”,
    "座机" : “010-323232323”
  }
}
{
  "姓名" : “李四”,
  "身份证号" : “110111131313132323”,
  "电话" : {
  "手机" : “15911111111”,
  }
  “性别”: "男"
}

或者是任何格式都没有的状态 :
张三 : 我叫张三,男,未婚,爱吃面
李四 : 我叫李四,电话1591111111,疏通下水道请找我

对于海量的大数据,传统数据库存在以下劣势

  • 非结构化数据太多,没有时间和精力去设计表结构
  • 即使设计了表结构,数据非结构化,造成解析处理过多,更偏向于无脑存入
  • 并非原生地支持扩展,海量数据难以存入传统数据库当中 (需要分库分表),即使存入了,读取速度也较慢。(TB)级别

事务性的限制

ACID,是指在关系型数据库管理系统(RDBMS)中事务所具有的四个特性:

  • 原子性(Atomicity)
  • 一致性(Consistency)
  • 隔离性(Isolation,又称独立性)
  • 持久性(Durability)。

原子性

整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

A向B转账10000元,不论是停电,通讯断了,任何自然灾害,都不可能出现A的钱扣掉了,B的钱没有加的想象。只会出现

  1. 转账不成功,A未扣钱,B未加钱
  2. 转账成功,A扣钱了,B加了钱

一致性

在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
A向B转账10000元,不可能出现任何中间状态或某一过程,A的钱扣掉了,B的钱没有加的现象。永远A+B的钱的总额是一致的。

隔离性

两个事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据。

A向B转账10000元,手续费扣掉10元

  1. A 20000
  2. A 20000 - 10000 = 10000 转账
  3. A 10000 - 10 = 9990 扣除手续费

太巧了,与此同时,A的妈妈在查A的账户,A的妈妈要不在前,读到A有20000元,要不在后,读到A有9990元,不可能读到A有10000元的状态

持久性

在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
A转完钱后,已经查到少了10000元,后来发现B是骗子,愤愤把银行的服务器电闸掐了,银行工作人员修复服务器,重启数据库后,A的账户还是少了10000元,不可能回来

在大数据概念中,一般的数据库都是No-SQL, 而且不能完全满足或不强求满足事务性,就是(ACID)的性质,即使有些声称满足的数据库产品,也是部分满足或是很脆地满足。

传统关系型数据库

传统关系型数据库的软件

  • 商用的 Oracle,DB2, SQL-Server
    软件收费且价格较高,好用,安全性高,稳定性好,维护支持服务好,大企业用
  • 开源可用的: MySQL,- GPL
    群众基础好,社区活跃,好用轻巧,不用钱,Oracle接手后做了一些恶心的事情,因此出了一个MariaDB的分支
  • 更加开放的数据库 :PostgreSQL - BSD
    BSD协议是可以修改代码,并且作为二次开发使用的,很多公司都在它上面修改,试图完成更好用的“关系型的分布式”,比如类似Pivotal等公司在上面下功夫。PostgreSQL的代码质量也要强于MySQL

传统数据库的入库和读取

  • 入库: Raw Data -> ETL -> RDBMS
  • 读取: RDBMS -> SQL Client

数据仓库和BI

在这里稍微提一下商业智能BI(Business Intelligence)和数据仓库(Data Warehouse).我们所说的数据挖掘(Data Mining),ETL,数据仓库,BI,实际上不是因为大数据的流行而产生的概念,而在以前传统数据库的时期就是有的。

  • 数据仓库属于BI的一部分,做好数据仓库才好进而分析利用,让数据产生价值.
  • BI包括ETL, 数据仓库和相应的Reporting System. 因为现在一般的公司动不动说上个BI系统,都是要从DW建模开始做,然后做ETL,最后做对应的Reporting System.虽然最终老板们只看到了他们想要的报表,但是这一套系统是需要DW和ETL的支持的。
  • 数据挖掘(DM)较数据仓库要新一点,在BI 中会常用到数据挖掘的技术。数据挖掘涉及到的是数据库、统计学、机器学习、数据分析、可视化等等。
  • 联机事务处理OLTP(on-line transaction processing) OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易
  • 联机分析处理OLAP(On-Line Analytical Processing) OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果.

开源协议简介

以下仅仅是方便理解的解释,并非严格定义

  • GPL - 会传染,用了就要开源自己的代码
  • LGPL - 修改了人家的代码才会被传染
  • Apache - 除署名,著作外,随便用吧
  • BSD - 除署名,著作外,随便用吧
  • MIT - 除署名,著作外,随便用吧

传统数据库已经有20多年的历史了,是一个成功的技术,在一致性,协同控制,集成机制等方面都做得非常好,它基本都满足事务性,广泛地应用于各大网站,ERP系统,银行业,保险业等业务模型相对比较复杂,需要复杂查询,安全性要求又高的行业中,单机数据库也大体能够Handle的情况,但它并不是为高效地在集群上运行而设计的。

本章要点

  • 传统数据库的事务性以及其特点
  • 传统数据库的商业和开源的软件
  • 关于数据仓库和BI的一些概念

第三章 No-SQL的思潮

个人认为No-SQL的兴起主要由于两大原因,第一是大型的Web应用需要更大量的数据,第二是由于集群的兴起,这些大量的数据存储在集群上。No-SQL基本都抛弃了关系模型,选择更简单的键值或者文档类型进行存储。数据结构和查询接口都相对简单,没有了SQL的包袱,实现的难度会降低很多。另外 NoSQL 的设计几乎都选择牺牲掉复杂 SQL 的支持及 ACID 事务换取弹性扩展能力,也是从当时互联网的实际情况出发:业务模型简单、爆发性增长带来的海量并发及数据总量爆炸、历史包袱小、工程师强悍等等。其中最重要的还是业务模型相对简单。

CAP 特性

  • C(一致性):所有的节点上的数据时刻保持同步
  • A(可用性):每个请求都能接受到一个响应,无论响应成功或失败
  • P(分区容错):系统应该能持续提供服务,即使系统内部有消息丢失(分区)

定理:任何分布式系统只可同时满足二点,没法三者兼顾。
忠告:架构师不要将精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍。

BASE 思想

ACID-酸,BASE-碱 水火不相融,BASE模型又叫反ACID模型,完全不同于ACID模型,牺牲高一致性,获得可用性或可靠性:

  • Basically Available基本可用。支持分区失败(例如sharding碎片划分数据库)
  • Soft state软状态 状态可以有一段时间不同步,异步。
  • Eventually consistent最终一致,最终数据是一致的就可以了,而不是时时高一致。

似乎这些No-SQL的特性,并非如此严格,很像做中国菜谱做饭时候的“少许”的概念,不像外国人一样定量的材料,烘焙几分钟等等,所以有时候会存在着争议。

No-SQL 分类和产品

一、 键值(Key-Value)数据库
例如Redis,Memcached,Dynamo
二、 面向文档(Document-Oriented)数据库
例如MongoDB,CouchDB,Elastic Search
三、 列存储(Wide Column Store/Column-Family)数据库
例如HBase,Cassendra
四、 图(Graph-Oriented)数据库
国内用的较多的也就是Neo4j了

自一向四,更接近传统数据库

No-SQL数据库的普遍特点

和大数据一样,No-SQL同样也没有一个准确的定义,我们可以通过观察它的数据的普遍特点来了解它

  • 不使用关系模型
  • 可以支持在集群上高效地运行
  • 很多都是开源产品
  • 无模式 Schemaless

适用场景

NoSQL数据库在以下的这几种情况下比较适用:
1、数据模型比较简单;
2、需要灵活性更强的IT系统;
3、对数据库性能要求较高;
4、不需要高度的数据一致性;
5、对于给定key,比较容易映射复杂值的环境。

本章要点

  • CAP 特性
  • No-SQL分类和铲平
  • No-SQL数据库的特点

第四章 Hadoop生态圈

Google的三篇论文与开源实现Hadoop

2003年到2004年间,Google发表了MapReduce、GFS(Google File System)和BigTable三篇技术论文,提出了一套全新的分布式计算理论。
MapReduce是分布式计算框架,GFS(Google File System)是分布式文件系统,BigTable是基于Google File System的数据存储系统,这三大组件组成了Google的分布式计算模型。

MapReduce -> 就是后来广泛应用的的 Map Reduce, 有时侯会写成 M/R
GFS -> 根据这篇论文,开源社区实现了 HDFS
BigTable -> 根据这篇论文,开源社区实现了 HBase

Hadoop是个分布式计算系统,有时也泛指Hadoop生态圈中的很多工具,简单地来说,开源实现M/R和HDFS,两个加起来统称为Hadoop。Yahoo的工程师Doug Cutting和Mike Cafarella在2005年合作开发了分布式计算系统Hadoop。后来,Hadoop被贡献给了Apache基金会,成为了Apache基金会的开源项目。Doug Cutting也成为Apache基金会的主席,主持Hadoop的开发工作。

Hadoop采用MapReduce分布式计算框架,并根据GFS开发了HDFS分布式文件系统,根据BigTable开发了HBase数据存储系统。尽管和Google内部使用的分布式计算系统原理相同,但是Hadoop在运算速度上依然达不到Google论文中的标准。不过,Hadoop的开源特性使其成为分布式计算系统的事实上的国际标准。Yahoo,Facebook,以及国内的百度,阿里巴巴等众多互联网公司都以Hadoop为基础搭建自己的分布式计算系统。

Hadoop的核心

1 HDFS

Hadoop Distributed File System (Hadoop 分布式文件系统),能把数据存在多台不同的实体机器或者虚拟机器上,或者分布式系统上,能够进行读写操作

HDFS有很多特点:

  • 保存多个副本,且提供容错机制,副本丢失或宕机自动恢复。默认存3份。
  • 运行在廉价的机器上。
  • 适合大数据的处理。HDFS默认会将文件分割成block,64M为1个block。然后将block按键值对存储在HDFS上,并将键值对的映射存到内存中。如果小文件太多,那内存的负担会很重。
图3 HDFS架构图
  • NameNode:是Master节点,是大领导。管理数据块映射;处理客户端的读写请求;配置副本策略;管理HDFS的名称空间;
  • SecondaryNameNode:是一个小弟,分担大哥namenode的工作量;是NameNode的冷备份;合并fsimage和fsedits然后再发给namenode。
  • DataNode:Slave节点,奴隶,干活的。负责存储client发来的数据块block;执行数据块的读写操作。
  • 这些节点都是通过一个叫ZooKeeper的东西来协调的,比如说谁挂了,谁当Master了等等

所有东西都是原生的Java编码完成的,基本的存储介质是硬盘

2 Map Reduce

Map Reduce 是一切计算框架的基础,基本上所有的计算框架都有M/R操作,或者比M/R更细致的算子。
网上有个给妻子解释什么是Map Reduce的例子,这边拿来用了

做辣椒酱(单一)

作一瓶辣椒酱需要
洋葱
番茄
辣椒
大蒜

Map(切碎)
洋葱 -> 洋葱丁
番茄 -> 番茄丁
辣椒 -> 辣椒丁
大蒜 -> 大蒜丁

Reduce (研磨)
洋葱丁 番茄丁 辣椒丁 大蒜丁 -> 研磨机 -> 辣椒酱

做辣椒酱(分布式)

Map Reduce 精髓在于分布式 (做10000 瓶辣椒酱)

Map:
工人1: 大量洋葱 -> 洋葱丁
工人2: 大量番茄 -> 番茄丁
工人3: 大量辣椒 -> 辣椒丁
工人4: 大量大蒜 -> 大蒜丁

Reduce
100 个研磨机器
100瓶 洋葱丁 番茄丁 辣椒丁 大蒜丁 -> 100台研磨机 -> 辣椒酱

做辣椒酱(分布式非单一结果,Reduce可以变成多个结果)

Reduce
100 个研磨机器
5000瓶 洋葱丁 辣椒丁 大蒜丁 -> 洋葱辣椒酱
5000瓶 番茄丁 辣椒丁 大蒜丁 -> 番茄辣椒酱

经典案例 Word count

MapReduce处理方式

设有4组原始文本数据:(4页书)

Text 1: the weather is good
Text 2: today is good
Text 3: good weather is good
Text 4: today has good weather

使用4个map节点:

map节点1:

输入:(text1, “the weather is good”)

输出:(the, 1), (weather, 1), (is, 1), (good, 1)

map节点2:

输入:(text2, “today is good”)

输出:(today, 1), (is, 1), (good, 1)

map节点3:

输入:(text3, “good weather is good”)

输出:(good, 1), (weather, 1), (is, 1), (good, 1)

map节点4:

输入:(text3, “today has good weather”)

输出:(today, 1), (has, 1), (good, 1), (weather, 1)

使用3个reduce节点:

图4.单词计数map reduce

生态圈

Hbase 架构

图5 HBase架构图

Hbase和Cassendra

  • 两者都是列式数据库
  • Hbase 被认为是 Google Big Table的开源实现
  • Cassandra 被认为是 Amazon Dynamo的开源实现

Hadoop 和 Hbase 比较早期的生态

图6 Hadoop的生态
  • HDFS : 分布式文件存储
  • Map/Reduce : 映射,规约,简称M/R,大体来说,M/R 和 HDFS两个组件合起来,叫Hadoop
  • Hbase : 列式可扩展数据库,具体讲可以讲一本书
  • Java Native Client / JVM : 原生语言是Java和JVM,所以这东西不能少,在这一层面可以写程序
  • Zookeeper : 协同组件,Master和Slave节点的健康状况,状态等等
  • Thrift : RPC 工具,原来是Facebook的,后来也加入了Apache,支持多种语言 C++,Java,Python,R
  • Restful : 实际上Hbase是提供Restful 接口的,但似乎用的人不多
  • JRuby Shell: 真正维护过Hbase的人基本都用都用JRuby Shell管理运维Hbase
  • Hive : Hbase上的类SQL语言的实现,底层调用M/R
  • Pig : 和Hive类似,但是主要不是以类SQL形式,而是以脚本的形式
  • Mahout : 基于Hadoop的机器学习框架,国内很少人使用,单词很有趣,翻译作训象人
  • YARN : Yet Another Resource Negotiator 从Job入手管理Hadoop资源的资源管理器

以上这些组件,基本上都是基于Java或JVM开发的,大多数组件都是Apache的

第五章 未完待续......

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容