`
langyu
  • 浏览: 889235 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

HDFS: EditLog的完整性增强

    博客分类:
  • hdfs
阅读更多

  用户对HDFS的每步操作都会先记录到NameNode磁盘中的EditLog文件中。为了避免频繁操作磁盘对用户操作效率的影响,HDFS为EditLog在内存中分配两个buffer:一个用于接收用户操作指令;另外一个在用户想要刷新第一个buffer内数据时开始担当接收用户指令的职责。之后两块buffer不断切换角色,进行着上述操作。



  正是因为有内存中buffer的存在,当管理员shutdown NameNode时,就会丢失用户写入buffer且还没来得及刷新到磁盘中的那些操作记录。我们需要做的就是在NameNode加入shutdown hook,希望当NameNode接收到系统的关闭信号时,能正常刷新buffer中数据到磁盘中。

  如果我们能改动NameNode的代码,那么就可以像这样加入:(HDFS0.21)

// NameNode.java
public static void main(String argv[]) throws Exception {
    try {
      StringUtils.startupShutdownMessage(NameNode.class, argv, LOG);
      final NameNode namenode = createNameNode(argv, null);
      if (namenode != null)
    	  Runtime.getRuntime().addShutdownHook(new Thread() {
    		 public void run() {
    			 namenode.namesystem.close();
    			 LOG.info("Close FSNameSystem successfully");
    		 }
    	  });
        namenode.join();
    } catch (Throwable e) {
      LOG.error(StringUtils.stringifyException(e));
      System.exit(-1);
    }
  }



  如果不能改动代码的话,可以通过HDFS提供的Service plugin来完成。Service plugin是HDFS提供给管理员的access point,我们可以通过这个access point为HDFS提供一些扩展功能。同样地,创建一个关闭EditLog的plugin。

  创建一个EditLogPlugin的类,注意它的包名应该与NameNode在同一包下面,这是因为nameSystem只有在这个包下面才可以访问。

package org.apache.hadoop.hdfs.server.namenode;

import java.io.IOException;
import org.apache.hadoop.util.ServicePlugin;

public class EditLogPlugin implements ServicePlugin {

	public void start(Object arg0) {
		final NameNode nameNode = (NameNode) arg0;
		Runtime.getRuntime().addShutdownHook(new Thread() {
			 public void run() {
    			 nameNode.namesystem.close();
    			 NameNode.LOG.info("Close FSNameSystem successfully");
    		 }
		});
	}

	public void stop() {
	}

	public void close() throws IOException {
	}

}


  打包这个类,然后把它放到Hadoop的lib目录下。在HDFS的配置文件中这样配:

<property>
     <name>dfs.namenode.plugins</name>
     <value>org.apache.hadoop.hdfs.server.namenode.EditLogPlugin</value>
</property>


这样在NameNode启动后shutdown hook就会加入到系统中。

  但需要注意的是,NameNode中的shutdown hook只有在NameNode进程可以正常拦截系统进程的情况下才可以起作用。像SIGKILL(9)这样的系统信号是不能被进程接收、处理的。所以我们对EditLog正常关闭的期望是很局限的,只有尽最大可能地保证管理脚本和管理操作中不要有“kill -9 <pid>”这样的命令。
  • 大小: 14.2 KB
2
0
分享到:
评论

相关推荐

    hbase 启动regionserver日志报错: Wrong FS: hdfs:// .regioninfo, expected: file:///

    NULL 博文链接:https://bnmnba.iteye.com/blog/2322332

    高可用性的HDFS:Hadoop分布式文件系统深度实践

    第1章 HDFS HA及解决方案 1.1 HDFS系统架构 1.2 HA定义 1.3 HDFS HA原因分析及应对措施 1.3.1 可靠性 1.3.2 可维护性 1.4 现有HDFS HA解决方案 1.4.1 Hadoop的元数据备份方案 1.4.2 Hadoop的SecondaryNameNode方案 ...

    HDFS:大规模数据存储与管理的核心组件概述

    HDFS:大规模数据存储与管理的核心组件概述

    webhdfs:Hadoop WebHDFS的Ruby客户端

    webhdfs-Hadoop WebHDFS和HttpFs的客户端库实现,用于Ruby webhdfs gem用于访问Hadoop WebHDFS(EXPERIMENTAL:和HttpFs)。 WebHDFS :: Client是客户端类,而WebHDFS :: FileUtils是类似“ fileutils”的实用程序。...

    Nicholas:HDFS:What is New in Hadoop 2

    该文档来自2013中国大数据技术大会上,Member of the Project Management Committee at Apache Hadoop,Nicholas关于《HDFS: What is New in Hadoop 2》主题的演讲。

    高可用性的HDFS:Hadoop分布式文件系统深度实践

    Hadoop分布式文件系统(HDFS)是云计算和大数据存储领域的核心技术之一,其高可用性(HA)解决方案对于保证系统稳定性和数据可靠性至关重要。本书《高可用性的HDFS: Hadoop分布式文件系统深度实践》专注于深入探讨和...

    EditLog_src

    EditLog是HDFS元数据管理的重要组成部分,它记录了文件系统的更改日志,确保数据的一致性和完整性。下面我们将深入探讨EditLog的相关知识点。 1. **EditLog的定义**: EditLog是HDFS NameNode中的一个组件,它保存...

    hdfs-over-ftp安装包及说明

    这可能是一个软件模块、插件或完整的应用程序,它的主要目标是为不熟悉HDFS命令行接口的用户提供一个熟悉的FTP界面来访问HDFS。 【压缩包子文件的文件名称列表】: 1. "hdfs-over-ftp使用说明.docx":这份文档详细...

    利用javaAPI访问HDFS的文件

    HDFS被设计成适合运行在商用硬件上,因此,容错性是HDFS架构的一个关键特性。 #### 二、配置文件core-site.xml的重要性 为了能够成功地使用Java API与HDFS进行交互,首先需要正确配置`core-site.xml`文件。该文件...

    HDFS scalability:the limits to growth

    ### HDFS可扩展性:增长的极限 #### HDFS与Hadoop Hadoop Distributed File System (HDFS)作为Hadoop项目中的一个核心组件,是一种开放源代码系统,它被广泛应用于处理大规模数据集的场景中。HDFS的设计理念来源于...

    HDFS实例基本操作

    在实际应用中,还需要了解如何优化HDFS的配置以适应不同的存储和性能需求,以及如何管理和维护HDFS的健康状态,以保证数据的安全性和可靠性。通过不断的实践和学习,可以更好地利用HDFS这一强大的大数据存储工具。

    实验二:熟悉常用的HDFS操作.docx.zip

    HDFS是Apache Hadoop项目的核心部分,它设计为可扩展、容错性强的分布式文件系统,尤其适合处理和存储大量数据。本实验旨在帮助用户熟悉HDFS的基本操作,以便于在实际环境中有效地使用HDFS。 【描述】:“实验二:...

    kafka-to-hdfs:将来自 Kafka 主题的消息通过管道传输到 HDFS

    kafka 到 hdfs 将来自主题的消息通过管道传输到 HDFS。 大纲 这比的简单得多,但它可以完成从 Kafka 到 HDFS 的简单加载。 这对于在一段时间内获取 Kafka 主题的实时样本非常有用,以便稍后在其上运行 MapReduce。 ...

    HDFS.zip_Hadoop 平台_hadoop_hdfs

    HDFS为大数据提供高容错性的分布式存储,而MapReduce则用于大规模数据集的并行计算。Hadoop设计的初衷是为了处理和存储PB级别的数据,通过廉价硬件集群实现高可用性和扩展性。 二、HDFS架构 HDFS遵循主从结构,...

    hdfs:HDFS的本机go客户端

    Go的HDFS 这是hdfs的本地golang客户端。 它使用协议缓冲区API直接连接到namenode。 它尝试通过在可能的情况下对stdlib os包进行os.FileInfo来使其成为惯用语言,并从中实现接口,包括os.FileInfo和os.PathError 。...

    HDFS文件系统基本文件命令、编程读写HDFS

    1. 高可靠性:HDFS 能够检测和恢复节点故障,确保数据的安全和可用性。 2. 高性能:HDFS 可以处理大规模数据,支持高效的数据读写操作。 3. 可扩展性:HDFS 可以水平扩展,支持大规模数据存储和管理。 4. 优化搜索...

Global site tag (gtag.js) - Google Analytics