【Hadoop】Hadoop+MapReduce 入门概述

第一部分 Hadoop

1.Hadoop项目的由来

    起源于一个开源的网络搜索引擎项目ApacheNutch,借鉴GFS,实现了一个开源的实现HDFS,05年nutch上实现了一个mapreduce系统,完成了所有主要算法的mapreduce+HDFS移植。

2.HDFS的体系结构

    采用了主从(Master/Slave)结构模型,一个HDFS集群是由一个NameNode和若干DataNode组成,其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件的访问操作。DataNode管理存储的数据。
    HDFS允许用户以文件的形式存储数据,文件被分成若干个数据块,而且这若干个数据块存放在一组DataNode上。NameNode是整个HDFS的核心,它通过维护一些数据结构来记录每一个文件被分割成了多少个块、这些块可以从哪些DataNode中获得,以及各个DataNode的状态等重要信息。NameNode执行文件系统的命名空间操作,如打开、关闭、重命名文件或目录等,也负责数据块到具体DataNode的映射。DataNode负责处理文件系统客户端的文件读写操作,并在NameNode的统一调度下进行数据块的创建、删除和复制操作。

3.HDFS的运行机制
1.可靠性保障:
  • 冗余机制——数据复制
  • 故障检测——datanode(心跳包,块报告,数据完整性监测)namenode(日志和镜像)
2.读文件流程:
  • 客户端调用DistributedFileSystem对象的open()方法
  • DistributedFileSystem通过RPC联系namenode,得到所有数据块信息,对每个数据块,namenode返回存有该块副本的datanode地址,并且这些datanode根据他们与客户端的距离进行排序
  • DistributedFileSystem类返回一个FSDataInputStream对象给客户端并读取数据
  • 客户端对该对象调用read()方法读取数据
  • FSDataInputStream连接距离最近的datanode读取数据,数据读取完毕时FSDataInputStream会关闭与该datanode的连接,然后寻找下一个块的datanode
  • FSDataInputStream可能并行读取多个datanode,当客户端完成读取时,对FSDataInputStream调用close()方法
  • FSDataInputStream从datanode读取数据时如果遇到错误,会尝试从该块的另外一个最近的datanode读取数据,并记住故障datanode保证以后不会继续从该节点读取其他块
  • 每个读取的块通过校验和确认以保证数据完整
  • 如果FSDataInputStream发现一个损坏的块,则在从其他datanode读取块之前通知namenode
3.写文件流程:
  • 客户端调用DistributedFileSystem对象的create()方法创建文件
  • DistributedFileSystem通过RPC联系namenode,namenode执行各种检查确保待建立的文件不存在,且客户端拥有创建该文件的权限
  • 如果检查通过,namenode为新文件创建一条记录,否则抛出一个IOException异常
  • DistributedFileSystem给客户端返回一个FSDataOutputStream对象进行写数据
  • FSDataOutputStream将待写入数据分成数据包并写入内部队列dataqueue
  • DataStreamer处理dataqueue,根据datanode列表要求namenode分配适合的新块来存储数据备份
  • namenode分配的数据备份datanode(通常3个)形成一个管线,DataStreamer将数据包传输给管线中的第一个节点,然后该节点存储完之后发送给第二个节点,以此类推
  • FSDataOutputStream维护一个确认队列ackqueue,当收到管线中所有datanode的确认后,该数据包从确认队列中删除
  • 如果datanode发生故障,则关闭管线,将确认队列中的数据包添加回数据队列的最前端,将故障的数据块和datanode信息返回给namenode以便该datanode恢复后删除错误数据块,从管线中删除错误节点,并把剩余数据块写入正常datanode
  • 如果复本数量不足,则namenode根据datanode分配新的datanode并创建新的复本,该datanode被加入管线继续正常存储
4.Htable的数据结构
  • 行:每行数据有一可排序的关键字和任意列项;不同行的列的数目可以大不相同
  • 列:用“族”来定义;“族:标签”;物理上将同族数据存储在一起;数据可以通过时间
    戳区分版本
5.Hbase的运行机制

   数据存储实体为区域,表按照水平的方式划分为一个或多个区域,每个区域有一个随机id,且区域内行为键值有序的。区域以分布式方式存储在集群内。通过区域服务器运行:

  • 1写:写数据首先写入“预写日志”;先缓存,再批量写入;完成后在日志中做标记
  • 2读:区域服务器先在缓存中查找,找到则直接服务;
  • 3合并:映射文件数量超过阈值,则区域服务器进行合并
  • 4分割:区域文件大过阈值时,按照行方式对半分割;在元信息表中生成子元信息表;主
    服务器在得知分割后,将子表分配给新的区域服务器服务
  • 5失效恢复:将失效服务器的区域分配给其他服务器,原“预写”日志进行分割并分配给
    新的区域服务器
6. ZooKeeper的数据读写机制
  • ZooKeeper:提供通用的分布式锁服务,用以协调分布式应用。
  • ZooKeeper是一个由多个Server组成的集群,一个Leader,多个Follower(每个Server都保存了一份数据副本;全局数据一致;分布式读写;更新请求转发,由Leader实施)。
    一些约定:更新请求顺序执行;数据更新原子性;全局唯一数据视图;实时性。
7. Yarn对Hadoop的核心改进
  • 1.原框架中的JobTracker和TaskTracker被ResourceManager,ApplicationMaster与NodeManager取代。
  • 2.ResourceManager是一个中心的服务,它做的事情是调度、启动每一个Job所属的
    ApplicationMaster、另外监控ApplicationMaster的存在情况。
  • 3.NodeManager功能比较专一,就是负责Container状态的维护,并向RM保持心跳。
  • 4.ApplicationMaster负责一个Job生命周期内的所有工作,类似老的框架中JobTracker。可以运行在resourceManager以外的机器上
改进后的优点:
  1. 减少了jobTracker也即resourceManager的资源消耗,让监测每一个Job子任务(tasks)状态的程序分布式化
  2. ApplicationMaster是一个可变更的部分,用户可以对不同的编程模型写自己的AppMst,让更多类型的编程模型能够跑在Hadoop集群中
  3. 对于资源的表示以内存为单位,比以task任务数目分配更加合理
  4. 客户端调用API或者接口,程序框架改变后不再需要被强制更新。
8. Pig和HDFS

HDFS——存储海量数据
Pig——数据流语言和运行环境,用以检索非常大的数据集


第二部分 MapReduce

1. Mapreduce算法的架构

  每个mapreduce任务都被初始化为一个job,每个job分为两个阶段,实现了Map和Reduce两个功能:

  • Map:把一个函数应用于集合中所有成员,然后返回一个基于这个处理的结果集。
  • Reduce:对结果集进行分类和归纳。
2. Hadoop执行MR的过程
  • 1.master节点运行jobTracker实例,接收客户端job请求,一个job是对一个数据集的处理,slave节点运行TaskTracker实例,一个task是一次map或者reduce处理过程。
  • 2.MR程序由一个jar文件和一个xml文件组成,jar包含程序代码,xml包含程序配置操作。
  • 3.客户端设定配置之后,交job,将job数据发送到jobTracker的文件系统中,Mapreduce库会把所输入文件分割成M块,放到不同的datanote上。
  • 4.JobTracker将job放入队列进行调度,并把jar和配置文件放到共享空间
  • 5.Hadoop有一个机器内进程间操作通信的机制,taskTracker周期性告诉jobTracker工作状态,如果空,job给task分配任务,开一个进程处理。
  • 6.MR程序被传送到各个数据所在的HDFS的datanote上运行,mapper被输送到数据节点上进行计算,中间结果被输送到reducer上进行计算,Reducer将计算结果分布式保存到HDFS。
  • 7.当所有map和reduce任务完成时,master会唤醒用户程序,通知任务完成,再取执行新的任务。
3. MR算法执行过程中的数据流转过程
  • 1.用户文件上传到HDFS,由mapreduce库切割分别存储到datanote上
  • 2.以行号,文本形式传入map中,经过自定义map处理产生<key,value>对,构成中间结果集缓存在本地内存中。
  • 3.reducer接到master的收集中间结果集任务后,通过远程调用读取中间结果,并将其排序,key相同的value进行合并处理化简。
  • 4.最终结果写入到HDFS文件系统中

第三部分 MapReduce入门编程实践

1.Mapreduce实例—统计单词个数(wordcount)
2.Hbase+MapReduce计算学生成绩平均分

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值