认识XML:概念、语法、实例(Hadoop读取core-site.xml中数据的机制)

0、简要理解几个基本概念

-----0.0 标记语言是什么?

-----0.1 标准通用标记语言(SGML)

-----0.2 可扩展标记语言(XML):本文主角

1、本文主角:XML(可扩展标记语言)

-----1.0 XML学习-思维导图

-----1.1 XML-语法规范概述

-----1.2 XML-文档声明

-----1.3 XML-注释

-----1.4 XML-元素(/标记/节点)

-----1.5 XML-属性

2、实例hadoop/core-site.xml解析

提出问题:
在搭建Hadoop集群时,第一个配置的文件是:hadoop-2.6.5/etc/hadoop/core-site.xml,添加RPC配置。

[root@master hadoop]# vi /opt/bigdata/hadoop-2.6.5/etc/hadoop/core-site.xml
<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://192.168.11.128:9000</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/opt/bigdata/hadoop-2.6.5/tmp</value>
        </property>
</configuration>

其中,RPC(remote procedure call,远程过程调用)是一种信息传输协议。即一种通过网络从远程计算机程序上请求服务、而不需要了解底层网络技术的协议。

但是:

  • 这个xml后缀文件是什么?是用来干什么的
  • 怎么被hadoop-2.6.5用上的?

本质知其然,知其所以然的精神一探xml。不过在此不会深究,会用、够用即可。

有时候需要具备“黑盒思维”,不是“白盒思维”,知道怎么用它即可。也就是说:只需了解做成某个样子,就有利于计算机、程序来呈现出来。形象类比:不需要每个人都知道人民币在造币厂怎么生产的,我们要知道的是怎么合法、最大化地赚钱。
在这里插入图片描述

0、简要理解几个基本概念

了解这些基本概念,有助于理解xml。

【标记】是指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文档等。如何定义这些标记,既可以选择国际通用的标记语言,比如HTML,也可以使用像XML这样由相关人士自由决定的标记语言,这就是语言的可扩展性。

0.0 what is 标记语言?Markup Language(ML)

现在编辑的CSDN博客的Markdown(有道云笔记等)、Web设计或开发的HTML、XML、XHTML等,都是一种标记语言。与代码有何区别?

  • 从外观、组织上看,它们有规范的标签形式,是一种注释文本的语言,目的是便于计算可以操作标签中的文本。

  • 标记语言,是一种将文本、文本相关的墙体信息结合起来,展现出关于文档结构、数据处理细节的电脑文字编码。不过用标记(标签)对其进行标识,将其与文本本身区别开来。

  • 标记语言,像其他编程语言一样,需要一个运行时环境,使其有用。这个提供运行时环境的元素称为用户代理。

标记语言举例:一段HTML代码

<html>
<head>
  <title>标记语言</title>
</head>
<body>
  <h1 id='id1'>标记语言</h1>
  <p><strong>标记语言</strong> 是一种 <em>语法简单</em> 的标记语言。
  它使用易于理解的格式标记 。
  </p>
  <ul>
  <li>可以使用最简单的文本编辑器编辑。</li>
  <li>所见即所得,非技术控亦可直接阅读源码。</li>
  <li>可版本控制。</li>
  <li>实现单一源文件出版。</li>
  </ul>
</body>
</html>

只要这么写,计算机上的浏览器就能轻易识别,打开后呈现如下:其中的标签<html>、<head>、<body>等等不会呈现在网页上的,而且对于计算机浏览器而言都有固定的含义,知道怎么处理这些标签。
在这里插入图片描述
CSDN的Markdown也可以理解为一种标记语言,只要如下这么写(其中星号、等号等可理解为标签、标记),网页就会呈现想要的效果。
在这里插入图片描述

0.1 标准通用标记语言(SGML)

当规则被编写为 如何编写和使用这些标记时,标记就成为一种语言,并且由外部权限定义,形成标记语言的工作方式,供许多不同的人不同的场合下使用。

不然A这么标记、B那么标记、C这样标记,就乱套了,增加成本。所以,必须用一系列约定好的标记来对电子文档进行标记,以实现对电子文档的语义、结构、格式(样式)的定义。并且,这些标记必须很容易地区分内容(文本本身),易于识别。

于是国际标准化组织(ISO)发布了一个信息管理管理方面的国际标准:标准通用标记语言(Standard Generalized Markup Language,SGML)基本思想是分开文档的内容与样式。

通过其中的修饰词“标准”、“通用”就可以理解其用意了,让地球人都通用,都按这个来写。一个典型的符合SGML的文档可分为3个层次:

  • 1 结构,SGML定义了文档类型定义(DTD),为组织文档的文档元素(如:标题、段落)提供了一个框架、以及为文档元素之间的相互关系指定了规则,确保文档的一致性。
  • 2 内容,信息本身,即在标签(开始标签、结束标签之间)中的内容,如:标题、段落、表格的具体内容。
  • 3 样式,如呈现出现来的字体、颜色、大小等。

这也是SGML的工作原理。

在这里插入图片描述

0.2 可扩展标记语言(XML):本文主角

可扩展标记语言(eXtensible Markup Language,XML),从名字能看出大概了:可扩展、标记、语言。

修饰词:可扩展(extensible)。主要在于XML能够控制无穷无尽的标记,而且控制每个标记的方式也是无穷尽的,即允许用户对于自己的标记语言进行定义的源语言。没有被预定义,需要自定义标签,是W3C的推荐标准。

XML的出现,肯定是为了解决某一个或某一类问题的。举一例:HTML解决了在Web上显示数据,但如果需跨设备、跨平台(安卓、PC、服务器等)之间利用这个文档中的数据(文本本身),HTML是做不到的。XML的诞生是为了完善HTML的缺陷和局限性。

在这里插入图片描述
XML文件的后缀名是.xml,XML的定位是用于传输和存储数据,是为了不同应用、不同平台之间的数据共享和通信;是Internet环境中跨平台的、依赖于内容的技术,是当前处理结构化文档信息的有力工具;是一种简单的数据存储语言,使用一系列简单的标记来描述数据;与操作系统、编程语言无关,就能实现不同系统、不同应用之间的数据交换;独立于硬件、软件的信息传输工具。具体场景有:

  • 可作为一种简单的、小型的数据库,存储、并检索数据;
  • 传输约定格式的文件
  • 作为应用程序的配置文件(即 用于保存程序的配置的文件)【文章开头提到的Hadoop配置文件core-site.xml

XML只是一种标记语言(本质就是个纯文本),不存在将.xml文件转换为可执行的二进制代码直接运行的说法。Java、python、scala等编程语言都能操作.xml文件(有能力处理纯文本的软件都可以处理 XML)。

HTMLXML
作用显示数据传输和存储数据
语法上明显的区别没有右边XML的要求要求嵌套、成对,并遵循DTD的树形结构
空格多个空格只会显示一个输入几个显示几个
与数据库的关系无直接联系与关系型、层状数据库均可对应和转换
大小写敏感性不区分区分
侧重点显示数据、以及如何更好地显示数据,焦点是数据的外观描述数据、以及如何存放数据,焦点是数据的内容

简要说明与XML的闺蜜(不是一个妈妈生的):JSON(Javascript Object Notation,js对象表示法)区别

  • 共同点:作用也是存储、交换文本信息;
  • 区别:
    • JSON比XML更小、更快、更易解析
    • JSON适用于简单的传值;XML适用于更广阔的范围
    • JSON是键值对;XML是树形结构

在这里插入图片描述
数据是一样的,不同的只是数据的格式而已。同样的数据,可以用XML格式传递,用XML解析出来;也可以用JSON格式传递,用JSON解析出来。

XML、JSON,这些只是包装数据的不同的格式而已,重要的是其中的数据,而不是包装的格式。选择一种最适合场景的工具就行。

1、本文主角:XML

文章开头core-site.xml,在Chrome浏览器中打开,显示如下
在这里插入图片描述

在这里插入图片描述
XML的数据结构最大的特征:树形结构。

1.0 XML学习-思维导图

在这里插入图片描述

1.1 XML-语法规范概述

  • 声明语句(文档第一句)
  • 必须有一个根元素
  • 标记的大小写是敏感的
  • 属性值用引号
  • 标记成对
  • 元素正确嵌套
  • 注释的正确使用

1.2 XML-文档声明

对于我刚才没写文档声明的core-site.xml文件,用IE会自动在头部加上这句(Chrome不会):

<?xml version="1.0"?>

文档声明语句不是必需的。完整的文档声明如下:在XML文档的第一行

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>

version –文档符合XML1.0规范
encoding –文档字符编码,比如”GB2312”或者”UTF-8”
standalone –文档定义是否独立使用。standalone=”no”为默认值。yes代表是独立使用,而no代表不是独立使用

1.3 XML-注释

<!--这是一个注释-->

1、注释内容不要出现- -
2、不要把注释放在标记中间;
3、注释不能嵌套
4、可以在除标记以外的任何地方放注释

可以横跨多行,如下:

<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0
-->

1.4 XML-元素(/标记/节点)

每个XML文档必须有且只有一个根元素。

  • 是一个完全包括文档中其他所有元素的元素
  • 根元素的起始标记要放在所有其他元素的起始标记之前
  • 跟元素的结束标记要放在所有其他元素的结束标记之后

XML元素 就是指XML文件中的标签,一个标签包含:开始标签、结束标签。

<a>http://www.baidu.com/</a>

XML元素命名规范

  • 可以含字母、数字以及其他的字符
  • 不能以数字或者标点符号开始
  • 不能以字符 “xml”(或者 XML、Xml)开始
  • 不能包含空格
  • 不能用保留字
  • 最佳命名习惯:使名称具有描述性,见名知意
    • 简洁
    • 避免“-”字符连接,如first-name
    • 避免“.”字符连接,如first.name
    • 避免“:”字符,冒号会被转换为命名空间来使用

XML 元素是可扩展的
也就是说,可以经常在不中断应用程序的情况下进行扩展,比如:临时向原xml文档增加几个元素,而不必中断应用程序。

一个标签中也可以嵌套若干子标签。但所有标签必须合理地嵌套,绝对不允许交叉嵌套。下方是错误的:
<a>welcome to <b> www.baidu.com </a></b>

对于XML标签中出现的所有空格和换行,XML解析程序都会当做标签内容进行处理。

1.5 XML-属性

XML元素可以在开始标签中包含属性(Attribute),用于提供关于原始的额外(附加)信息。

<person id="1000">
	<name>lijiacheng</name>
</person>
  • 属性值用双引号或单引号包裹。如果属性值中有单引号,则用双引号包裹;如果有双引号,则用单引号包裹;如果同时有单、双引号,则用实体(转义字符),XML有5个预定义的转义字符:
实体符号表示描述
&lt;<小于
&gt;>大于
&amp;&
&apos;单引号
&quot;"双引号
  • 一个元素可以有多个属性,基本格式为:
    <元素名 属性名1="属性值1" 属性名2="属性值2">

  • 特定的属性名称在同一个元素标记中只能出现一次

什么时候用属性?什么时候用元素?元数据(有关数据的数据)应当存储为【属性】,而数据本身应当存储为【元素】。

不过,在XML中,使用【属性】注意事项:

  • 属性无法包含多重的值(元素可以)
  • 属性无法描述树结构(元素可以)
  • 属性不易扩展(为未来的变化)
  • 属性难以阅读和维护

2、回到实例hadoop/core-site.xml

<configuration>
        <property>
        	<!-- 默认文件系统的名称。-->
        	<!-- 通常指定namenode的URI地址,包括主机和端口。 -->
                <name>fs.defaultFS</name>
                <value>hdfs://192.168.11.128:9000</value>
        </property>
        <property>
        	<!-- 其它临时目录的父目录,会被其它临时目录用到。-->
                <name>hadoop.tmp.dir</name>
                <value>file:/opt/bigdata/hadoop-2.6.5/tmp</value>
        </property>
</configuration>

通过分析Hadoop源码(一般工程路径是:/hadoop-2.6.5/blob/master/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java),start-all.sh脚本启动Hadoop集群的过程中:

  • 1 创建一个Configuration类的实例:Configuration conf = new Configuration();
  • 2 用addDefaultResource("core-site.xml")方法从指定路径(CLASSPATH)加载到core-site.xml文件
  • 3 用get?()读取core-site.xml文件中配置的数据,用于启动hadoop时生效。

通过上述步骤就xml文件产生了它应有的作用!
在这里插入图片描述

参考大佬博客:
hadoop配置文件加载机制
hadoop配置文件加载顺序:分析的很6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值