`
zy19982004
  • 浏览: 662072 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
F6f66edc-1c1a-3859-b76b-a22e740b7aa7
Hadoop学习
浏览量:252008
社区版块
存档分类
最新评论

Hadoop学习七:Hadoop-Hdfs源码 conf包

 
阅读更多

一.conf包下四个类

 

二.详细描述

  1.  Configurable接口:Something that may be configured with a {@link Configuration}.,很绕口,简单理解为Hdfs系统配置文件的接口。
  2. Configured:Base class for things that may be configured with a {@link Configuration},Hdfs系统配置文件的抽象类。持有Configuration对象的应用。
  3. Configured:配置文件资源管理类。用DOM解析xml配置文件;默认加载资源core-default.xml,core-site.xml;只有在get(key)时才去加载资源文件。
  4. ConfServlet:A servlet to print out the running configuration data。
      @Override
      public void doGet(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
        String format = request.getParameter("format");
        if (null == format) {
          format = "xml";
        }
    
        if ("xml".equals(format)) {
          response.setContentType("text/xml; charset=utf-8");
        } else if ("json".equals(format)) {
          response.setContentType("application/json; charset=utf-8");
        }
    
        Writer out = response.getWriter();
        try {
          out.write(getServletContext().getAttribute("hadoop.conf");)
        } catch (BadFormatException bfe) {
          response.sendError(HttpServletResponse.SC_BAD_REQUEST, bfe.getMessage());
        }
        out.close();
      }

 

三.Configuration代码 

//1.静态代码块,把默认资源放到CopyOnWriteArrayList<String> defaultResources里。
 static{
    //print deprecation warning if hadoop-site.xml is found in classpath
    ClassLoader cL = Thread.currentThread().getContextClassLoader();
    if (cL == null) {
      cL = Configuration.class.getClassLoader();
    }
    if(cL.getResource("hadoop-site.xml")!=null) {
      LOG.warn("DEPRECATED: hadoop-site.xml found in the classpath. " +
          "Usage of hadoop-site.xml is deprecated. Instead use core-site.xml, "
          + "mapred-site.xml and hdfs-site.xml to override properties of " +
          "core-default.xml, mapred-default.xml and hdfs-default.xml " +
          "respectively");
    }
    addDefaultResource("core-default.xml");
    addDefaultResource("core-site.xml");
  }

public static synchronized void addDefaultResource(String name) {
    if(!defaultResources.contains(name)) {
      defaultResources.add(name);
      for(Configuration conf : REGISTRY.keySet()) {
        if(conf.loadDefaults) {
          conf.reloadConfiguration();
        }
      }
    }
  }

//2.初始化代码块,把该实例放入WeakHashMap<Configuration,Object>里。
public Configuration(boolean loadDefaults) {
    this.loadDefaults = loadDefaults;
    updatingResource = new HashMap<String, String>();
    synchronized(Configuration.class) {
      REGISTRY.put(this, null);
    }
  }

//3.第一次get(key)时,才开始解析资源,保存到Properties properties里。
public String get(String name) {
    return substituteVars(getProps().getProperty(name));
  }

private synchronized Properties getProps() {
    if (properties == null) {
      properties = new Properties(); //这个时候才初始化properties
      loadResources(properties, resources, quietmode);
      if (overlay!= null) {
        properties.putAll(overlay);
        for (Map.Entry<Object,Object> item: overlay.entrySet()) {
          updatingResource.put((String) item.getKey(), UNKNOWN_RESOURCE);
        }
      }
    }
    return properties;
  }

private void loadResource(Properties properties, Object name, boolean quiet) {
  //DOM解析资源,保存到properties里。
  //需要注意的时,解析的是代码运行环境下的core-default.xml,core-site.xml。
}

 

四.Configuration使用例子 

 

Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI, conf);
  1.  第一段代码:按照三里的12步先静态代码块,再初始化。
  2. 第二段代码,创建FileSystem时,会调用conf.getBoolean(key)方法获取所需参数,此时第一次加载资源,后续还会调用conf.get(key),直接从properties取就行了。
  3. 若上述两段代码在eclipse运行,必须在eclipse classpath下配置core-default.xml,core-site.xml。
分享到:
评论
1 楼 chen030112 2014-04-13  
很喜欢博主的文章,刚刚用豆约翰博客备份专家备份了您的全部博文。

相关推荐

    hadoop插件apache-hadoop-3.1.0-winutils-master.zip

    `winutils.exe`是这个工具包的关键组件,它是Hadoop在Windows上的一个命令行工具,用于执行如设置环境变量、管理HDFS文件系统等任务。 在安装和配置Hadoop 3.1.0 for Windows时,以下是一些关键步骤和知识点: 1. ...

    hadoop-3.3.1 windows + apache-hadoop-3.1.0-winutils-master.zip

    3. **配置Hadoop**:在Hadoop的conf目录下,编辑`core-site.xml`,设置HDFS的默认FS(如`fs.defaultFS`为`hdfs://localhost:9000`),以及临时目录(如`hadoop.tmp.dir`为`C:\Hadoop\tmp`)。然后编辑`hdfs-site.xml...

    ansible-hdfs:用于安装 Cloudera HDFS 的 Ansible 角色

    角色变量hdfs_version - HDFS 版本hdfs_cloudera_distribution - Cloudera 发行版(默认: cdh5.4 ) hdfs_conf_dir - HDFS 的配置目录(默认: /etc/hadoop/conf ) hdfs_namenode - 确定节点是否为 HDFS NameNode ...

    hadoop-common-2.6.0-bin-master.zip

    Hadoop是大数据处理领域的一个关键框架,...通过正确安装、配置和使用这个压缩包中的组件,开发者可以在没有Linux环境的情况下,也能顺利地进行Hadoop相关的工作,这对于学习和理解Hadoop的分布式计算原理非常有帮助。

    hadoop-common-2.2.0-bin-master(包含windows端开发Hadoop2.2需要的winutils.exe)

    Hadoop是Apache软件基金会开发的一个开源分布式计算框架,它的核心组件包括HDFS(Hadoop Distributed File System)和MapReduce。这个压缩包“hadoop-common-2.2.0-bin-master”是Hadoop 2.2.0版本的公共库二进制...

    java操作Hadoop源码之HDFS Java API操作-上传文件

    在Java编程环境中,Hadoop分布式文件系统(HDFS)提供了丰富的Java API,使得开发者能够方便地与HDFS进行交互,包括文件的上传、下载、读写等操作。本篇文章将详细探讨如何使用HDFS Java API来实现文件上传的功能。 ...

    hadoop-2.7.2/4-ha-conf

    标题中的"hadoop-2.7.2/4-ha-conf"指的是Hadoop分布式文件系统(HDFS)在高可用性(HA)模式下的配置文件,适用于Hadoop的2.7.2和2.7.4两个版本。HA是Hadoop为了确保在主NameNode故障时能无缝切换到备用NameNode,...

    hadoop-core-0.20.2 源码 hadoop-2.5.1-src.tar.gz 源码 hadoop 源码

    Hadoop是Apache软件基金会开发的一个开源分布式计算框架,它的核心组件包括HDFS(Hadoop Distributed File System)和MapReduce。这两个部分是Hadoop的核心基石,为大数据处理提供了基础架构。这里我们将深入探讨...

    Hadoop-2.2.0源码包

    Hadoop-2.2.0源码包是一个关键资源,对于深入理解Hadoop框架的运行机制、...总之,Hadoop-2.2.0源码包是学习和开发Hadoop的宝贵资源,它揭示了分布式计算的复杂性和效率,有助于提升开发者在大数据处理领域的专业技能。

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

    实验二:“熟悉常用的HDFS操作”旨在帮助学习者深入理解Hadoop分布式文件系统(HDFS)在大数据处理中的核心地位,以及如何通过Shell命令和Java API进行高效操作。HDFS在Hadoop架构中扮演着存储大数据的核心角色,为...

    hadoop-2.7.7.zip(windows 用)

    4. **配置HDFS**: 编辑"Hadoop安装目录"\conf\hdfs-site.xml,设置`dfs.replication`为1,因为在本地单节点模式下,不需要数据复制。 5. **配置MapReduce**: 修改"Hadoop安装目录"\conf\mapred-site.xml,设置`...

    apache-hadoop-3.1.0-winutils-master本地开发调试.zip

    9. **Spark集成**:如果你打算在Hadoop上运行Spark,确保Spark配置中指定了正确的Hadoop版本,并将`SPARK_HOME`和`HADOOP_CONF_DIR`环境变量设置好,以便Spark能够找到Hadoop的配置。 完成上述步骤后,你就可以在...

    spark-3.1.2.tgz & spark-3.1.2-bin-hadoop2.7.tgz.rar

    Hadoop是另一个开源的大数据处理框架,主要负责数据存储(HDFS)和作业调度(YARN)。Spark可以与Hadoop生态系统无缝集成,利用HDFS作为数据源,并且可以在YARN上运行。 4. 压缩包内容: - spark-3.1.2.tgz:这是...

    hadoop之hdfs中所依赖jar

    1. `hadoop-client.jar`:这个JAR包是Hadoop客户端的集合,包含了HDFS和其他Hadoop服务的客户端接口,如MapReduce。它允许应用程序与Hadoop集群通信,执行基本的HDFS操作。 2. `hadoop-hdfs.jar`:这个JAR包包含了...

    hadoop-common-2.7.5-bin-master

    3. `conf`目录:存放配置文件,如`core-site.xml`、`hdfs-site.xml`等,用于设置Hadoop集群的参数。 4. `sbin`目录:包含系统级别的脚本,如用于初始化或管理Hadoop集群的脚本。 5. `share`目录:通常包含文档、示例...

    Flume-HDFS-驱动-jar包

    Flume 是一个分布式、可靠且可用于有效收集、聚合和移动大量日志数据的系统,而 HDFS(Hadoop Distributed File System)是 Apache Hadoop 项目的核心部分,提供了一个高容错性的分布式文件系统,能够处理PB级别的...

    利用ansible 自动 安装Hadoop 集群

    template: src=hdfs-site.xml.j2 dest={{ hadoop_home }}/conf/hdfs-site.xml - name: Format HDFS command: {{ hadoop_home }}/bin/hdfs namenode -format - name: Start Hadoop services service: name={{ ...

    hadoop-2.6.0-bin-master-PC端远程调用HDFS

    此外,Hadoop的配置文件(如`core-site.xml`和`hdfs-site.xml`)位于解压后的`hadoop-2.6.0/conf`目录下,你需要根据实际的集群配置来修改这些文件,以设置HDFS的地址、端口等参数。确保这些配置正确无误,才能成功...

    hadoop3.2.1编译

    - **配置**:在Spark的配置文件中,如`spark-defaults.conf`,设置Hadoop的相关参数,如`fs.defaultFS`指向HDFS的地址。 总结,编译Hadoop 3.2.1是一项重要的工作,特别是对于那些希望自定义配置或在特定环境下...

Global site tag (gtag.js) - Google Analytics