五:Hadoop之HDFS基础概念

原创
2016/04/30 16:13
阅读数 190

一:简单了解Hadoop:

            Hadoop的框架最核心的设计就是:HDFS(Hadoop Distributed File System) 和 MapReduce。

           HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。

二:HDFS体系结构:

            HDFS 是一个主/从(Master/Slave)体系结构,可以通过目录路径对文件执行CRUD操。但由于分布式存储的性质,HDFS集群拥有一个NameNode 和 一些DataNodes。NameNode管理文件系统的元数据,DataNode存储实际的数据。客户端通过同NameNode和DataNodes的交互访问文件系统。客户端联系NameNode以获取文件的源数据,而真正的文件I/O操作是直接和DataNode进行交互的。

            NameNode也就是主控制服务器负责管理文件系统的命名空间,记录文件数据块咋每个DataNode上的位置和副本信息,协调客户端对文件的访问,以及记录命名空间内的改动或命名空间本身属性的改动。

            DataNode负责他们所在物理节点上的存储管理。HDFS开放的文件系统的命名空间以便让用户以文件的形式存储数据。HDFS的数据都是“一次写入,多次读取”,而其文件通常是按照128MB被企鹅人称不同的数据块(Block),每个数据块尽可能地分散存储于不同的DataNode中。

            NameNode执行文件系统的命名空间操作,比如打开、关闭、重命名文件或目录等,还决定数据块到DataNode的映射。DataNode负责处理客户的读写请求,依照NameNode的命令,执行数据的创建,复制等工作。

            eg:客户端要访问一个文件,首先,客户端从NameNode中获得组成该文件的数据块位置列表,即知道数据块被存储在哪些DataNode上,然后,客户端直接从DataNode上读取文件数据。此过程中,NameNode不参与文件的传输。

            

            

        

        一个集群只有一个NameNode,集群中的其他机器各运行一个DataNode,也可以在运行NameNode的机器上同时运行DataNode,或者一台机器上运行多个DataNode。

            NameNode使用事务日志(EditLog)记录HDFS元数据的变化,是用映像文件FsImage存储文件系统的命名空间,包含文件的映射及属性等。事务日志和映像文件都存储在NameNode的本地文件系统中。NameNode启动时候,从磁盘中读取映像文件和事务日志,把事务日志的事务都应用到内存中的映像文件上,然后将新的元数据刷新到本地磁盘的新的映像文件上中,这样可以截去旧的事务日志。该过程又称为检查点(Checkpoint)。

            SecondaryNameNode辅助NameNode处理映像文件和事务日志。NameNode启动的时候合并映像文件和事务日志,而SecondaryNameNode会周期地从NameNode上复制映像文件和事务日志到临时目录,合并生成新的映像文件后在重新上传到NameNode,NameNode更新映像文件并清理事务日志,使得事务日志大小可控。

            

        ***********************************************************************************************************  

1.    NameNode

           NameNode 是 HDFS的守护程序,负责记录文件是如何分割成数据块的,以及这些数据块分别被存储到哪些数据节点上。它的主要功能是对内存及I/O进行集中处理。

            由于NameNode是Hadoop集群中的一个单点,一旦NameNode服务器宕机,整个系统无法运行。

            NameNode存储的是元数据

2.    DataNode

            集群中的每个从服务器都运行一个DataNode后台程序,这个后台程序负责把HDFS数据块读写到本地的文件系统。当需要通过客户端读/写某个数据时,先由NameNode告诉客户端去哪个DataNode进行具体的读/写操作,然后,客户端直接与这个DataaNode服务器上的后台程序进行通信,并且通过对相关的数据块进行读/写操作。

        DataNode 存储的是实际数据。

3.    SecondaryNameNode

            SecondaryNameNode是一个用来监控HDFS状态的辅助后台程序。就像NameNode一样,每个集群都有一个SecondaryNameNode,并且部署在一台单独的服务器上,而SecondaryNameNode不同于NameNode,它不接收或记录任何实时的数据变化,但是,它会与NameNode进行通信,以便定期的保存HDFS元数据的快照。由于NameNode是单点的,通过SecondaryNameNode的快照功能,可以将NameNode的宕机时间和数据损失降低到最小。同时NameNode发生损坏,SecondaryNameNode可以及时地作为备用NameNode使用。

            SecondaryNameNode 最重要的任务并不是为NameNode 元数据进行热备份,而是定期合并f s i m a g e 和e d i t s 日志,并传输给NameNode 。这里需要注意的是,为了减小NameNode压力,NameNode 自己并不会合并fsimage 和edits ,并将文件存储到磁盘上,而是交由SecondaryNameNode 完成。 


4.    ResourceManager

            ResourceManager主要由以下几个部分组成:

            用户交互

                YARN分别针对普通用户,管理员和Web提供了三种对外服务,分别对应ClientRMService、AdminService和WebApp:

            ClientRMService

                ClientRMService是为普通用户提供的服务,它会处理来自客户端各种RPC请求,比如提交应用程序、终止应用程序,获取应用程序运行状态等。

            AdminService

                YARN为管理员提供了一套独立的服务接口,以防止大量的普通用户请求使管理员发送的管理命令饿死,管理员可通过这些接口管理集群,比如动态更新节点列表,更新ACL列表,更新队列信息等。

            WebApp

为了更加友好地展示集群资源使用情况和应用程序运行状态等信息,YARN对外提供了一个Web 界面


5.    NodeManager(NM管理)

            NMLivelinessMonitor

                监控NM是否活着,如果一个NodeManager在一定时间(默认为10min)内未汇报心跳信息,则认为它死掉了,会将其从集群中移除。

            NodesListManager

                维护正常节点和异常节点列表,管理exlude(类似于黑名单)和inlude(类似于白名单)节点列表,这两个列表均是在配置文件中设置的,可以动态加载。

            ResourceTrackerService

                处理来自NodeManager的请求,主要包括两种请求:注册和心跳,其中,注册是NodeManager启动时发生的行为,请求包中包含节点ID,可用的资源上限等信息,而心跳是周期性 行为,包含各个Container运行状态,运行的Application列表、节点健康状况(可通过一个脚本设置),而ResourceTrackerService则为NM返回待释放的Container列表、Application列表等。


6.     Application管理

ApplicationACLsManager

管理应用程序访问权限,包含两部分权限:查看和修改,查看主要指查看应用程序基本信息,而修改则主要是修改应用程序优先级、杀死应用程序等。

RMAppManager

管理应用程序的启动和关闭。

ContainerAllocationExpirer

YARN不允许AM获得Container后长时间不对其使用,因为这会降低整个集群的利用率。当AM收到RM新分配的一个Container后,必须在一定的时间(默认为10min)内在对应的NM上启动该Container, 否则,RM会回收该Container。


安全管理

ResourceManage自带了非常全面的权限管理机制,主要由ClientToAMSecretManager、ContainerTokenSecretManager、ApplicationTokenSecretManager等模块完成。


资源分配

ResourceScheduler

ResourceScheduler是资源调度器,它按照一定的约束条件(比如队列容量限制等)将集群中的资源分配给各个应用程序。ResourceScheduler是一个插拔式模块,默认是FIFO实现,YARN还提供了Fair Scheduler和Capacity Scheduler两个多租户调度器。


展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
1
分享
返回顶部
顶部