大数据3-MapReduce

·  阅读 423

Hadoop的文字简介

  • Hadoop是Apache的一个开源的分布式计算平台,以HDFS分布式文件系统和MapReduce分布式计算 框架为核心,为用户提供了一套底层透明的分布式基础设施
  • Hadoop框架中最核心设计就是:HDFS和MapReduce。HDFS提供了海量数据的存储,MapReduce 提供了对数据的计算。
  • Hadoop框架中最核心的设计就是: HDFS 和MapReduce
    • HDFS是Hadoop分布式文件系统,具有高容错性、高伸缩性,允许用户基于廉价硬件部署,构建分布式存储系统,为分布式计算存储提供了底层支持
    • MapReduce提供简单的API,允许用户在不了解底层细节的情况下,开发分布式并行程序,利用大 规模集群资源,解决传统单机无法解决的大数据处理问题
    • 设计思想起源于Google GFS、MapReduce Paper
  • Doug Cutting在Yahoo开发,2008年贡献给Apache基金会

Hadoop核心项目

HDFS

HDFS: Hadoop Distributed File System分布式文件系统

MapReduce

MapReduce:编程模型和并行计算框架

MRv1

第一代MapReduce。它由两部分组成:

  • 编程模型
  • 运行时环境(计算框架)

设计的目的:

  • 主要解决搜索引擎面临的海量数据处理扩展性差的问题
  • 易于编程,简化分布式程序设计,用户只需专注于自己的应用程序逻辑实现

MRv1编程模型

编程模型:多线程编程模型

image.png

  • 并行处理
  • 数据共享
  • 需要通过锁协调
  • 写操作复杂

编程模型:数据驱动型编程模型

image.png

  • 通过到达的数据触发
  • 处理单元之间禁止数据共享
  • 不需要通过锁做协调

编程模型:MapReduce编程模型

image.png

  • 特殊的数据驱动型
  • 分为map和reduce两个阶段
  • 并发只在同一个作业中发生
  • 不同作业的数据访问不需要协调

MRv1

编程模型:MapReduce编程模型

• 特殊的数据驱动型 • 分为map和reduce两个阶段 • 并发只在同一个作业中发生 • 不同作业的数据访问不需要协调

image.png

举个例子

数据切分

数据源 可以是公司一天的日志

image.png

作用:

  1. 按照某个策略将数据切分成若干个split,确定Map Task个数 2. 给定某个split,能将其解析成一个个key/value对。

怎么切分?

  • 文件切分算法
  • Host选择算法

Map任务启动在哪里?任务本地性?

文件切分算法

文件切分算法主要用于确定InputSplit的个数以及每个InputSplit对应的数据段。

  • 一个大文件会被切分成若干个InputSplit
  • 对文件的切分是按照“固定”大小进行的,这个大小就是split size
  • splitSize=max{ minSize, min{ totalSize / numSplits, blockSize } }
    • numSplits为用户设定的 Map Task个数,默认情况下是1。
    • minSize为Split的最小值,由配置参数确定,默认是1。
    • blockSize为HDFS中的block大小 ,默认是64MB。
      • 这个数据现在都设置128 256,为了减少namenode的压力
      • 32M的文件 也会占用一个block
      • block的大小是个动态的 文件1K block就是1K
  • 一旦确定splitSize值后,将文件依次切成大小为splitSize的InputSplit
  • 最后剩下不足splitSize的数据块单独成为一个InputSplit

Host选择算法

InputSplit对象包含四个属性,分别是文件名、起始位置、Split长度和节点列表;构成一 个四元组<file, start, length, hosts>。 节点列表是关键,关系到任务的本地性(locality)。 Hadoop将数据本地性按照代价划分成三个等级:Node、Rack和Any。

  • node 优先数据所在的机器
  • rack 如果同机器内存不足的话 再去找同机柜/同网络

所谓任务的本地性,即优先让空闲资源处理本节点上的数据,如果节点上没有可处理的数 据,则处理同一个机架上的数据,最差情况是处理其他机架上的数据。

要点

分类:
代码人生
标签: