• Hadoop的核心组件和生态圈


    摘要:Hadoop是一个由Apache基金会所开发的分布式系统基础架构。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算.

    1.hadoop核心组件—HDFS

    ■  HDFS的文件被分成块进行存储,块的默认大小128M,块是文件存储处理的逻辑单元

    ■  HDFS中有两类节点NameNode和DataNode:

      NameNode是管理节点,存放文件元数据:(1)文件与数据块的映射表(2)数据块与数据节点的映射表。
      DataNode是工作节点,存放数据块
      SecondaryNameNode的职责是合并NameNode的edit logs到fsimage文件中
      NameNode与DataNode有心跳检测,DataNode定期向NameNode发送心跳消息;SecondaryNameNode定期同步元数据映像文件和修改日志。

          客户端从hdfs读取文件时的元数据访问流程,如下图:

         

            客户端向hdfs中上传文件时的元数据访问流程,如下图:

           

              SecondaryNameNode同步元数据映像文件和修改日志,如下图:

          

      上面的这张图片展示了NameNode怎么把元数据保存到磁盘上的。这里有两个不同的文件:

      1.fsimage - 它是在NameNode启动时对整个文件系统的快照
      2.edit logs - 它是在NameNode启动后,对文件系统的改动序列

    ■  HDFS中数据管理与容错:对于最常见的 3 个复制块,分布在两个机架内的三个节点。第一个复制块存储在同一机架的不同节点上,最后一个复制块存储在不同机架的某个节点上。       

    ■  HDFS的特点:

      数据冗余,硬件容错
      流式的数据访问(一次写入,多次读取,修改是删除之前块,写新块)
      存储大文件

    ■  HDFS的适用性和局限性:

      适合数据批量读写,吞吐量高
      不适合交互式应用,低延迟很难满足
      适合一次写入多次读取,顺序读写
      不支持多用户并发写相同文件

    ■  HDFS实现思想和概念

         

    ■  HDFS简单使用:

    hadoop fs -mkdir filetest #建立filetest文件夹
    hadoop fs -ls #显示HDFS文件列表
    hadoop fs -put hello.java filetest/ #将hello.java文件put到filetest目录下
    hadoop fs -ls /user/hadoop/filetest #显示filetest目录下的文件
    hadoop fs -cat filetest/hello.java #输出filetest目录下hello.java文件内容
    hadoop fs -get filetest/hello.java hello2.java #将filetest目录下的hello.java获取到本地,命名为hello2.java
    hadoop fs -rmr filetest # 删除filetest文件夹
    
    hadoop dfsadmin -report #打印文件系统的信息

    2.hadoop核心组件——MapReduce

    ■  MapReduce思想:分而治之,一个大任务分成多个小的子任务(map),并行执行后,合并结果(reduce)。Job,一个作业,被拆分成多个Task(MapTask、ReduceTask)

        MapReduce只是分布式运算框架的一种实现,类似的框架还有很多,比如Storm(流式计算)、Spark(内存迭代计算)。MapReduce是离线批量计算,Storm、Spark是实时计算。

    ■  在hadoop1.x中, MapReduce引擎由JobTrackers和TaskTrackers组成       

         JobTracker承担的任务有:接受任务、计算资源、分配资源、与DataNode进行交流 。
         TaskTracker承担的任务有:从JobTracker接收并执行各种命令:运行任务、提交任务、杀死任务等;另一方面,将本地节点上各个任务的状态通过心跳周期性汇报给   JobTracker,这些信息包括两部分:机器级别信息(节点健康情况、资源使用情况等)、任务级别信息(任务执行进度、任务运行状态等)。
         TaskTracker与JobTracker和Task之间采用了RPC协议进行通信

    ■  在hadoop2.x中, MapReduce引擎由ResourceManager和NodeManaer组成. 这就是Yarn资源调度框架。 Yarn的基本思想是拆分资源管理的功能,作业调度/监控到单独的守护进程。

        ResourceManager是全局的,负责对于系统中的所有资源有最高的支配权。ResourceManager有两个组件:调度器和应用程序管理器。
        ApplicationMaster 每一个job有一个ApplicationMaster 。AppMaster负责向ResourceManager索要NodeManager执行任务所需要的资源容器,更具体来讲是ApplicationMaster负责从Scheduler申请资源,以及跟踪这些资源的使用情况以及任务进度的监控
        NodeManager是基本的计算框架。NodeManager 是客户端框架负责 containers, 监控他们的资源使用 (cpu, 内存, 磁盘, 网络) 和上报给 ResourceManager/Scheduler.

        为何要使用yarn?我们看到JobTracker的功能被分散到各个进程中包括ResourceManager和NodeManager:比如监控功能,分给了NodeManager,和Application Master。ResourceManager里面又分为了两个组件:调度器及应用程序管理器。Yarn重构后,JobTracker的功能,被分散到了各个进程中。同时由于这些进程可以被单独部署所以这样就大大减轻了单点故障,及压力。如下图,展示了yarn的工作流程及与hadoop1.x的区别:

       

    3.hadoop生态圈

    ■  Hive:数据仓库与hql操作mr

    ■  pig:数据流语言,是hadoop轻量级封装,相对于它,hive是重量级

    ■  HBase: 基于列存储的nosql数据库,可以用于海量数据存储和实时查询

    ■  Sqoop:在数据库和HDFS之间高效传输数据的工具

    ■  Storm: 分布式实时计算,强调实时性,常用于实时性要求较高的地方

    ■  Spark:基于map reduce算法实现的分布式计算框架

        拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map reduce的算法

  • 相关阅读:
    重写方法,重载方法,虚方法和抽象方法的使用
    基类和派生类
    C#修饰符讲解大全
    通过HTTP请求WEBAPI的方式
    计算机各种协议讲解
    时间戳
    SQL Server知识详解
    基本概念和术语
    22.C++- 继承与组合,protected访问级别
    22.QT-QXmlStreamReader解析,QXmlStreamWriter写入
  • 原文地址:https://www.cnblogs.com/wonglu/p/5371060.html
Copyright © 2020-2023  润新知