zoukankan      html  css  js  c++  java
  • hadoop快速入门

    参考:https://blog.csdn.net/qq_38061534/article/details/85175095
    安装配置等信息请查看上面链接

    1.hadoop开启后五个守护进程

    使用命令:jps即可看到这个5个人进程
    NameNode(HDFS):管理这这个文件系统的命名空间,维护整个文件系统树的文件,目录。这些信息保存在命名镜像文件,编辑日志文件中。如要在NameNode中文件1的信息,会知道这个文件被分为哪些数据块被放在哪些node节点上。这里NameNode维护的信息
    DataNode(HDFS):管理着节点信息,每个节点会有很多数据块,会定期将数据块信息上传给NameNode。所以说可以通过NameNode找文件知道在哪个DataNode所在节点上了
    SencondaryNameNode(HDFS):定期合并清理NameNode的fsimage和fseditlog,不是NameNode的冗余进程
    JobTracker,TaskTracker:JobTracker负责调度 DataNode上的工作。每个 DataNode有一个TaskTracker,它们执行实际工作。
    JornalNode:能够帮助NameNode之间的数据共享,相当于备份了
    ResourceManager(M/R):资源调度管理
    NodeManager(M/R):监控每个node的资源调度情况并想resourceManager汇报
    

    2.hadoop操作流程解析

    2.1写操作

    2.1.1:create 文件 目录到nameNode(保存元数据的节点)nameNode判断客户端是否有此权限同时此文件没有被创建此被创建成功
    2.1.2:得到文件输出流,客户端将文件信息分成数据块放入data queue中,再告诉nameNode它要开始写入了,namenode给它默认几个datanode信息,第一个数据块先被写到第一个datanode中,写入成功第一个会复制给第二个,第二个会复制给第三个
    2.1.3:数据块写入datanode中时会将数据块放到ack queue中,待写入完成后才会清除,如果写入失败,处理流程如下:
        2.1.3.1:关闭pipeline->将ack queue数据放到data queue开始位置
        2.1.3.2:当前的数据块在已经写入的数据节点中被元数据节点赋予新的标示,则错误节点重启后能够察觉其数据块是过时的,会被删除。
        2.1.3.3:失败的节点会从pipeline中删除,另外的数据块会写入下面两个节点
        2.1.3.4:namenode发现节点不足,会创建一个新的备份节点
    2.1.4:客户端colse stream->通知namenode写入完成
    

    写操作

    2.2读操作:

    2.2.1:客户端open操作打开文件
    2.2.2:从namenode中找到文件的数据块信息,对于每个数据块namenode返回数据节点的位置
    2.2.3:调用stream的read()函数读数据
    2.2.4:找到最近的一个数据块所在数据节点,拿到后关闭连接,找下一个数据块节点
    2.2.5:读完后close掉,在读过程中如果出现错误,则尝试连接下一个数据块所在数据节点
    2.2.6:读的过程中如果出现问题,这个节点下次就不会访问了
    

    读操作

    2.3删除操作

    2.3.1:客户端发起rpc请求到namenode
    2.3.2:namenode收到请求会将操作留到edit文件中,然后将数据从内存中删除,给 客户端返回一个删除成功的标识
    2.3.3:此时客户端觉得文件以及删除,但文件实际上还保存在datanode节点上,待下次节点返回心跳数据时候(节点状态,节点数据),namendoe会检查这个节点数据,发现datanode节点数据在namenode中元数据中没有记录,namenode就会做出响应就会命令datanode删除指定的数据
    

    3.NameNode的管理流程

    3.1:先将操作记录保存到edits文件中,
    3.2:如果保存成功再将操作更新到内存中,目的是保证每个操作都不会丢失
    3.3:当达到触发条件时候再将edits文件更新到fsiamage中
    

    4.SencondNameNode合并流程

    4.1:将edit和fsimage通过网络传导SencondNameNode上
    4.2:会在namenode中此时再生成一个edit.new用来保存接下里的的操作记录
    4.3:拷贝完成后fsimage会将数据保存到sencondNamenode内存中
    4.4:再将edits更新到sencondNameNode内存中,更新完成后将数据写到fsimage.ckpt中
    4.5:通过网络将fsimage.ckpt拷贝到namenode中并重命名为fsimage,且将edit.new重命名为edit
    sencondNameNode只做合并,起到热备的作用,但不一定起到备份的作用,会产生数据的丢失
    

    5.Map/Reduce

    5.1:MapReduce1.0

    5.1.1:运行job
    5.1.2:到jobTracker上请求作业号
    5.1.3:获得HSDF上或者本地提供input文件内容
    5.1.4:提交作业
    5.1.5:初始化作业获得jobID
    5.1.6:job开始执行,先拿到input文件划分,是通过inputForamt接口来实现划分input文件的在runJob时inputFormat会作为参数传入,其中计划获得的划分信息和配置信息会存到jobTracker创建的文件夹中jobID中,有多少个划分文件就有多少个map任务
    5.1.7:jobTracker将获得划分后的文件在特定的TaskTracker上分别执行map操作,其中传入map的数据需是key,value格式,用到了RecordReader,作用就是从inputSlit()读出key-vvalue对
    5.1.8:taskTracker执行自己的map,reduce操作,每隔一段时间就会提交心跳信息(map任务完成的进度等信息)给jobTracker
    5.1.9:Shuffle流程:
        map任务完成后产生的数据(k-v)存在缓冲区中,进行分区,排序,合并,缓冲区默认100m,阈值80%(达到80%就人物已经满了,如果满了,会将数据写到本地磁盘,这个过程称为溢写,写出到磁盘的称为溢写文件,每一个溢写文件都是分区切且排序完成的),交给recude任务前对所有溢写文件合并(merge)(意义是做到整体的分区与排序)
        reduce任务通过http请求访问map任务中分区的数据(fetch过程,默认线程5),然后进行mergr,数据合并(相同键的值放在同一个地方留给迭代器访问)且排序(根据键排序)每个 reduce任务有一些 threads 专门负责从 map主机复制 map 输出(默认是5个),产生另外的key-value作为最终输出写入HFDS
    

    MapReduce1.0

    5.2:MapReduce2.0

    但是并不意味着MapReduce1.0被淘汰,在Yarn中的MRYarnClild模块中基本上是是采用Map
    Reduce1.0的解决思路,MRv2 具有与 MRv1
    相同的编程模型和数据处理引擎,唯一不同的是运行时环境。MRv2 是在 MRv1
    基础上经加工之后,运行于资源管理框架 YARN 之上的计算框架 MapReduce。 它的运行时环境不再由 JobTracker 和 TaskTracker 等服务组成,而是变为通用资源管理
    系统 YARN 和作业控制进程 ApplicationMaster,其中,YARN 负责资源管理和调度,而 ApplicationMaster 仅负责一个作业的管理。简言之,MRv1
    仅是一个独立的离线计算框架, 而 MRv2 则是运行于 YARN 之上的 MapReduce
    

    HBASE 分布式列存数据库

    Zookeeper 分布式协作服务

    解决分布式环境下的数据管理:
    统一命名,状态同步,集群管理,配置同步
    

    HIVE 数据仓库(离线分析)

    HQL用于运行存储在Hadoop上的查询语句,Hive让不熟悉MapReduce开发人员也能编写数据查询语句,然后这
    些语句被翻译为Hadoop上面的MapReduce任务
    

    Pig ad-hoc脚本(离线分析)

    Sqoop 数据ETL/同步工具

    用于传统数据库和Hadoop之前传输数据。数据的导入和导出本质上是
    Mapreduce程序,充分利用了MR的并行化和容错性
    

    Flume 日志收集工具

    个可扩展、适合复杂环境的海量日志收集系统
    

    Mahout 数据挖掘算法库

    经包含了聚类、分类、推荐引擎(协同过滤)和频繁集挖掘等广泛使用的数据挖掘方法
    

    Phoenix hbase sql驱动

    Ambari 安装部署管理工具

  • 相关阅读:
    JavaScript提供了哪些定时器
    谈谈对CSS盒子模型的理解
    我们来谈谈类的加载机制
    谈谈你对ThreadLocal的理解
    谈谈你对线程安全的理解?
    JDK提供的线程池有哪些?实际开发我们该怎么使用?
    Pytest系列(7)
    Pytest系列(6)
    Pytest系列(5)
    Pytest系列(4)
  • 原文地址:https://www.cnblogs.com/xiaoping1993/p/12192620.html
Copyright © 2011-2022 走看看