一、大数据概述

大数据的特征(4V):

1、Volume,数据量大

2、Variety,数据类型多

大数据由结构化和非结构化数据组成:

10%的结构化数据,存储在数据库中;

90%的非结构化数据,与人类信息密切相关。

3、Velocity,处理速度快

4、Value,价值密度低

大数据的关键技术:

1、分布式存储

分布式数据库

分布式文件系统

2、分布式处理

分布式并行处理技术MapReduce

大数据的计算模式:不同的计算模式需要使用不同的产品

1、批处理模式:一堆数据一起做批量处理,不能满足实时性要求。

如MapReduce,Spark(实时性比MapReduce好,可以做迭代计算,MapReduce不能)

2、流计算:针对流数据(日志流、用户点击流)的实时计算,需要实时处理。只能用流计算框架做。

流计算代表产品:S4+Storm+Flume

3、图计算:如社交网络数据,地理信息数据等。MapReduce也能处理,但效率不高。

代表软件:Google Pregel

4、查询分析计算:交互式查询,要求实时性高

代表产品:Google Dremel、Hive、Cassandra、Impala

云计算,通过网络以服务的方式为用户提供非常廉价的IT资源。

两个特征:

1、解决了分布式存储和分布式处理问题

2、虚拟化和多租户

三种云服务:

IaaS:面向网络架构师

PaaS:面向应用开发者

SaaS:面向用户

二、大数据处理架构Hadoop

Hadoop两大核心:

1、分布式文件系统HDFS:解决分布式存储
2、分布式并行框架MapReduce:解决分布式处理

Hadoop 2.0中,

1、HDFS新技术(原来可扩展性不好):NN Federation,多个名称节点,分区管理(不能解决单点失效问题,彼此联盟关系,非备份关系,需要为每个名称节点部署备份节点);HA(高可用性),热备份的NameNode,防止单点失效。

2、MapReduce分出了YARN,负责资源调度管理(MapReduce1.0既是计算框架,也是资源调度管理框架,MapReduce2.0是纯粹的计算框架)。YARN框架可以支持MapReduce、Storm、Spark等。

Hadoop项目结构:

Linux基础知识:

1、Shell:命令解析器,接收用户命令,然后调用相应的应用程序。

2、sudo:Ubuntu中一种权限管理机制,可以授权给一些普通用户去执行需要root权限执行的操作。

3、输入密码:终端不会显示你当前输入的密码。

4、输入法中英文切换:“shift”键

5、复制粘贴快捷键:快捷键需要加上Shift,如Ctrl+Shift+V

三、分布式文件系统HDFS(Hadoop Distributed File System)

主节点(一个):承担数据目录(元数据)服务

从节点(多个):完成数据的存储任务

HDFS实现目标:

1、兼容廉价的硬件设备

2、实现流数据读写

3、支持大数据集

4、支持简单的文件模型

5、强大的跨平台兼容性

HDFS自身的局限性:

1、不适合低延迟数据访问,实时性不高

2、无法高效储存大量小文件

3、不支持多用户写入及任意修改文件

块(HDFS的核心概念):

为了分摊磁盘读写开销,也就是在大量数据间分摊磁盘寻址的开销;

HDFS的一个块要比普通文件系统的块大很多(普通文件系统的块一般几千个字节,而HDFS默认64MB,可设置为128MB)

好处:

1、支持大规模文件存储,将文件切割成块,块可以分布地存储在不同机器上,突破单机存储容量的上限

2、简化系统设计,块的大小是固定的

3、适合数据备份

HDFS两大组件:

1、名称节点(主节点,NameNode):整个HDFS集群的管家,负责元数据的存储,相当于数据目录

元数据包含:文件是什么;文件被分成多少块;每个块和文件是怎么映射的;每个块被存储在哪个服务器上面

包含两个核心数据结构:

(1)FsImage:保存系统文件树

文件的复制等级、修改和访问时间、访问权限、块大小以及组成文件的块

(2)EditLog:记录对数据进行的诸如创建、删除、重命名等操作

运作方式:

第二名称节点:

(1)解决EditLog不断增大的问题

(2)可以当做名称节点的冷备份

2、数据节点(DataNode):存、取实际数据

HDFS命名空间:目录-文件-块

访问HDFS文件系统:/+目录名称,如/usr/shares

HDFS体系结构的局限性:1.0版本

1、命名空间限制:名称节点是保存在内存中的,因此,名称节点能容纳的对象(文件、块)的个数会受到空间大小限制

2、性能的瓶颈:整个分布式文件的吞吐量,受限于单个名称节点的吞吐量

3、隔离问题:由于集群中只有一个名称节点,只有一个命名空间,因此无法对不同应用程序进行隔离

4、集群的可用性:单点故障,一旦这个唯一的名称节点发生故障,会导致整个集群变得不可用。第二名称节点是冷备的。2.0版本设置两个名称节点,并进行分区管理,设置热备(HDFS HA)。

HDFS中数据以块的方式冗余存储,一般冗余因子是3,好处:

1、加快数据传输速度

2、容易检查数据错误

3、保证数据可靠性

Shell命令:

启动hadoop

./bin/hadoop fs:查看fs总共支持哪些命令

./bin/hadoop fs -help put:查看put命令的帮助

./bin/hadoop fs -ls:显示指定文件的详细信息

./bin/hadoop fs -mkdir:创建相关文件夹

./bin/hadoop fs -cat:指定文件内容输出到标准输出

./bin/hadoop fs -cp 本地文件 HDFS:将本地文件上传到HDFS中

浏览器中查看HDFS信息:http://localhost:50070

利用Java API与HDFS进行交互(编程方式)

安装和配置Eclipse

四、分布式数据库HBase

HBase是BigTable(一个分布式存储系统,为了满足互联网搜索引擎的需求)的开源实现,主要存储非结构化和半结构化的松散数据。

Hadoop可以解决大规模数据的离线批量处理问题,但是Hadoop MapReduce框架无法满足实时处理,HBase可以高扩展,低写入/查询延迟。

HBase与关系数据库的对比:

1、数据类型。关系数据库具有丰富的数据类型,HBase采用了简单的数据模型,存储为未经解释的字符串;

2、数据操作。关系数据库包含丰富的操作,涉及复杂的多表连接。HBase只有简单的插入、查询、删除、清空等;

3、存储模式。关系数据库基于行模式存储,HBase基于列存储。

4、数据索引。关系数据库可对不同列构建多个索引,HBase只有一个索引——行键;

5、数据维护。关系数据库更新操作时会替换旧值,HBase更新操作时不会删除旧版本,而是生成一个新的版本(HBase借助底层HDFS文件系统进行存储数据。与HDFS只允许追加,不允许修改的特性相关);

6、可伸缩性。关系数据库很难实现横向扩展,HBase分布式数据库能轻易通过在集群中增加或减少硬件数量实现性能的伸缩。

HBase是一个稀疏、多维度、排序的映射表,这张表的索引是行键、列族、列限定符(列)和时间戳。

列族支持动态扩展,可以轻易添加一个列族或列,无需预先定义列的数量和类型,所有列均以字符串形式存储。

HBase中需要根据行键、列族、列限定符和时间戳来确定一个单元格,可以视为一个“四维坐标”,即[行键,列族,列限定符,时间戳]

HBase可以理解为键-值数据库,列族数据库。

HBase的实现包含三个主要的功能组件:

1、库函数:链接到每个客户端。客户端并不依赖于Master,而是通过Zookeeper获得Region位置信息(Master负载很小)。

2、一个Master主服务器,管家的角色,负责管理和维护HBase表的分区信息,维护Region服务器列表,分配Region,负载均衡

3、许多个Region服务器:一个大表会被分成很多个Region(分区),负责存储和维护分配给自己的Region,处理来自客户端的读写请求。

Region服务器中,许多个Region共用一个Hlog(日志,保证系统出错时进行恢复),每个Region中按照列族切分成一个个Store(列族),先写到MemStore(缓存),周期性写到StoreFile(会有多个)中。StoreFile借助HDFS存储(HDFS中的HFile)。

StoreFile的合并:StoreFile数量太多,影响查找速度,调用Store.compact()把多个合并成一个,只有数量达到一个阈值才启动合并。

当单个StoreFile过大时,又触发分裂操作,1个父Region被分裂成两个子Region。

三级寻址过程:

Zookeeper记录了-ROOT-表的位置信息;

-ROOT-表,又叫根数据表,记录.META.表的Region位置信息,-ROOT-表只能有一个Region;

.META.表,又叫元数据表,记录了用户数据表的Region位置信息,当HBase表很大时,.META.表分裂成多个Region。.META.表的全部Region都会被保存在内存中。

在HBase之上构建SQL引擎,两种方案:1、Hive整合HBase,2、Phoenix

启动关闭Hadoop和HBase的顺序一定是:

启动Hadoop——启动HBase——关闭HBase——关闭Hadoop

Shell命令:

create:创建表,如create 'tempTable','f1','f2','f3'

describe:查看表的基本信息,如describe 'student'

list:列出HBase中所有的表信息

put:向表、行、列指定的单元格添加数据,一次只能为一个表的一行数据的一个列添加一个数据。

如put 'tempTable','r1','f1:c1','hello,dblab',向r1行、列族f1、列c1的单元格添加数据hello,dblab(列c1不用事先定义),时 间戳自动添加,也可自己添加

delete:删除一个数据,是put的反向操作,如delete 'student','95001','Ssex'

deleteall:删除一行数据,如delete 'student','95001'

get:通过表名、行、列、时间戳、时间范围和版本号来获得相应单元格的值。

如get 'tempTable','r1',{COLUMN=>'f1:c1'}

scan:浏览表的相关信息,如scan 'tempTable'

enable/disable:使表有效或无效(删除表之前必须使表无效),如disable 'tempTable'

drop:删除表

查询表的历史数据:

(1)创建表时,指定保存的版本数:

 create 'teacher',{NAME=>'username',VERSIONS=>5}

(2)插入数据然后更新数据,使其产生历史版本数据

  1. put 'teacher','91001','username','Mary'
  2. put 'teacher','91001','username','Mary1'
  3. put 'teacher','91001','username','Mary2'
  4. put 'teacher','91001','username','Mary3'
  5. put 'teacher','91001','username','Mary4'
  6. put 'teacher','91001','username','Mary5'

(3)查询时,指定查询的历史版本数。默认会查询出最新的数据。(有效取值为1到5)

get 'teacher','91001',{COLUMN=>'username',VERSIONS=>5}

查询出Mary5、Mary4、Mary3、Mary2、Mary1

JAVA编程

五、NoSQL数据库

NoSQL兴起的原因:

1、关系数据库无法满足Web2.0的需求:

(1)无法满足海量数据的管理需求;

(2)无法满足数据高并发的需求;

(3)无法满足高可扩展性和高可用性的需求。

2、“One size fits all”模式很难适用于截然不同的业务场景

Hadoop针对数据分析(批处理)

MongoDB、Redis等针对在线业务

3、关系数据库的关键特性:事务机制和高效查询机制,在Web2.0时代不需要。

NoSQL数据库通常包括:

1、键值数据库:键/值对,键是一个字符串对象,值是任意类型的数据

应用:涉及频繁读写、拥有简单数据模型的应用。

键值数据库只能通过键,而不能通过值进行查询。

键值数据库成为理想的缓冲层解决方案(在底层数据库之上,存储经常访问的数据)。

2、列族数据库

应用:分布式数据存储与管理

3、文档数据库:本质是键值数据库,值是版本化的文档(XML文档、HTML文档和JSON文档)

应用:存储、索引并管理面向文档的数据或者类似的半结构化数据

缺点:缺乏统一的查询语法

MongoDB是一个基于分布式文件存储的开源数据库系统,文档类似于JSON对象。

可以设置任何属性的索引来实现更快的排序。

服务端:mongod,客户端:mongo

使用MongoDB shell访问MongoDB

创建数据库:use DATABASE_NAME

查看所有数据库:show dbs

创建集合:在插入数据的时候,MongoDB会自动创建对应的集合

插入文档:insert()或save(),语法如下:db.COLLECTION_NAME.insert(document),db是数据库名称

使用JAVA程序访问MongoDB

4、图形数据库:图结构的方式存储信息

应用:用于处理具有高度相互关联关系的数据,适合于社交网络、模式识别、依赖分析、推荐系统以及路径寻找等问题

NoSQL的三大基石:

1、CAP(Consistency,一致性,Availability,可用性,Tolerance of Network Partition,分区容忍性)

最多只能同时实现两个

2、最终一致性

3、BASE(Basically Available,Soft-state,Eventual consistency)

基本可用:一个分布式系统一部分发生问题不可用时,其他部分仍然可以正常使用,允许分区失败的情形出现;

软状态:状态可以有一段时间不同步,具有一定的滞后性

最终一致性:强一致性,当执行完一次更新操作后,后续的读操作可以保证读到更新后的最新数据;反之,如果不能保证后续读到的都是更新后的最新数据,就是弱一致性。最终一致性是弱一致性的一种特例,允许暂时读不到更新后的数据,但是经过一段时间之后,必须读到更新后的数据。

六、云数据库

云计算是云数据库兴起的基础,云数据库是部署和虚拟化在云计算环境中的数据库。

七、MapReduce分布式并行编程框架

MapReduce将复杂的、运行于大规模集群上的并行计算过程高度地抽象成两个函数:Map和Reduce

MapReduce的理念:

1、采用“分而治之”的策略,存储在分布式文件系统中的大规模数据集被切分成许多分片(split,逻辑上的切分,不是物理上的),分别生成Map任务进行并行处理。

理想的分片大小是一个HDFS块

2、计算向数据靠拢。因为移动数据需要大量的花销。

采用了Master/Slave架构,包括一个Master和若干个Slave。Master上运行JobTracker(作业跟踪器,负责资源监控和作业调度),Slave上运行TaskTracker(分布在不同的机器上,接收JobTracker发送的作业处理指令,完成具体的任务处理)。

MapReduce体系结构主要由四个部分组成:

1、Client(客户端)

2、JobTracker(作业跟踪器)

3、TaskTracker

4、Task

Task分为Map Task和Reduce Task两种,均由TaskTracker启动。一台机器上可以同时执行两种任务。

数据的来源是分布式文件系统HDFS,经过中间的Map、Reduce处理后,最终写入分布式文件系统HDFS中。

HDFS为MapReduce提供底层存储。

1、不同的Map任务、Reduce任务之间不会进行通信

2、用户不能显式从一台机器向另一台机器发送消息,所有的数据交换都是通过MapReduce框架自身去实现的,不需要用户参与

Map任务的数量:每个split创建一个Map任务

Reduce任务的数量:取决于集群中可用Reduce任务槽(slot)的数目,通常设置比reduce任务槽数目稍微小一些的reduce任务个数(预留一些系统资源)。

MapReduce应用:

1、关系代数运算(选择、投影、并、交、差、连接)

2、分组与聚合运算

3、矩阵-向量乘法

4、矩阵乘法

Hadoop中执行MapReduce任务的几种方式:

1、Hadoop jar

2、Pig

3、Hive

4、Python

5、Shell脚本

八、基于Hadoop的数据仓库Hive

数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策。

数据仓库相对于数据库,数据不会频繁发生变化,比较稳定;存取大量历史数据。

Hive是一个构建于Hadoop顶层的数据仓库工具,支持大规模数据存储、分析,具有良好的可扩展性。

Hive可以看作是用户编程接口,本身不存储和处理数据,依赖分布式文件系统HDFS存储数据,依赖分布式并行计算模型MapReduce处理数据。Hive不支持事务。

定义了类似SQL的查询语言——HiveQL,用户编写HiveQL语句运行MapReduce任务。查询存储在Hadoop集群中的数据。

Hive特点:

1、采用批处理方式处理海量数据(MapReduce)

2、提供适合数据仓库操作的工具

在某些场景下Pig可以作为Hive的替代工具,Pig适用于实时交互性的分析,用于ETL过程,Hive适用于大规模海量数据的批处理分析。

HBase提供数据的实时访问(Hive时延较高)。

Hive系统架构:

1、用户接口模块

2、驱动模块(Driver),负责把HiveQL语句转换成一系列MapReduce作业

3、元数据存储模块,是一个独立的关系型数据库

Hive HA(High Availability),解决Hive不稳定的问题。

由多个Hive实例进行管理,这些Hive实例被纳入到一个资源池中,并由HAProxy提供一个统一的对外接口。

Impala,实时交互式查询

提供SQL语句,查询存储在Hadoop的HDFS和HBase上的PB级大数据,在性能上比Hive高3~30倍(Hvie时延高)。

Impala的运行依赖于Hive的元数据。不用转换成MapReduce任务,直接与HDFS和HBase进行交互查询,查询实时性高。

Impala和Hive一样,构建在HDFS和HBase之上,采用相同的SQL语法、ODBC驱动程序和用户接口。

一个Hadoop平台上,可以统一部署Hive和Impala等分析工具,同时支持批处理和实时查询。

不同点:

1、Hive适合于长时间的批处理查询分析,Impala适合于实时交互式SQL查询;

2、Hive依赖于MapReduce计算框架,Impala直接分发执行计划到各个Impalad执行查询;

3、Hive在执行过程中,如果内存放不下所有数据,会使用外存,保证查询能顺利执行,Impala不会利用外存,所以处理查询时会受到一定的限制。

相同点:

1、使用相同的存储数据池,都支持把数据存储于HDFS和HBase中;

2、使用相同的元数据;

3、对SQL的解释处理比较相似,都是通过词法分析生成执行计划。

Hive和Impala配合使用效果最佳,先使用Hive进行数据转换处理,之后使用Impala在处理后的数据集上进行快速的数据分析。

1、创建数据库:create database hive;

如果已经存在,会抛出异常,下面的语句不抛出异常:create database if not exists hive;

2、创建表

use hive;

create table if not exists usr(id bigint,name string,age int) --没有分号

location '/usr/local/hive/warehouse/hive/usr';指定存储路径

3、创建视图

create view little_usr as select id,age from usr;

4、查看所有数据库:show databases;

查看以h开头的所有数据库:show databases like 'h.*';

查看所有表和视图:use hive;   show tables;

查看数据库hive中以u开头的所有表和视图:show tables in hive like ‘u.*’;

5、load:向表中装载数据

把目录‘/usr/local/data’下的数据文件中的数据装载进usr表,并覆盖原有数据

load data local inpath ‘/usr/local/data’ overwrite into table usr;

把目录‘/usr/local/data’下的数据文件中的数据装载进usr表, 不覆盖原有数据

load data local inpath ‘/usr/local/data’  into table usr;

把分布式文件系统目录'hdfs://master_server/usr/local/data’下的数据文件数据装载进usr表,并覆盖原有数据

load data inpath ‘hdfs://master_server/usr/local/data’ overwrite into table usr;

6、insert:向表中插入数据或从表中导出数据

向表usr1中插入来自usr表的数据并覆盖原有数据

insert overwrite table usr1 select * from usr where age=10;

向表usr1中插入来自usr表的数据并追加在原有数据后

insert into table usr1 select * from usr where age=10;

九、Spark

Spark是基于内存的大数据并行计算框架(Hadoop是基于磁盘的),可用于构建大型的、低延迟的数据分析应用程序。

主要特点:

1、运行速度快。使用DAG(有向无环图)执行引擎,以支持循环数据流与内存计算;

2、容易使用。支持使用Scala、Java、Python和R语言进行编程,可以通过Spark Shell(支持Scala和Python)进行交互式编程;

3、通用性。提供了完整而强大的技术栈,包括SQL查询、流式计算、机器学习和图算法组件;

4、运行模式多源。可运行于独立的集群模式中,可运行于Hadoop中,可运行于Amazon EC2等云环境中,并且可以访问HDFS、HBase、Hive等多种数据源。

Scala是一门多范式编程语言(集成了面向对象和函数式编程),运行于JAVA平台(JVM,Java虚拟机),并兼容现有的JAVA程序。Scala是Spark的主要编程语言。提供了REPL(交互式解释器),提高程序开发效率。

特性:

1、具备强大的并发性,支持函数式编程,可以更好地支持分布式系统;

2、语法简洁,能提供优雅的API;

3、兼容JAVA,运行速度快,且能融合到Hadoop生态圈中。

Hadoop存在的一些问题:1、表达能力有限;2、磁盘IO开销大;3、延迟高

相对于Hadoop,Spark主要优点:

1、Spark的计算模式也属于MapReduce,但不局限于Map和Reduce操作,还提供了多种数据集操作类型,编程模型比Hadoop MapReduce更灵活;

2、Spark提供了内存计算,可将中间结果放到内存中,对于迭代计算效率更高;

3、Spark基于DAG的任务调度执行机制,要由于Hadoop MapReduce的迭代执行机制。

实际应用中,大数据处理主要包括三个类型:

1、复杂的批量数据处理:时间跨度在数十分钟到数小时之间,可用MapReduce

2、基于历史数据的交互式查询:时间跨度在数十秒到数分钟之间,可用Impala

3、基于实时数据流的数据处理:时间跨度在数百毫秒到数秒之间,可用Storm

Spark生态系统:Spark的设计遵循“一个软件栈满足不同应用场景”的理念,能同时支持批处理、交互式查询和流数据处理。

既能够提供内存计算框架,也可以支持SQL即时查询、实时流式计算、机器学习和图计算等

可以部署在资源管理器YARN之上,提供一站式的大数据解决方案。

Spark的生态系统主要包含Spark Core(基于内存的计算)、Spark SQL(交互式SQL查询)、Spark Streaming(流计算)、MLLib(机器学习、数据挖掘)和GraphX(图计算)等组件。

Spark采用RDD(弹性分布式数据集)实现高效计算的原因:

1、高效的容错性

RDD:血缘关系、重新计算丢失分区、无需回滚系统、重算过程在不同节点之间并行、只记录粗粒度的操作

2、中间结果持久化到内存,数据在内存中的多个RDD操作之间进行传递,避免了不必要的读写磁盘开销

3、存放的数据可以是JAVA对象,避免了不必要的对象序列化和反序列化。

Shark,即Hive on Spark,通过Hive的HiveQL解析,把HiveQL翻译成Spark上的RDD操作。

与Hive的区别是:Hive是转化成MapReduce程序,Shark是转化成Spark程序。

Shark的设计有两个问题:

1、执行计划优化完全依赖于Hive,不方便添加新的优化策略;

2、因为Spark是线程级并行,而MapReduce是进程级并行,因此,Spark在兼容Hive的实现上存在线程安全问题,导致Shark不得不使用另外一套独立维护的打了补丁的Hive源码分支。

因此,Shark的基础上开发了Spark SQL。

Spark SQL在Hive兼容层面仅依赖HiveQL解析和Hive元数据,剩下的工作由Spark SQL自己完成。

Spark SQL目前支持Scala、Java、Python三种语言,支持SQL-92规范。

用Spark架构具有以下优点:

1、实现一键式安装和配置、线程级别的任务监控和告警

2、降低硬件集群、软件维护、任务监控和应用开发难度

3、便于做成统一的硬件、计算平台资源池

Spark Streaming无法实现毫秒级的流计算,仍然需要采用流计算框架,如Storm。

若需要使用HDFS中的文件,则在使用Spark前需要启动Hadoop。

Spark RDD支持两种类型的操作:

1、动作(action):在数据集上进行运算,返回计算值

2、转换(transformation):基于现有的数据集创建一个新的数据集,返回RDD

也可以在同一条代码中同时使用多个API,连续进行运算,称为链式操作。不仅使Spark代码更加简洁,也优化了计算过程。

Spark基于整个操作链,仅存储、计算所需的数据,提升了运行效率。

十、流计算

静态数据:如存放在数据仓库中的大量历史数据。计算模式:批处理

流数据:数据以大量、快递、时变的流形式持续到达,如PM2.5检测、电子商务网站用户点击流。计算模式:实时计算

大数据分布式系统下典型的计算框架:

1、Hadoop,批处理

2、Spark,实时批处理

3、Storm,流计算

流计算:实时获取来自不同数据源的海量数据,经过实时分析处理,获得有价值的信息。

基本理念:数据的价值随着时间的流逝而降低,如用户点击流,当事件出现时就应该立即进行处理,而不是缓存起来进行批量处理。

流计算系统的需求:高性能、海量式、实时性、分布式、易用性、可靠性。

流计算的处理流程的三个阶段:

1、数据实时采集

采集多个数据源的海量数据,需要保证实时性、低延迟与稳定可靠

2、数据实时计算

3、实时查询服务

不断更新结果,并将用户所需的结果实时推送给用户。

流计算适合于需要处理持续到达的流数据、对数据处理有较高实时性要求的场景。

开源 流计算框架Storm

Storm框架可以方便地与数据库系统进行整合,开发出强大的实时计算系统。

Storm运行任务的方式与Hadoop类似,Hadoop运行的是MapReduce作业,Storm运行的是“Topology”。不同点:MapReduce作业最终会完成计算并结束运行,而Topology将持续处理消息,直到人为终止。

Spark Streaming的基本原理是将实时输入数据流以时间片(秒级)为单位进行拆分,然后经Spark引擎以类似批处理的方式处理每个时间片数据。

Spark Streaming最主要的抽象是DStream(Discretized Stream,离散化数据流),表示连续不断的数据流。

在内部实现上,Spark Streaming的输入数据按照时间片分成一段一段的DStream,每一段数据转换为Spark中的RDD,并且对DStream的操作都最终转变为相应的RDD操作。

Spark Streaming与Storm的对比:

1、Spark Streaming无法实现毫秒级的流计算,Storm可以;

2、Spark Streaming构建在Spark上,RDD数据集更容易做高效的容错处理;

3、Spark Streaming采用的小批量处理的方式,使得它可以同时兼容批量和实时数据处理的逻辑和算法,因此,方便了一些需要历史数据和实时数据联合分析的特定应用场合。

十一、图计算

许多大数据都是以大规模图或网络的形式呈现,非图结构的大数据也会转换为图模型后进行分析。

图数据结构很好地表达了数据之间的关联性。

针对大型图的计算,软件主要包括两种:

1、基于遍历算法的、实时的图数据库,如Neo4j、OrientDB、DEX和Infinite Graph

2、以图顶点为中心的、基于消息传递批处理的并行引擎,如GoldenOrb、Giraph、Pregel和Hama。主要是基于BSP模型(Bulk Synchronous Parallel Computing Model,又称“大同步”模型,计算过程是一系列迭代计算)实现的并行图处理系统。

Prege是一种基于BSP模型实现的并行图处理系统。

Prege作为分布式图计算的计算框架,主要用于图遍历、最短路径、PageRank计算等。

《大数据技术原理与应用》笔记相关推荐

  1. 《信贷的逻辑与常识》笔记

    序 银行信贷风险管理的反思 现状与趋势 银行贷款的质量变化与经济周期.宏观调控政策等存在很高的相关性 现在银行不良贷款的增加主要是前几年经济快速增长时企业过度投资.银行过度放贷所带来的结果. 从历史情 ...

  2. AI公开课:19.02.27周逵(投资人)《AI时代的投资逻辑》课堂笔记以及个人感悟

    AI公开课:19.02.27周逵(投资人)<AI时代的投资逻辑>课堂笔记以及个人感悟 目录 课堂PPT图片 精彩语录 个人感悟 课堂PPT图片 精彩语录 更新中-- 文件图片已经丢失-- ...

  3. 人工智能入门算法逻辑回归学习笔记

    逻辑回归是一个非常经典的算法,其中也包含了非常多的细节,曾看到一句话:如果面试官问你熟悉哪个机器学习模型,可以说 SVM,但千万别说 LR,因为细节真的太多了. 秉持着精益求精的工匠精神不断对笔记进行 ...

  4. 【逻辑回归学习笔记】

    算法描述 1.逻辑回归要做的事就是寻找分界面实现二分类. 2.问题假设:对一堆三角形和正方形分类. 3.数据输入:已知正方形和三角形的坐标和标签. 4.算法过程: 知识储备 1.分类和回归 ①分类的目 ...

  5. 逻辑回归函数学习笔记

    继续逻辑回归学习,今日笔记记录. 1.逻辑回归和线性回归的关系:对逻辑回归的概率比取自然对数,则得到的是一个线性函数,推导过程如下. 首先,看逻辑回归的定义 其次,计算两个极端y/(1-y),其值为( ...

  6. 2.2 逻辑回归-机器学习笔记-斯坦福吴恩达教授

    逻辑回归 上一节我们知道,使用线性回归来处理 0/1 分类问题总是困难重重的,因此,人们定义了逻辑回归来完成 0/1 分类问题,逻辑一词也代表了是(1) 和 非(0). Sigmoid预测函数 在逻辑 ...

  7. LVM逻辑卷分区笔记

    磁盘的静态分区有其缺点:分区大小难评估,估计不准确,当分区空间不够用的时候,系统管理员可能需要先备份整个系统,清除磁盘空间,然后重新对磁盘进行分区,然后恢复磁盘数据到新分区,且需要停机一段时间进行恢复 ...

  8. 适合理工直男的钟平老师逻辑英语学习笔记

    一切的一切都只是套路!             --鲁迅 核心公式: En: (状语1) 主(定语1) 谓(状语2) (宾)(定语2) (状语1) Ch: (状语1) (定语1)主 (状语2)谓 (定 ...

  9. 【数字逻辑】学习笔记 第四章 Part2 常用组合逻辑电路与竞争、险象

    文章目录 一.常用组合逻辑电路 1. 译码器 (1) 二进制译码器 74LS138(3/8译码器) a. 一般符号和图形符号 b. 74LS138功能表 c. 两片 `74LS138` 构成 `4-1 ...

  10. 线性回归、逻辑回归学习笔记

    学习源代码 import numpy as np import matplotlib.pyplot as plt def true_fun(X): # 这是我们设定的真实函数,即ground trut ...

最新文章

  1. 谈Linux的安全设置
  2. Unity的对象复用
  3. 《30天自制操作系统》笔记(01)——hello bitzhuwei’s OS!
  4. Python将DataFrame的某一列作为index
  5. numpy.tile 阵列
  6. I/O流的概念和流类库的结构
  7. 主成分分析以及应用:企业综合实力排序
  8. keeplive linux平台下,Linux下搭建keepalive+nginx
  9. 安卓案例:利用定时器实现逐帧动画
  10. .NetCore中EFCore的使用整理
  11. 这个假期,百度差一点点点重回巅峰
  12. 你为什么当不了高管?几张图看懂高级经理人与普通管理者的区别
  13. android 印章,android 印章 控件
  14. postgreSQL 中raise notice用法
  15. 有了这份IT职业发展路线图,大学生就业从此不迷茫
  16. 如何更换我的密钥对?
  17. python画混淆矩阵 confusion matrix
  18. 开源之夏 2022 重磅来袭,欢迎报名 Casbin社区项目
  19. 计算机毕业设计JSPMjava平台购物系统
  20. 51单片机:HCSR04超声波测距模块及1602显示—C51程序(超详细)

热门文章

  1. [附源码]Python计算机毕业设计SSM家教中心管理系统(程序+LW)
  2. 基于Unity3D的相机功能的实现(二)——AR相机
  3. 解决:element切换tab时table的抖动问题
  4. 15.笔记go语言——Web编程概念
  5. JAVA学习(1天) #来源:异步图书
  6. DBCP数据源连接池实现原理分析
  7. 中学生成绩查询c语言编程,c语言学生成绩管理系统
  8. 电脑专业录音录音有什么,怎么录系统声音
  9. 我的2018 Unreal Open Day参会总结
  10. Java实现支付宝APP支付实现记录