大数据学习笔记
学习书籍为林子雨主编的《大数据技术原理与应用》
配套的 MOOC 视频为:大数据技术原理与应用
一、大数据基础
大数据的基础知识.
大数据的概念
4V
说法:
- 数据量大(数据大爆炸)
- 数据类型繁多(种类多)
- 处理速度快(大量的数据需要在秒级得到响应)
- 价值密度低
大数据计算模式
大数据计算模式 | 解决问题 | 代表产品 |
---|---|---|
批处理计算 | 针对大规模数据的批量处理 | MapReduce、Spark等 |
流计算 | 针对流数据的实时计算 | Storm、S4等 |
图计算 | 针对大规模图结构数据的处理 | Pregel、GraphX、Giraph等 |
查询分析计算 | 大规模数据的存储管理与查询分析 | Hive、Dremel等 |
不同的模式解决不同的问题
云计算
三大名词:
- SaaS : 面向用户,基础设施服务,应用层(软件即服务)
- PaaS : 面向应用开发者,平台层(平台即服务)
- IaaS : 面向网络架构师,基础设施层(基础设施即服务)
大数据与云计算、物联网的关系
- 云计算为大数据提供了技术基础,大数据为云计算机提供用武之地
- 物联网是大数据的重要来源,大数据为物联网数据分析提供支持
- 云计算为物联网提供海量数据存储能力,物联网为云计算技术提供了广阔的应用空间.
二、大数据处理架构 Hadoop
Hadoop是一个开源的,可运行于大规模集群的一个分布式计算平台。
概述
Hadoop生态系统:
HDFS:
Hadoop分布式文件系统(Hadoop Distributed File System),是Hadoop项目的两大核心之一,是针对于谷歌文件系统的开源实现,HDFS可以运行在廉价的大型服务器集群上
HBase:
HBase 是一个提高可靠性、高性能、可伸缩、实时读写、分布式的列式数据库,一般采用 HDFS 作为其底层数据存储。HBase 是针对谷歌 BigTable 的开源实现。
MapReduce:
Hadoop MapReduce 是针对谷歌 MapReduce 的开源实现。MapReduce 是一种编程模型,用于大规模数据集(大于 1 TB)的并行计算,他江复杂的并行计算过程高度抽象到了两个函数 Map 和 Reduce 上。它的核心思想是分而治之,把输入的数据切割分别计算,最后通过整合节点的计算来得到结果。
Hive:
Hive 是一个基于 Hadoop 的数据仓库工具,可以对 Hadoop 文件中的数据集进行数据整理、特殊查询和分析存储。
Pig:
Pig 是一种数据流语言和运行环境,适合用于 Hadoop 和 MapReduce 平台来查询大型半结构化数据集。
Zookeeper:
Zookeeper 是一个针对谷歌 Chubby 的一个开源实现,是高效和可靠地协同工作系统,提供分布式锁之类的基本服务.
Sqoop:
Sqoop 是 SQL-to-Hadoop 的缩写,主要用于 Hadoop 和关系数据库之间交换数据,可以改进数据的互操作性。
单机式安装和伪分布式安装
Hadoop 有伪分布式和完全分布式两种安装方法。Hadoop 有几个重要的配置文件:
文件名称 | 格式 | 描述 |
---|---|---|
hadoop-env.sh | Bash 脚本 | 记录配置 Hadoop 运行所需的环境变量 |
core-site.xml | Hadoop 配置 XML | Hadoop core 的配置项,如 HDFS 和 MapReduce 常用点的 I/O |
hdfs-site.xml | Hadoop 配置 XML | Hadoop 守护进程的配置项 |
mapred-site.xml | Hadoop 配置 XML | MapReduce 守护进程的配置项 |
Hadoop 的默认端口有 : 50070 和 8088.
三、分布式文件系统 HDFS
目前,已得到广泛应用的分布式文件系统主要包括 GFS 和 HDFS 等,后者是针对前者的开源实现。
HDFS 简介
- 简单的文件模型。 HDFS 采用了「一次写入,多次读取」的简单文件模型,文件一旦完成细写入,关闭后就无法再次写入,只能被读取。
- HDFS 同样采用了「块」的概念,默认的一个块的大小是 64MB
- 名称节点和数据节点
- 名称节点(NameNode)负责管理分布式文件系统的命名空间
- 数据节点(DataNode)是分布式文件系统 HDFS 的工作节点,负责数据的存储和读取。
- **第二名称节点:**为了有效解决 EditLog 逐渐变大带来的问题,HDFS 在设计中采用了第二名称节点(SecondaryNameNode)。第二名称节点是 HDFS 架构的一个重要的组成部分。
HDFS 的数据读写过程
FileSystem 是一个通用文件系统的抽象基类,可以被分布式文件系统继承,所有的 Hadoop 文件的代码都要使用到这个类。Hadoop 为 FileSystem 这个抽象类提供了多种可能的实现,DistributedFileSystem 就是 FileSystem 在 HDFS 文件系统中的具体实现。FileSystem 的 open() 方法返回的是一个输入流 FSDataInputStream 对象,在 HDFS 文件系统中具体的输入流就是 DFSInputStream;FileSystem 中的 create() 方法返回的是一个输出流 FSDataOutputStream 对象,在 HDFS 中的具体输出流就是 DFSOutputStream。
读数据的过程:
- 客户端通过 FileStream.open() 打开文件,具体输入流是 DFSInputStream。
- 在 DFSInputStream 的构造函数中,输入流远程调用名称节点,获得文件开始部分数据块的保存位置。对于该数据块,名称节点返回保存该数据块的所有数据节点的位置。
- 客户端开始调用 read() 函数读取数据,输入流根据排序结果,选择距离客户端最近的数据节点建立连接并读取数据。
- 数据从数据节点读到客户端。
- 输入流查找下一个客户端的位置
- 找到该数据块的最佳数据节点,读取数据
- 客户端的数据读取完毕,要关闭输入流
写数据的过程
- 客户端通过 FileStream.create() 创建文件,具体输出流是 DFSOutputStream。
- 通过远程 RPC 调用名称节点,在文件系统的命名空间中建立一个新的文件
- 获得输入流后,客户端调用后输出流的 write() 方法向 HDFS 中对应的文件写入数据
- 分包,形成数据流管道。
- 各个数据节点处于不同的机器,数据要通过网络发送。数据节点要向发送者发确认包
- 客户端调用 close() 方法关闭输出流
四、分布式数据库 HBase
HBase是针对于谷歌BigTable的开源实现,是一个高可靠,高性能,面向列、可伸缩的分布式数据库。
概述
BigTable是一个分布式存储系统,利用谷歌提出来的 MapReduce 分布式并行计算模型来处理海量数据。BigTable具有以下特性:
- 支持大规模海量数据
- 分布式并发数据处理效率极高
- 易于拓展且支持动态伸缩
- 适用于廉价设备
- 适合于读操作而不适合写操作
HBase通过行键访问,按照列来存储。
行式数据库和列式数据库的区别
行式数据库,写数据是一行一行写入,数据是一行一行存储的。从磁盘中读数据时,需要从磁盘中顺序扫描每个元组的完整内容,然后从每个元组中筛选出查询所需要的属性。如果元组只有少量的属性的值对于查询是有用的,那么 NSM 就会浪费许多磁盘空间和带宽。
列式数据库的优点是,他是按列保存的,对于一些数据数据分析,我们只需要提取出某一列来进行分析,不用知道他是第几行的,所以采取列式存储比较方便,它的优点是:可以降低 I/O 开销,支持大量并发用户查询。
HBase的三层结构中各层次的名称和作用
层次 | 名称 | 作用 |
---|---|---|
第一层 | Zookeeper文件 | 记录了-ROOT-的信息 |
第二层 | -ROOT-表 | 记录了.META.表的 Region 的位置信息,-ROOT-表只能有一个 Region。通过-ROOT-就可以访问.META.表中的数据 |
第三层 | .META.表 | 记录了用户 Region 的位置信息,.META. 表中可以有多个 Region 。保存了 HBase 中所有用户的 Region 位置信息。 |
五、NoSQL数据库
NoSQL是一种不同于关系数据库的数据库管理系统设计方式,是对非关系型数据库的统称。他采取的数据模型不是传统的数据库的关系模型,而是类似于键值等非关系模型。
NoSQL的四大类型
键值数据库
- 比如:Redis、Riak、SimpleDB
- 用一个哈希表,有一个key和指针指向特定的Value,不能进行索引和查询只能用key来查询
- 条件查询是键值数据库的弱项,应该尽量避免多表关联查询。
列族数据库
比如:BigTable、HBase、Cassandra
有多个行构成,每行数据包含多个列族,不同的行可以有不同数量的列族
文档数据库
- 比如:MongoDB
- 在文档数据库中,文档是数据库的最小单位,虽然每一种文档的格式各有不同,但是大都假定文档以某种标准化的格式封装并对数据进行加密,同时用多种格式进行解码。
- 与键值数据库不同的地方是,这个值是对数据库透明不可见的,不能根据值来构建索引
图数据库
- 图数据库以图论为基础,一个图是一个数学概念,用来表示一个对象集合,包括顶点以及连接顶点的边
- 可以高效的存储不同顶点之间的关系
- 专门用来处理高度相互关联关系的数据,可以高效的处理实体之间的关系。
最后修改于 2018-12-29
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。