大数据学习笔记

大数据学习笔记

学习书籍为林子雨主编的《大数据技术原理与应用》

配套的 MOOC 视频为:大数据技术原理与应用

一、大数据基础

大数据的基础知识.

大数据的概念

4V说法:

  • 数据量大(数据大爆炸)
  • 数据类型繁多(种类多)
  • 处理速度快(大量的数据需要在秒级得到响应)
  • 价值密度低

大数据计算模式

大数据计算模式解决问题代表产品
批处理计算针对大规模数据的批量处理MapReduce、Spark等
流计算针对流数据的实时计算Storm、S4等
图计算针对大规模图结构数据的处理Pregel、GraphX、Giraph等
查询分析计算大规模数据的存储管理与查询分析Hive、Dremel等

不同的模式解决不同的问题

云计算

三大名词:

  • SaaS : 面向用户,基础设施服务,应用层(软件即服务)
  • PaaS : 面向应用开发者,平台层(平台即服务)
  • IaaS : 面向网络架构师,基础设施层(基础设施即服务)

大数据与云计算、物联网的关系

  1. 云计算为大数据提供了技术基础,大数据为云计算机提供用武之地
  2. 物联网是大数据的重要来源,大数据为物联网数据分析提供支持
  3. 云计算为物联网提供海量数据存储能力,物联网为云计算技术提供了广阔的应用空间.

二、大数据处理架构 Hadoop

Hadoop是一个开源的,可运行于大规模集群的一个分布式计算平台。

概述

Hadoop生态系统:

  1. HDFS:

    Hadoop分布式文件系统(Hadoop Distributed File System),是Hadoop项目的两大核心之一,是针对于谷歌文件系统的开源实现,HDFS可以运行在廉价的大型服务器集群上

  2. HBase:

    HBase 是一个提高可靠性、高性能、可伸缩、实时读写、分布式的列式数据库,一般采用 HDFS 作为其底层数据存储。HBase 是针对谷歌 BigTable 的开源实现。

  3. MapReduce:

    Hadoop MapReduce 是针对谷歌 MapReduce 的开源实现。MapReduce 是一种编程模型,用于大规模数据集(大于 1 TB)的并行计算,他江复杂的并行计算过程高度抽象到了两个函数 Map 和 Reduce 上。它的核心思想是分而治之,把输入的数据切割分别计算,最后通过整合节点的计算来得到结果。

  4. Hive:

    Hive 是一个基于 Hadoop 的数据仓库工具,可以对 Hadoop 文件中的数据集进行数据整理、特殊查询和分析存储。

  5. Pig:

    Pig 是一种数据流语言和运行环境,适合用于 Hadoop 和 MapReduce 平台来查询大型半结构化数据集。

  6. Zookeeper:

    Zookeeper 是一个针对谷歌 Chubby 的一个开源实现,是高效和可靠地协同工作系统,提供分布式锁之类的基本服务.

  7. Sqoop:

    Sqoop 是 SQL-to-Hadoop 的缩写,主要用于 Hadoop 和关系数据库之间交换数据,可以改进数据的互操作性。

单机式安装和伪分布式安装

Hadoop 有伪分布式和完全分布式两种安装方法。Hadoop 有几个重要的配置文件:

文件名称格式描述
hadoop-env.shBash 脚本记录配置 Hadoop 运行所需的环境变量
core-site.xmlHadoop 配置 XMLHadoop core 的配置项,如 HDFS 和 MapReduce 常用点的 I/O
hdfs-site.xmlHadoop 配置 XMLHadoop 守护进程的配置项
mapred-site.xmlHadoop 配置 XMLMapReduce 守护进程的配置项

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。

读数据的过程:

  1. 客户端通过 FileStream.open() 打开文件,具体输入流是 DFSInputStream。
  2. 在 DFSInputStream 的构造函数中,输入流远程调用名称节点,获得文件开始部分数据块的保存位置。对于该数据块,名称节点返回保存该数据块的所有数据节点的位置。
  3. 客户端开始调用 read() 函数读取数据,输入流根据排序结果,选择距离客户端最近的数据节点建立连接并读取数据。
  4. 数据从数据节点读到客户端。
  5. 输入流查找下一个客户端的位置
  6. 找到该数据块的最佳数据节点,读取数据
  7. 客户端的数据读取完毕,要关闭输入流

写数据的过程

  1. 客户端通过 FileStream.create() 创建文件,具体输出流是 DFSOutputStream。
  2. 通过远程 RPC 调用名称节点,在文件系统的命名空间中建立一个新的文件
  3. 获得输入流后,客户端调用后输出流的 write() 方法向 HDFS 中对应的文件写入数据
  4. 分包,形成数据流管道。
  5. 各个数据节点处于不同的机器,数据要通过网络发送。数据节点要向发送者发确认包
  6. 客户端调用 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
    1. 用一个哈希表,有一个key和指针指向特定的Value,不能进行索引和查询只能用key来查询
    2. 条件查询是键值数据库的弱项,应该尽量避免多表关联查询。
  • 列族数据库

    • 比如:BigTable、HBase、Cassandra

    • 有多个行构成,每行数据包含多个列族,不同的行可以有不同数量的列族

  • 文档数据库

    • 比如:MongoDB
    • 在文档数据库中,文档是数据库的最小单位,虽然每一种文档的格式各有不同,但是大都假定文档以某种标准化的格式封装并对数据进行加密,同时用多种格式进行解码。
    • 与键值数据库不同的地方是,这个值是对数据库透明不可见的,不能根据值来构建索引
  • 图数据库

    • 图数据库以图论为基础,一个图是一个数学概念,用来表示一个对象集合,包括顶点以及连接顶点的边
    • 可以高效的存储不同顶点之间的关系
    • 专门用来处理高度相互关联关系的数据,可以高效的处理实体之间的关系。

最后修改于 2018-12-29

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。