大数据

作者: 茶尽 | 来源:发表于2018-10-24 20:43 被阅读0次

    HDFS 分布式文件系统

    1. 按块存储
      • 支持大规模文件存储
      • 简化系统设计
      • 数据备份
    2. 名称节点,整个HDFS集群的管家。
      • FsImage和editlog
      • 通过shell命令,从上述两个地方最新的元数据,创建一个新版的FsImage(名称节点),创建一个空的 editlog(editlog依然会变大)
      • 第二名称节点(帮助解决editlog过大&冷备份)
        • 冷备份过程:第二名称节点与名称节点定期通信,过大叫停,名称节点创建edit.new,第二名称节点把FsImage和editlog拷贝到本地合并成一个新的FsImage,名称节点将edit.new改为editlog
    3. 数据节点,负责存储实际数据。
    4. 体系结构:hdfs读写先通过名称节点,去读取数据节点.
      • 命名空间 目录+文件+块
    5. 存储原理,冗余数据保存
      • 加快传输速度
      • 容易检查错误
      • 保证可靠性
    6. 数据读取
      • 打开文件,生成fsDataInput Stream输入流,封装了distribution filesystem类对象。
      • 获取数据块信息,与名称节点沟通,将文件数据块地址信息返回。
      • 读取数据,输入流执行read,从距离客户端最近的数据节点开始读。关闭连接。
      • 再次获取数据块信息并读取数据。关闭文件。
    7. 写数据
      • 创建文件请求,生成FSDataOutputStream封装一个distribution filesystem类对象。
      • 创建文件元数据,调用名称节点,名称节点进行检查。
      • 写数据,流水线复制。把数据分成包,放入输出流。数据节点形成一个管道,分包依次发放,客户端发到第一个,第一个发到第二个(复制)……,确认包从最后一个数据节点往前传,传到客户端。
      • 关闭文件。

    MapReduce

    1. 一种分布式变成框架。计算向数据靠拢,将应用程序分发到数据所在的机器。map函数输入是一个键值对,输入是一堆键值对。reduce函数输入是一个<key,value-list>,输出是一个<key,value>。
    2. 体系结构。
    • client客户端
    • jobtracker 作业跟踪
    • tasktracker 任务调度 执行jobtracker发送的命令
    • slot是一个任务调度单位(资源单位,2.0已经取消),分为map类型和reduce类型。task也分为map类型和reduce类型。
    1. 工作流程。from hdfs对大规模数据集进行分片操作(split,逻辑上),生成很多map任务(由分片数量决定),对每一个map分成多个reduce任务(shuffle),输出到hdfs。
    • map任务和reduce任务之间不进行通信。
    1. shuffle过程。


    输入数据进行分片处理,map之后输入处理结果(一堆键值对),写入缓存,满了之后溢写到磁盘中。通过reduce任务取走,经过归并,合并输入到reduce函数,输出到hdfs。

    • 写到缓存是因为:减少寻址开销,一次寻址批量写入
    • 溢写包括:分区,排序,合并
    • map端的shuffle:分区,分区给不同的reduce任务,按照key排序,合并是为了减少溢写到磁盘的数量(如果不经过combine,结果是key-value list,经过的话,结果是key-value n)。
      -reduce端的shuffle:从多个map任务拷贝到reducer,归并数据,写入磁盘。


    Spark

    1. spark与hadoop对比
    • hadoop表达能力有限,磁盘io开销大(都写到hdfs里),延迟高,任务之间的连接涉及io开销,难以胜任复杂/多阶段的任务。
    • 提供了多种数据集操作,提供了内存计算效率更高,DAG迭代机制。
    1. 架构
      优点:利用多线程执行任务,减少任务启动开销。executor有一个blockmanager存储模块,将内存和磁盘作为存储设备,较少io开销。



      一个application有一个driver和多个job,一个job包含多个stage,一个stage包括多个task。执行一个application,driver向集群管理器申请资源,启动executor,执行task,结束后把结果返回。

    2. 流程


    • 每个aoolication都有自己的executor进程,以多线程的方式运行task。
    • spark运行与资源管理器无关,只需获取executor进程并保持通信。
    • task数据本地性,推测执行。
    1. RDD 弹性分布式数据集 resillient distributed dataset
      一个RDD是一个分布式对象几何,只读。避免中间数据存储。
    • 执行过程:读入外部数据源,经过一系列转换每次都产生不同的RDD,最后一个RDD经过动作操作计算并输出。
    • 高容错性。血缘关系结构决定,从父RDD转换恢复。
    • 中间结果持久化到内存。数据在内存中RDD传递,避免io开销。
    • 存放对象可以是Java对象,避免了不必要的对象序列化
    1. RDD的依赖关系,帮助划分stage。在DAG中反向解析,遇到宽依赖就断开,遇到窄依赖就加入stage。将窄依赖尽量划分在一个stage中,形成流水线操作。
    • 窄依赖:一对一,多对一。
    • 宽依赖:一对多。
    • shufflemapstage
    • resultstage 直接输出结果
    1. spark部署


    数据仓库hive

    1. 本来不具有数据的存储和分析,提供了一种语言。
    • 采用批处理方式处理海量数据,将hiveQL语句转为mr任务。
    • 存储的静态数据,适合采用批处理处理方式。
    • 提供了一系列工具对数据进行存储处理。
    1. hive对外访问接口,驱动模块(把HiveQL转换为MR语句),元数据存储模块(独立的关系型数据库)


    相关文章

      网友评论

          本文标题:大数据

          本文链接:https://www.haomeiwen.com/subject/izcfzftx.html