《大数据原理与技术》陈红顺


第1章 大数据概述

1.1 产生背景和发展历程

  • 存储设备容量不断增加
  • CPU处理能力大幅增长
  • 网络带宽不断增加

数据产生方式的变革促成大数据时代的来临

  • 运营式系统阶段
  • 用户原创内容阶段
  • 感知式系统阶段

1.2 大数据的概念

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

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


  • 数据规模大
  • 数据多样化
    • 大数据是由结构化和非结构化数据组成的
    • 10%的结构化数据,存储在数据库中
    • 90%的非结构化数据,与人类信息密切相关
  • 数据变化快
  • 价值密度低

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

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

人工智能三大基石

  • 数据 —— 大数据
  • 算力 —— 云计算
  • 算法 —— 机器学习/深度学习

1.3 大数据的关键技术

数据采集

利用ETL工具将分布的、异构数据源中的数据如关系数据、平面数据文件等,抽取到临时中间层后进行清洗、转换、集成,最后加载到数据仓库/数据集市中,成为联机分析处理、数据挖掘的基础;或者也可以把实时采集的数据作为流计算系统的输入,进行实时处理分析

ETL是指从数据源中提取(Extract)、转换(Transform)和加载(Load)数据到目标数据库或数据仓库的过程。在数据采集领域,ETL通常是指将各种异构数据源的数据收集起来,经过清洗、处理、转换等一系列操作后,将数据导入到统一的目标数据仓库中,以方便后续的分析和挖掘。这个过程中,需要用到各种数据处理和转换技术,如数据清洗、数据规范化、数据聚合等等。

数据存储与管理

利用分布式文件系统、数据仓库、关系数据库、NoSQL数据库、云数据库等,实现对结构化、半结构化和非结构化海量数据的存储和管理

数据处理与分析

利用分布式并行编程模型和计算框架,结合机器学习和数据挖掘算法,实现对海量数据的处理和分析

数据安全和隐私保护

从大数据中挖掘潜在的巨大商业价值和学术价值的同时,构建隐私数据保护体系和数据安全体系,有效保护个人隐私和数据安全

数据可视化

将数据和分析结果转化为图形图像,实现对稀疏、杂乱、复杂的数据深入洞察,发现背后有价值的信息


两大核心技术

  • 分布式存储
  • 分布式处理(计算)

1.4 大数据处理(计算)模式

数据集分类

  • 有界数据集:具有时间边界,数据有一定的起始和结束时间
  • 无界数据集:数据从开始生成就一直不断地产生新的数据

主要处理模式

  • 批处理:有界数据,高吞吐,高延迟
  • 流处理:流式数据,低延迟,低吞吐

常见大数据处理框架

  • 仅批处理:Hadoop MapReduce
  • 仅流处理:Storm、Samza
  • 混合:Spark、Flink
    • Spark:核心是批处理,流处理被定义为微批处理,商业应用成熟
    • Flink:核心是流处理,批处理被定义为有限流处理,设计理念先进

大数据处理模式

大数据处理模式 解决问题
批处理 针对大规模数据的批量处理
流处理 针对刘数据的实时计算
图处理 针对大规模图结构数据的处理
交互式查询 大规模数据的存储管理和查询分析

1.5 大数据处理架构Hadoop

  • 运行于大规模普通服务器上
  • 用于大数据存储、处理
  • 一种分布式存储系统和分布式计算框架

  • 能为庞大的计算机集群提供可靠的、可伸缩的应用层计算和存储支持
    • 它允许使用简单的编程模型模型跨计算机集群分布式处理大型数据集,并且支持在单台计算机到几千台计算机之间进行扩展
    • 可以在计算机集群的顶部提供高可用性服务,虽然每台计算机都很容易出现故障
  • Hadoop使用Java开发,可以在不同硬件平台的计算机上部署和使用
  • 核心组件包括分布式文件系统HDFS和MapReduce

Hadoop 运行模式

  • 单机模式:只在一台机器上运行,存储采用本地文件系统
  • 伪分布式:存储采用HDFS文件系统,用Java进程模拟小规模集群
  • 完全分布式:运行在真实的Hadoop集群上

大数据系统架构

  • Lambda架构
  • Kappa架构

1.6 大数据的影响

大数据带来的思维变革

  • 全面而非抽样
  • 效率而非精确
  • 相关而非因果

1.7 大数据的应用


2.1 分布式文件系统

分布式文件系统把文件分布存储到多个计算机节点上,成千上万的计算机节点构成计算机集群

2.1.2 分布式文件系统的设计需求

  • 透明性:具备访问透明性、位置透明性、性能和伸缩透明性
  • 并发控制:客户端对文件的读写不应该影响其他客户端对同一文件的读写
  • 文件复制:一个文件可以拥有在不同位置的多个副本
  • 硬件和操作系统异构性:可以在不同操作系统和计算机上实现同样的操作
  • 可伸缩性:支持节点的动态加入或退出
  • 容错:保证文件服务在客户端或服务器出现问题时能正常使用
  • 安全

2.2 HDFS设计思想

考虑到应用场景和实际应用环境的特点,HDFS设计主要实现以下目标:

  • 兼容廉价的硬件设备:设计了快速硬件故障检测和进行自动恢复的机制
  • 流数据读写:为了满足批量数据处理的要求,以流式方式访问文件系统数据,可以提高数据吞吐量
  • 大数据集:文件通常可以达到GB甚至TB级别,一个数百台机器组成的集群可以支持千万级别这样的文件
  • 简单的文件模型:采用"一次写入、多次读取"的简单文件模型
  • 强大的跨平台兼容性:HDFS采用Java语言实现

HDFS的特殊设计的局限性:

  • 不适合低延迟数据访问
  • 无法高效存储大量小文件
  • 只允许一个文件有一个写入者
  • 只允许对文件执行追加操作(不能执行随机写操作)

2.3 HDFS相关概念

2.3.1 块

  • HDFS将大文件分成块(默认128MB),块可以分布到不同的节点上
  • HDFS采用分治策略,令多个节点对逻辑层面的大文件在物理层面进行分布式存储
  • 块的大小远远大于普通文件系统,可以最小化寻址开销

HDFS采用分块存储的优点:

  • 支持大规模文件存储:文件大小不会受到单个节点的存储容量限制,可以远远大于网络中任意节点的存储容量
  • 简化系统设计
    • 文件块大小固定,易计算出一个节点可以存储多少文件块
    • 方便元数据管理,元数据不需要和文件块一起存储,可以由其他系统负责管理元数据
  • 适合数据备份:每个文件块都可以冗余存储到多个节点上,大大提高了系统的容错性和可用性

2.3.2 NameNode

NameNode负责管理分布式文件系统的命名空间,保存了两个核心的数据结构:

  • FsImage 用于维护文件系统树以及文件树中所有文件和文件夹的元数据
  • EditLog 操作日志文件 记录了所有针对文件的创建、删除、重命名等操作

NameNode记录了每个文件中各个块所在的DataNode的位置

FsImage

FsImage文件包含文件系统中所有目录和文件inode的序列化形式

  • 每个inode是一个文件或目录的元数据的内部表示,并包含:文件的复制登记、修改和访问时间、访问权限、块大小、组成文件的块。对于目录,存储修改时间、权限、配额元数据

FsImage文件没有记录每个块存储在哪个DataNode,二是由NameNode把这些映射信息保留在内存中

  • 当DataNode加入HDFS集群时,DataNode会把自己所包含的块列表告知给NameNode,此后会定期执行这种告知操作,以确保NameNode的块映射是最新的
NameNode的启动

在NameNode启动时,它会将FsImage文件中的内容加载到内存中,之后再执行EditLog文件中的各种操作,使得内存中的元数据和实际的同步,存在内存中的元数据支持客户端的读操作

一旦内存中成功建立文件系统元数据的映射,则创建一个新的FsImage文件和一个空的EditLog文件。

NameNode起来之后,HDFS中的更新操作会重新写到Editlog文件中,因为FsImage文件一般都很大,如果所有更新操作都往FsImage文件中添加,这样会导致系统运行的十分缓慢。但是,如果往EditLog文件里面写就不会这样,因为EditLog小得多,每次执行写操作之后,且在向客户端发送成功代码之前,edits文件都需要同步更新。

2.3.3 SecondaryNameNode

在NameNode运行期间,HDFS

2.3.3 DataNode

2.4 HDFS体系结构

主从架构。

2.5 HDFS存储原理

2.6 HDFS文件读写

2.7 HDFS编程实践