大数据不是像传统系统那样为用户提供功能, 而是猜测用户可能需要什么功能推给用户.

大数据技术的发展史

image.png

大数据框架

image.png

大数据应用发展史

  • 搜索引擎时代
    • google/yahoo/baidu
  • 数据仓库时代
    • 数据分析
    • hive
  • 数据挖掘时代:2012年左右
    • 关联推荐
    • 阿里千人千面
    • 今日头条
  • 机器学习:2015年左右
    • 通过统计数据规律, 预测正在发生的事情

大数据应用领域

  • 医学影像智能识别
  • 病历大数据智能诊疗
  • AI外语老师
  • 智能截图
  • 舆情分析
  • 大数据风控
  • 新零售
  • 无人驾驶

HDFS

文件存储要解决的两个问题

  • 如何存储大量数据
    • 数据以数据块的形式存储在DataNode的磁盘中
    • 所有的块可以赋予一个文件进行读写
  • 如何快速的存储
    • 数据分块以后就可以同时并发读写
  • 如何保证存储数据的安全性
    • 跨机架备份复制image.png
    • 数据块默认会复制三份

RAID是在同一个服务器的多块硬盘上, 通过数据分片进行数据存储; 而HDFS是通过在多个服务器上进行分片实现;

HDFS中有两个重要的角色: NameNode和DataNode.

  • nameNode用于记录文件的元数据信息, 文件路径, 复制数, 创建者等等信息
  • dataNode用于存放数据本身
  • 交互
    • nameNode不会主动联系dataNode
    • dataNode启动后向nameNode注册, 完成后, 周期性(1小时)的向nameNode上报所有的块信息
    • 心跳每三秒一次, 包括nameNode向该dataNode的命令, 如果超时10分钟没有收到, 则认为该dataNode失效

HDFS架构

image.png

存储细节

mimage.png

HDFS设计目标

  • 适合的场景
    • 以流式数据访问模式存储超大文件
    • 运行在商用硬件集群上
    • 一次写入多次读取
  • 不适合的场景
    • 低延迟的数据访问
    • 大量小文件
    • 多用户随机写入修改文件

HDFS如何写文件

image.png

HDFS如何读文件

image.png

如何保证高可用

  • DataNode的磁盘坏了怎么办
    • DataNode正常时, 将坏掉的数据块上报给nameNode
    • nameNode会返回将坏掉的数据块复制到哪些新的数据块
    • dataNode进行数据块复制
    • 时间较短, 因为心跳, 3s即可发现, 开始复制
  • DataNode服务器挂了怎么办
    • dataNode每3s向nameNode发送心跳, 如果10分钟dataNode没有发送成功, 则nameNode认为该dataNode已经dead
    • nameNode将取出该dataNode上的block,进行复制
    • 时间较长, 10分钟,而且数据量较大
  • NameNode挂了怎么办
    • 早期: 持久化元数据
      • 操作日志, 记录文件的创建,删除,修改文件等操作
      • Fsimage
    • 主从nameNode
      • zookeeperimage.png
      • 因为要发心跳, 同时只会有一个主节点使用
  • client挂了怎么办
    • 一致性问题
      • HDFS一致性模型

开放接口

  • HDFS文件接口
  • Java接口

MapReduce

是对大规模数据进行计算的框架, 思路是, “移动计算比移动数据更划算”
执行时是把MapReduce分发到数据所在服务器上进行计算, 在本地进行计算, 以提高计算性能.

MapReduce特性

  • 自动实现分布式并行计算
  • 容错
  • 提供状态监控工具
  • 模型抽象简洁, 程序员易用

举例: WordCount

  1. 统计每个单词出现的次数image.png
  2. map类的map方法image.png
    1. key: 表示value在文件中的偏移量
    2. value: 表示从文件中读取的某一行
  3. reduce类的reduce方法image.png
    1. key: 表示map()返回的key, 即每个单词
    2. values: 表示map()返回的每个单词的数量, 固定是1

image.png

MapReduce的实现过程

image.png

image.png

shuffle: 将不同的map的输出中的相同的key, 通过网络copy放到不同的reduce中
image.png

MapReduceV1 的整体架构

image.png

YARN: 下一代MapReduce框架

  • 不再是传统的MapReduce框架, 甚至与MapReduce无关
  • 一个通用的运行时框架, 用户可以自己编写自己的计算框架, 在该运行环境中运行.

MapReduce架构中, 最重要的是要把MapReduce程序分发到大数据集群的服务器上, Hadoop1中, 这个过程主要通过TaskTracker和JobTracker完成.
缺点是, 服务器集群资源调度管理和MapReduce执行过程耦合在一起, 就会导致如果想在当前集群中运行其他任务, 就无法统一使用集群中的资源了

YARN架构

image.png

Hive

大数据任务大部分是需要sql计算的, Hive 提供将sql转换为mapReduce的功能.

image.png

MapReduce的实现:
image.png
image.png

Hive架构

image.png

HiveQL-join

image.png

image.pngimage.png