datanode节点是否健康(datanode作用)
本文目录一览:
- 1、Hadoop如何处理?如何增强Hadoop 安全?
- 2、三个datanode 当有一个出现错误会怎么样
- 3、hadoop中节点(DataNode和NameNode)故障的处理
- 4、hadoop 集群已经启动但是web上显示datanode节点没有
- 5、DataNode在HDFS结构中的作用是什么?
- 6、如何 获取 datanode 上 有没有任务在运行
Hadoop如何处理?如何增强Hadoop 安全?
Hadoop是由Apache开源软件基金会开发的,运行于大规模普通服务器上的分布式系统基础架构,用于大规模数据的存储、计算、分析等。通过使用Hadoop平台用户可以在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群的威力进行高速运算和存储。2007年雅虎发布了第一个Apache Hadoop版本0.14.1;2008年雅虎用Hadoop做到全网尺度的搜索;2009年雅虎把内部版本全部开源,于是IBM也加入Hadoop的开发阵营;2010年Facebook宣布正式运行世界最大的Hadoop集群;2011年Apache Hadoop1.0版本发布;2012年Apache Hadoop2.0版本发布。下面具体介绍一下Hadoop系统的架构。
Hadoop由许多元素构成,如下图图所示,包括HBase、Hive、Pig、Chukwa、Oozie和ZooKeeper等,但是其核心组件为HDFS和MapReduce。
HDFS是Hadoop Distributed File System系统的缩写,是一个使用JAVA语言实现的、分布式的、可扩展的文件系统,它存储 Hadoop 集群中所有存储节点上的文件,由NameNode和DataNode两部分组成。HDFS的上一层是 MapReduce 引擎,该引擎由 JobTrackers 和 TaskTrackers 组成,用来对存储在HDFS上的数据进行计算分析。下面来具体介绍HDFS和MapReduce的工作原理及应用。
HDFS
HDFS采用master/slave架构。一个HDFS集群是由一个Namenode和一定数目的Datanodes组成。Namenode是一个中心服务器,负责管理文件系统的名字空间(namespace)以及客户端对文件的访问。集群中的Datanode是集群中的数据节点,用来存储实际的数据,并负责管理它所在节点上的数据存储。HDFS公开了文件系统的名字空间,用户能够以文件的形式在上面存储数据。从内部看,一个文件被分成一个或多个数据块,这些块存储在一组Datanode上。Namenode执行文件系统的名字空间操作,比如打开、关闭、重命名文件或目录。它也负责确定数据块到具体Datanode节点的映射。Datanode负责处理文件系统客户端的读写请求。在Namenode的统一调度下进行数据块的创建、删除和复制,下面就具体来阐述HDFS系统中涉及的基本概念;
数据块(Block) HDFS和传统的分布式文件系统一样,也采用了数据块的概念,将数据分割成固定大小的数据块进行存储,默认大小为64MB,块的大小可针对每个文件配置,由客户端任意指定,并且每个块都有属于自己的全局ID,作为一个独立的单位存储在集群服务器上。与传统分布式文件系统不同的是,如果实际数据没有达到块大小时,则并不实际占用磁盘空间。
HDFS元数据 HDFS元数据由文件系统目录树信息、文件和数据块的对应关系和块的存放位置三个部分组成,文件系统目录树信息包括文件名、目录名及文件和目录的从属关系,文件和目录的大小,创建及最后访问时间。文件和块的对应关系记录了文件由哪些块组成。此外元数据还记录了块的存放位置,包括存放块的机器名和块ID。
NameNode HDFS对元数据和实际数据采取分别存储的方式,元数据存储在一台指定的服务器上,称为NameNode,实际数据则存储在集群中的其他机器上的文件系统中,称为DataNode。NameNode是用来管理文件系统命名空间的组件,并且一个HDFS集群只有一台NameNode,由于元数据存储在NameNode上,当NameNode出现故障时将导致整个集群无法工作。元数据保存在NameNode的内存当中,以便快速查询,1G内存大致可以存放1000000个块对应的元数据信息。
DataNode DataNode用来存储块的实际数据,每个块会在本地文件系统产生两个文件,一个是实际的数据文件,另一个是块的附加信息文件,其中包括数据的校验和生成时间等信息。DataNode通过心跳包(Heartbeat)与NameNode通信,当客户端读取/写入数据的时候将直接与DataNode进行通信。
Secondary NameNode Secondary NameNode在Hadoop集群中起到至关重要的作用,首先需要明确它并不是NameNode的备份节点,它和NameNode运行在不同的主机上,它主要的工作是阶段性地合并NameNode的日志文件,控制NameNode日志文件的大小。此外,在NameNode硬盘损坏的情况下,Secondary NameNode也可用作数据恢复,但恢复的只是部分数据。
HDFS架构及工作原理
下图为HDFS对数据存储的原理图,NameNode存储了DataNode节点所存储数据的元数据,即Hdfs和MapReduce两个文件的分块信息,假设单个文件的存储份数为3,即每个数据块有三份备份,那么数据在DataNode上的存储的原则为:相同的两个数据块存储在同一机架的不同的DataNode节点上;第三个数据块存储在不同机架上的DataNode节点上。这样就解决了当某个DataNode节点出现故障的时候数据丢失的问题,保障了存储在HDFS系统上数据的可用性。
Hadoop MapReduce
MapReduce是Google公司的核心计算模型,它将运行于大规模集群上的复杂的并行计算过程高度地抽象为两个函数:Map和Reduce。MapReduce也可以看成是一种解决问题的方法,它把一个复杂的任务分解成多个任务,Map负责把任务分解成多个任务,Reduce负责把分解后多任务处理的结果汇总起来。
Hadoop中的MapReduce是一个简易的软件框架,基于它写出来的应用程序能够运行在由上千台机器组成的大型集群上,并以一种可靠容错的方式并行处理TB级别的数据集,实现了Hadoop在集群上的数据和任务的并行计算与处理。在并行计算中其他的种种复杂的问题,如分布式存储、工作调度、负载均衡、容错处理、网络通信等均由MapReduce框架负责处理,编程人员可以不用关心。用MapReduce来处理的数据集必须具备这样的特点:待处理的数据集可以分解成许多小的数据集,并且每个小的数据集都可以完全并行地进行处理。
Hadoop MapReduce实现
Hadoop MapReduce是基于HDFS的MapReduce编程框架实现的,我们把MapReduce处理的问题称为作业 (Job),并将作业分解为任务 (Task),在MapReduce执行过程中需要有两种任务。
Map 把输入的键/值对转换成一组中间结果的键/值对.
Reduce 把Map任务产生的一组具有相同键的中间结果根据逻辑转换生成较小的最终结果。
Hadoop MapReduce的服务进程
Hadoop MapReduce有两个主要的服务进程,一个是单独运行在主节点上的JobTracker进程,另一个是运行在每个集群从节点上的TaskTracker进程。服务进程部署如下图所示。
JobTraker和NameNode运行在同一个服务器上,我们称为Hadoop集群的主节点,负责接收客户端提交的作业,并将任务分配到不同的计算节点TaskTracker上,同时监控作业的运行情况,完成作业的更新和容错处理;Tasktracker通常和DataNode装在一起,称为Hadoop集群的从节点,它调用Map和Reduce执行JobTracker指派的任务,并发送心跳消息给JobTracker,向JobTracker汇报可运行任务的数量。
Hadoop安全机制
Hadoop 一直缺乏安全机制,主要表现在以下几个方面。
User to Service:NameNode或者JobTracker缺乏安全认证机制;DataNode缺乏安全授权机制;JobTracker缺乏安全授权机制。
Service to Service安全认证:Datanode与TaskTracker缺乏安全授权机制,这使得用户可以随意启动假的DataNode和TaskTracker。
磁盘或者通信连接没有经过加密。
为了增强Hadoop的安全机制, 从2009年起Apache专门抽出一个团队为Hadoop增加安全认证和授权机制,Apache Hadoop 1.0.0版本之后的版本添加了安全机制,但是升级到该版本后可能会导致Hadoop的一些应用不可用。
三个datanode 当有一个出现错误会怎么样
在HDFS集群中,主要有两类节点,即NameNode和DataNode节点,确切的说,一个NameNode节点,其它的所有DataNode节点。那么,HDFS集群的启动就自然而然的可以看做是一个NameNode节点的启动和所有其它的DataNode节点的启动问题了。在这里我要不得不提的是,NameNode和DataNode有各自不同的启动方式,其中,NameNode的启动方式有:format、regular、upgrade、rollback、finalize、importCheckpoint六种,DataNode的启动方式有:regular、rollback两种。关于NameNode和DataNode的各种启动方式是如何工作的,我在这里不会一一讲解,但我会在以后的博文中来详细的描述。在本文中,我将主要讲解NameNode和DataNode节点最常用的也是最基本的启动方式regular。对了,稍微提一下,NameNode在第一次启动之前,一定要先以format方式启动,然后再才能以其它的方式启动,至于为什么,请感兴趣的盆友查看我前面的博文。同时,我必须要重点重申的是,NameNode节点一定要在其它的任何DataNode节点之前启动,而且,在NameNode节点启动之后,其它的DataNode也不能马上就启动。
OK,让我们先来看看NameNode节点的启动吧!对于NameNode中的属性:
这之中有两个重量级的家伙server和namesystem。Server是RPC服务器端的实现,它主要负责和远程的客户端进行通信,反序列化和序列化远程调用中的参数和返回值,而真正负责执行远程方法的则是NameNode本身。namesystem保存了所有的关于文件的元数据信息,当然还包括操作日志,负责数据的持久化来保证系统的可恢复性,必须的。NameNode启动时会先创建Server,然后再创建FSNamesystem,而在创建FSNamesystem的时候,他会加载所有的元数据信息到内存,这个过程是相当耗费时间的(这就是为什么上面提到的,NameNode节点启动之后,其它的DataNode不能马上就启动的原因)。之后,开启Server远程调用服务。但是,NameNode节点也会马上进入安全模式,等待其它DataNode节点的注册,以及统计其它DataNode节点上报的数据块Block信息。当在一定的时间间隔之内没有DataNode节点的注册和Block报告之后,此时的NameNode节点就认为集群中再也没有其它的DataNode节点了(或者是当前正常的DataNode节点),就会离开安全模式,才开始真正为客户端服务。值得注意的是,处于安全模式状态的NameNode节点是不会为客户端服务的,当有客户端请求服务时,会返回当前NameNode节点正处于安全模式的错误。
现在,我们来谈谈DataNode节点的启动。在上面已经说到,DataNode节点必须要在NameNode节点启动之后的一个恰当时机才能启动,即要等到NameNode节点的Server服务开启之后,DataNode才能启动。对于DataNode主要有DataStorage、DataNodeProtocol、DataXceiverServer、Server四个组件,其中,DataStorage保存数据块信息,DataNodeProtocol负责调用NameNode的服务,DataXceiverServer负责数据的传输(客户端和其它DataNode),Server为客户端和其它DataNode节点服务。关于这四大组件的启动顺序以及是如何工作的,我们还是来看一张图吧:
上图基本描述了NameNode节点和DataNode节点各自的启动过程,同时也反映了整个HDFS集群的启动过程以及其内部节点之间的工作机制。
本文只是从宏观的角度阐述了HDFS集群从启动到正式为Client服务这一段时间内,NameNode和DataNode的工作过程,以后我还会更加深入细致的讨论这其中的细节问题。另外,我还要必须提到的是在HDFS集群中,除了NameNode节点和DataNode节点之外,还有另一类节点:SecondaryNameNode。SecondaryNameNode主要负责对NameNode节点的元数据进行备份。
hadoop中节点(DataNode和NameNode)故障的处理
这部分资料我也懂得不多,我说一些我知道供楼主参考,就当是抛砖引玉了。
相信楼主知道,hadoop的文件系统叫做hdfs,就是hadoop分布式分布式文件系统的中文简写。这个系统是对google的gfs的开源实现。下面来回答问题。
首先是节点故障:
google在他们那篇gfs的论文中说,google在使用gfs曾说过,google在使用gfs时遇到过各种各样的问题,主要有:应用程序bug、操作系统的bug、人为失误,甚至还有硬盘、内存、连接器、网络以及电源失效。在一个大型的系统中,硬盘内存等等组件的老化,过度使用(因为数据读写非常频繁)等问题也是不容忽视的。hadoop的hdfs是需要考虑这些问题的。
然后是备份恢复的处理:
备份恢复因为我没有做过,不过我可以提供给楼主一个方法实验。
楼主可以先搭建一个只有3台datanode的小集群,设置数据备份为2。首先清空已有数据,然后在其中一台datanode上上传数据,默认时,hadoop是会在上传数据的datanode存入一个数据备份的。然后在down掉这台datanode,这样,你就少了一个数据备份,之后,你在另一台机器上读取数据,这时,你可以查看剩下的两台datanode中的dfs文件夹(也就是你存储hdfs数据的文件夹),打开其中block开头的文件看,这时应该就可以看到两台机器都有备份了。(推测)
根据gfs的论文,hadoop应该在数据被再次使用时进行检查,如果发现少了一个备份,会进行数据恢复工作。另一个时间是,机器空闲时会在后台监测数据备份情况。也就是说,数据恢复是自动,这也是hadoop的强大之处嘛。
至于namenode的恢复,没有处理过类似的问题,不过猜想和secondary namenode 有关,应该是将secondary namenode 存储的数据copy到namenode上,或是直接将secondary namenode 变成namenode 。
至于节点问题,down的节点经过恢复后,可以直接链接进入hadoop集群,而不用重新启动集群。命令是
bin/hadoop-daemon.sh start datanode
hadoop 集群已经启动但是web上显示datanode节点没有
1、首先你要确定不用ha的时候你的hadoop集群是正常的,不然找错误的方向就偏离了 2、如果都正常,配置ha 需要zookeeper,先要看看是不是zookeeper没有配置好的问题 3、如果都正常,在hadoop安装目录执行sbin/hadoop-daemon.sh start zkfc
DataNode在HDFS结构中的作用是什么?
智能职涯bigdata-job解释Datanode是文件系统的工作节点,他们根据客户端或者是namenode的调度存储和检索数据,并且定期向namenode发送他们所存储的块(block)的列表。
如何 获取 datanode 上 有没有任务在运行
hadoop运维无外乎,监控整个集群的健康状态,了解磁盘的剩余空间,及时处理死掉的datanode,对磁盘碎片进行处理,以便提高集群的运行效率。当集群中存在运行任务时,需要对任务的参数进行控制,保证整个集群能够正常的高效的完成任务。如果出现异常,需要分析异常,调整参数。一般的hadoop运维都是程序员出生,不然很难弄。你对hadoop一知半解,那整个hadoop集群出现问题,你都不知道从何入手。还有对linux要非常了解,对linux内核进行优化。对JVM虚拟机也要非常了解,知道如何调节堆栈,以及GC垃圾回收。