hadoop理解

hadoop:

  • 开源分布式平台
  • 核心:HDFS、MapReduce
  • HDFS在集群上实现分布式文件系统
  • MapReduce在集群上实现分布式计算和任务处理

1 HDFS体系结构

一个HDFS集群是由一个NameNode和若干个DataNode组成。

  • NameNode(名字节点):管理文件系统的命名空间和客户端对文件的访问操作
    (1)执行文件系统的命名空间操作,如打开、关闭、重命名文件或目录
    (2)负责数据块到具体DataNode的映射
  • DataNode(数据节点):管理存储的数据
    (1)负责处理文件系统客户端的文件读写请求
    (2)在NameNode的统一调度下进行数据块的创建、删除和复制工作

hadoop理解_第1张图片

2 MapReduce体系结构

MapReduce框架是由一个单独运行在主节点的JobTracker和运行在每个集群从节点的TaskTracker共同组成的。

  • JobTracker:调度和管理其他TaskTracker
  • TaskTracker:负责执行任务 ,运行于DataNode之上

3 MapReduce任务处理流程

思想:分而治之

  • 用户自定义的Map函数把输入的键值对映射(map)成一组新的键值对
  • MapReduce把所有具有相同的key值的value集合一起,传递给Reduce函数
  • 用户自定义的Reduce函数对相同key下的所有value进行处理再输出最终的键值对

4 MapReduce应用案例

4.1 单词计数

解决方案

  • 将文件内容切分为单词
  • 将所有相同的单词聚集在一起
  • 计算单词出现的次数并输出

设计思路

  • map阶段:完成由输入数据到单词切分的工作 <行号,内容> -->
  • reduce阶段:接收所有单词并计算其频数 -->

4.2 数据去重

解决方案

  • 将文件内容切分为单词
  • 将所有相同的单词聚集在一起
  • 接收元组,直接输出key

设计思路

  • map阶段:完成由输入数据到单词切分的工作 <行号,内容> -->
  • reduce阶段:接收单词并直接输出键 -->

4.3 数据排序

解决方案

  • 利用hadoop自带的排序
  • 将数据转为IntWritable类型
  • hadoop自动对所有的元组进行基于Key的排序
  • 接收元组,直接输出key,根据输入value-list中的元素个数决定key的输出次数

设计思路

  • map阶段:将输入的value转为IntWritable类型,作为输出的key <行号,data> -->
  • 自定义partition函数:
    (1)注意:reduce自动排序仅仅是发送到自己所在节点的数据,使用默认的排序不能保证全局顺序
    (2)根据输入数据的最大值和mapreduce框架中partition的数量获取将输入数据按照大小分块的边界,然后根据输入数据和边界的关系返回对应的partition ID
  • reduce阶段:将输入的key复制到输出的value上,根据输入value-list中的元素个数决定key的输出次数,用全局linenum代表key的位次 -->

4.4 单/多表连接

解决方案

  • 区分输入行是左表还是右表,然后对两列值进行分割,连接列保存在key中,其他列和左右表标识保存在value中
  • 解析map输出,将value中数据按照左右表标识分别保存,求笛卡尔积并输出

设计思路

  • map阶段:识别出输入的行属于哪个表后,对其进行分割,将连接的列值保存在key中,另一列和左右表标识保存在value中,然后输出<行号,行数据> --> <连接列值,其他列值和左右表标识>
  • reduce阶段:拿到连接结果后,解析value内容,根据标识将左右表内容分开存放,求笛卡尔积最后直接输出 <连接列值,{其他列值和左右表标识,其他列值和左右表标识,…}> --> <连接列值,左表其他列值和右表其他列值的笛卡尔积>

4.5倒排索引

  • 倒排索引原理和实现 https://blog.csdn.net/u011239443/article/details/60604017

你可能感兴趣的:(hadoop理解)