ITPub博客

首页 > 大数据 > Hadoop > RedHat linux下安装hadoop 0.20.2, 并在windows下远程连接此hadoop,开发调试

RedHat linux下安装hadoop 0.20.2, 并在windows下远程连接此hadoop,开发调试

Hadoop 作者:surfman 时间:2012-03-24 21:32:31 0 删除 编辑

程中,WINS客户端总是先尝试通过主WINS服务器更新,再尝试通过辅助WINS服务器更新,直到TTL到期或WINS客户成功更新了其名字时才结束。

  ◆如果WINS客户端在TTL到期时仍未能成功更新,将释放该NetBIOS名称。

  3、名称释放

  当WINS客户端正常关机时,它将以单播方式向WINS服务器发送名称释放请求,将其注册的NetBIOS名称从WINS服务器的数据库中删除。当WINS服务器收到名称释放请求时,它将检查WINS数据库以寻找要释放的名称。如果发现匹配的NetBIOS名称和IP地址,则WINS服务器向客户端发送肯定名称释放响应消息,并将数据库中该名称置为"未激活"。

  如果WINS服务器遇到数据库错误,或者NetBIOS名称所对应的IP地址不匹配,则WINS服务器将向WINS客户端发送否定名称释放响应消息。

  4、名称查询和名称解析 当WINS客户需要通过NetBIOS名称与其他主机进行通信时,需要查询与该主机NetBIOS名称对应的IP地址。查询方式由NetBIOS节点类型来决定。如果使用WINS客户端默认的节点类型(H-节点),则将首先检查NetBIOS名称缓存,然后直接以单播方式向主WINS服务器发送名称查询请求。如果主WINS服务器没有响应,客户端将重新发送两次。如果主WINS服务器仍没有响应,则WINS客户端将转向辅助WINS服务器。

  如果WINS服务器能够正常解析客户端请求的NetBIOS名称,将向请求的客户端发送名称查询响应消息,其中带有与请求的NetBIOS名称相对应的IP地址。

  如果WINS服务器不能解析名称,将向客户端发送请求名称不存在的查询响应消息,并实现广播解析该名称。

  如果在一台主机上指定了WINS服务器的IP地址,它就成了WINS客户端。可以通过手工方式来配置WINS客户端,也可以通过DHCP自动配置WINS客户端(要求WINS客户端是DHCP客户端)。

  这里再给大家介绍一下一个便于我们管理服务器的工具:MMC

  MMC是 系统管理程序的一个框架程序,全称是Microsoft Management Console,它提供给扩展名为msc的管理程序一个运行的平台,比如组策略,系统清单, 任务管理器等。

  1、以下只是让大家知道有这么个工具用就行了,我们在这个社会,对于初学者最基本的第一原则是:务实(先别吹太多);因此就让大家下截图:

  

  

  

  

  

  

  

  

  

  

  

  2、下面正式开始学习WINS:

  (1)大家第一次在服务器上安装好了WINS服务,可以自己看下相关服务都有些什么东西;

  

  

  (2)配置WINS客户端:

  如果在一台主机上指定了WINS服务器的IP地址,它就成了WINS客户端。可以通过手工方式来配置WINS客户端,也可以通过DHCP自动配置WINS客户端(要求WINS客户端是DHCP客户端):

  

  

  (3)指定WINS客户端后,便可回到Server1服务器对WINS服务的"活动注册"项进行"刷新"查看新注册的客户端相关信息:

  

  

  (4)对于某些不是WINS客户的计算机(如Linux计算机或没指定WINS服务器IP的Windows客户机),我们可以在服务器上通过"静态映射"来指定其相应的相关WINS信息,使其它WINS客户机可以通过WINS服务器与之通信。

  因此下面新建了一条静态映射,这是我随便输入的,大家了解下就行:

  

  

  

  

  (5)下面介绍WINS 下服务器的"复制伙伴":

  为了避免在网络中单台WINS服务器发生故障时导致无法提供服务的危险,在网络中最好设置两台(或以上)WINS服务器(主WINS服务器、辅助WINS服务器),这两台服务器的数据库互为备份,也就是相互复制数据库,以保持两台服务器上的数据库中的数据是相同的,提高了可靠性和容错性。

  WINS数据库的复制采用的是一种增量型的复制,即在复制过程中只复制数据库中变化的记录,并不是复制整个数据库。

  在进行数据库复制之前,首先用户要设置WINS服务器之间的关系,从而确定那些服务器之间可以进行数据库复制,也就是设置WINS服务器的"复制伙伴"。一个WINS服务器可以有以下两种复制伙伴:

  接收伙伴(PullPartner):

  接收伙伴是一台WINS服务器,它接收由其发送伙伴所发送来的在一定时间间隔内数据库的更新数据。这是通过接收伙伴要求复制的数据的版本ID比现有的数据的版本ID更高来实现的。可以通过以下三种方式通知发送伙伴将数据复制过来:

  ◆当WINS服务器启动的时候

  ◆达到管理员设定的复制时间(Replicationinterval)

  ◆由管理员执行立即复制的操作

  发送伙伴(PushPartner):

  它会将其数据库中喜爱一定时间间隔内变化的时间发送给其接收伙伴。可以通过以下四种方式将时间发送给接收伙伴:

  ◆当WINS服务器启动的时候

  ◆数据库中IP地址与名称映射中的IP地址发生改变的时候

  ◆当数据库中的记录变化数达到所设置的更新计数(Updatecount)值的时候

  ◆由管理员执行立即复制的操作

  下面大家看图了解下就行:
  (6)下面到Server2上进行操作,主要是简单看下WINS服务器:
  (7)建立相应的复制伙伴,后面好进行数据同步:
  (8)下面显示数据同步成功,大家对于WINS简单了解这些就行了:

  网上有很多讲授在windows下通过Cygwin安装hadoop的,笔者认为hadoop原始设计就是在linux下安装使用的,在windows下通过Cygwin安装也无非是模拟linux环境再在这个模拟的环境上装hadoop,既然要学hadoop就真枪实弹的在linux下安装来学习,但是要搞一台真正的linux系统对一般个人来说不容易,但是我们可以用虚拟机VMware Player,就是在windows下装一个虚拟机(VMware Player 就是个很好的虚拟机),然后在虚拟机上装一个linux系统,实现和本机windows的通信,具体的怎么安装虚拟机,怎么在虚拟机上安装linux,以及怎么实现和本机windows的通信,这里就不讲了,这个网上有很多资料。 2、在本机windows下,通过eclispe连接到linux虚拟机上安装好的haoop,进行开发调试

  linux上装好hadoop之后,可以等陆到linux上通过hadoop的shell命令查看hadoop的 hdfs文件系统,执行写好的mapreduce程序,但是这样会很不方便,我们通常 的做法是在windows下开发程序,调试成功之后,再发布到linux上执行,这一部分就是来分享一下如何配置windows下的eclipse,可以链接到linux下的hadoop。

  hadoop安装有三种模式:单机模式,伪分布式,完全分布式。

  1、单机模式: 没意义,pass掉,不讨论。

  2、 伪分布式: 就是在一台机器上模拟namenode、datanode、jobtracker、tasktracker、secondaryname。每一个存在的形式是一个java进程。

  3、完全分布式:就是一个hadoop集群,有n台机器组成,一般组织方式是:一台机器作为master,上面 运行 namenode和jobtracker,另外的机器作为slave,上面运行datanode和tasktracker,至于secondaryname,可以运行在master上,也可以运行在另外一台机器上。secondaryname是namenode的一个备份里面同样保存了名字空间,和文件到文件块的map关系。建议运行在另外一台机器上,这样master死掉之后,还可以通过secondaryname所在的机器找回名字空间,和文件到文件块得map关系数据,恢复namenode。

  这里条件有限,就只能实现伪分布式,就是在虚拟机上装一个linux。其实也可以在虚拟机上装n个linux,来实现完全分布式,但是我怕我的小本本,吃不消。就只能装伪分布式了。

  首先确保windows下已经安装了虚拟机,并在虚拟机上安装了linux,且能和windows通信了(在windows的cmd里ping linux的ip能ping通说明可以通信了,ask:怎么知道linux的ip?,answer:进入linux终端,ifconfig即可看到)笔者window上已经安装了虚拟机并在虚拟机上装了linux系统,装linux的时候会有一个root用户,接下来我们就全部用这个root用户来操作,网上好多资料说新建一个用户比如hadoop,来安装hadoop,这里为了方便,就用root(其实是偷懒,不想弄得复杂,哇咔咔,(*^__^*) 嘻嘻)。

  安装hadoop步骤

  1、实现linux的ssh无密码验证配置.

  2、在linux下安装jdk,并配好环境变量

  3、修改linux的机器名,并配置 /etc/hosts

  4、在windows下下载hadoop 0.20.0,并修改hadoop-env.sh,core-site.xml,hdfs-site.xml,

  mapred-site.xml,masters,slaves文件的配置

  5、把修改好的hadoop整个文件夹传到linux下

  6、把hadoop的bin加入到环境变量

  7、格式化hadoop,启动hadoop

  8、验证是否启动,并执行wordcount

  #这个顺序并不是一个写死的顺序,就得按照这个来,如果你知道原理,可以打乱顺序来操作,比如1、2、3,先那个后那个,都没问题,但是有些步骤还是得依靠一些操作完成了才能进行,新手建议按照顺序来。#

  ask:为什么要配置ssh无密码验证

  answer:Hadoop需要使用SSH协议,namenode将使用SSH协议启动namenode和datanode进程,(datanode向namenode传递心跳信息可能也是使用SSH协议,这是我认为的,还没有做深入了解)。许多教程上介绍Hadoop集群配置时只说明了namenode上SSH无密码登录所有datanode,我在配置时发现必须使datanode上也能SSH无密码登录到namenode,Hadoop集群才能正常启动(也许这不是必须的,只是我的一个失误,但是这样能够正常启动Hadoop集群)。上述蓝色字体,是我粘的某个前辈的话,大概意思是,namenode 和datanode之间发命令是靠ssh来发的,发命令肯定是在运行的时候发,发的时候肯定不希望发一次就弹出个框说:有一台机器连接我,让他连吗。所以就要求后台namenode和datanode无障碍的进行通信,这个无障碍怎么实现呢?,就是配置ssh无密码验证.上述中前辈有个顾虑,说实现了namenode到datanode无障碍链接到,那还用实现datanode和namenode的无障碍连接吗?,这个我就不考虑了,我这里是伪分布的,就一台机器,namenode和datanode都在一个机器上,能实现自己连自己就行了。 不是自己的问题就不去伤脑筋了,哇咔咔~~,读者如果弄完全分布式的时候,碰到这个问题,可以自己试试,不行,也就实现datanode到namenode的无障碍的通信,试试又累不死~~~。

  ask:实现无密码验证就能无障碍连接,这其中原理是神马捏?

  answer:以namenode到datanode为例子:Namenode作为客户端,要实现无密码公钥认证,连接到服务端datanode上时,需要在namenode上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到datanode上。当namenode通过ssh连接datanode时,datanode就会生成一个随机数并用namenode的公钥对随机数进行加密,并发送给namenode。namenode收到加密数之后再用私钥进行解密,并将解密数回传给datanode,datanode确认解密数无误之后就允许namenode进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将客户端namenode公钥复制到datanode上。这也是我粘的某个前辈的话,啥也不说了,前辈说的很清楚,就是这么回事。

  知道why了,现在就开始how吧

  我这里就一台机器,所以操作很简单

  在linux命令行里输入:ssh-keygen -t rsa,然后一路回车。

  root@hadoopName-desktop:~$ ssh-keygen -t rsa

  Generating public/private rsa key pair.

  Enter file in which to save the key (/home/zhangtao/.ssh/id_rsa): //密钥保存位置,直接回车保持默认;

  Created directory '/home/zhangtao/.ssh'.

  Enter passphrase (empty for no passphrase): //设置密钥的密码,空密码直接回车即可;

  Enter same passphrase again: //确认上一步设置的密码。

  然后进入 /root/.ssh/下面,会看到两个文件 id_rsa.pub,id_rsa,

  然后执行 cp id_rsa.pub authorized_keys

  然后 ssh localhost 验证是否成功,第一次要你输入yes,以后就不需要了。

  先在linux下面建一个目录用来安装jdk,我建的目录是 /usr/program,就是以后jdk安装到这个目录下面。

  先去下载一个linux下面的jdk版本,我的是jdk-6u6-linux-i586.bin, 也有-rpm.bin 结尾的,这种结尾的安装不如直接.bin的简单,这个怎么下,就不说了,网上一大堆的,下载1.6包括1.6以上的哦~~,然后用工具传到linux的 /usr/program这个目录下,就是刚才我新建的那个,上传工具好多,ftp也行,ssh 客户端也行,这个不多说,继续~~。

  登录到linux下,进入 /usr/program 目录下,发现多了一个文件,就是jdk-6u6-linux-i586.bin,

  然后开始安装。

  1、淘宝网女装执行 chmod +x jdk-6u6-linux-i586.bin,(这是因为这个文件传过来不是可执行的文件,要把他变成可执行文件)。

  2、执行 ./jdk-6u6-linux-i586.bin,(1、2步骤都是在 /usr/program 目录下执行的,2步骤,一路回车,遇到yes/no? 全部yes,最后会done,安装成功).

  3、执行 ls,会发现/usr/program 这个目录下有个文件,一个是jdk-6u6-linux-i586.bin就是我们上传上来的,另一个就是dk1.6.0_06,就是jdk的安装根目录.

  开始配置环境变量

  1、执行 cd /etc, 进入/etc 目录下。

  2、执行 vi profile, 修改profile文件

  在里面加入以下四行

  3、执行 chmod +x profile ,把profile变成可执行文件

  4、执行 source profile,把profile里的内容执行生效

  5、执行,java、javac、java -version 查看是否安装成功.

  先说说怎么查看linux下的机器名

  在命令行里输入hostname回车,展现的即当前linux系统的机器名如下

  [root@hadoopName ~]# hostname

  hadoopName

  [root@hadoopName ~]#

  读者也看到了,命令行的前缀 [root@hadoopName ~], @符号后面的就是机器名,前面的是当前用户名

  下面说说怎么修改redhat linux下的机器名,下面的方法只适合修改redhat的,别的版本改机器名不是这样的

  1、执行 cd /etc/sysconfig,进入/etc/sysconfig 目录下

  2、执行 vi network,修改network文件,

  NETWORKING=yes

  HOSTNAME=hadoopName 把HOSTNAME改成你想要的机器名,我改成了hadoopName,然后保存

  3、执行 cd /etc,进入/etc 目录下

  4、执行vi hosts,修改hosts文件

  # Do not remove the following line, or various programs

  # that require network functionality will fail.

  192.168.133.128 hadoopName hadoopName

  127.0.0.1 localhost.localdomain localhost

  默认是只有黑色字体内容,然后加上红色字体内容,第一个是自身ip,第二个network里的hostname名字,第三个一样。网上很多资料说hadoop安装要在 hosts里面加入 所有的集群机器的 ip hostname 对,嗯,没错,因为笔者这是单机,所以就只加自己就行了。

  5、修改完后,执行hostname 就能看到自己新改的机器名了

  四、在windows下下载hadoop 0.20.0,并修改hadoop-env.sh,core-site.xml,hdfs-site.xml,

   mapred-site.xml,masters,slaves文件的配置

  下面要做最重要的操作,下载hadoop,并修改配置文件

  下载hadoop 0.20.0 版本 http://apache.etoak.com//hadoop/core/

  下载后的文件是hadoop-0.20.2.tar.gz,然后解压出来

  

  解压出来后的文件结构是这样的,进入conf目录里面,

  修改hadoop-env.sh文件,加入如下一行

  其实hadoop-env.sh里面有这一行,默认是被注释的,你只需要把注释去掉,并且把JAVA_HOME 改成你的java安装目录即可。

  需要说一下,在0.20.2版本之前,conf里面有一个 hadoop-site.xml文件,在0.20.0版本里面 conf下没有这个hadoop-site.xml文件,取而代之的是三个文件,core-site.xml,hdfs-site.xml,mapred.xml。下面要修改这三个文件

  修改core-site.xml

  默认的core-site.xml是如下这样的

  现在要改成如下

  ?xml version="1.0"? ?xml-stylesheet type="text/xsl" href="configuration.xsl"? !-- Put site-specific property overrides in this file. -- configuration property namehadoop.tmp.dir/name value/usr/local/hadoop/hadooptmp/value descriptionA base for other temporary directories./description /property property namefs.default.name/name valuehdfs://192.168.133.128:9000/value descriptionThe name of the default file system. A URI whose scheme and authority determine the FileSystem implementation. The uri's scheme determines the config property (fs.SCHEME.impl) naming the FileSystem implementation class. The uri's authority is used to determine the host, port, etc. for a filesystem./description /property /configuration

  修改hdfs-site.xml 默认的hdfs-site.xml是如下这样的

  要改成如下这样的

  ?xml version="1.0"? ?xml-stylesheet type="text/xsl" href="configuration.xsl"? !-- Put site-specific property overrides in this file. -- configuration property namedfs.replication/name value1/value descriptionDefault block replication. The actual number of replications can be specified when the file is created. The default is used if replication is not specified in create time. /description /property /configuration

  修改mapred-site.xml 默认的mapred-site.xml是如下这样的

  要改成如下这样的

  ?xml version="1.0"? ?xml-stylesheet type="text/xsl" href="configuration.xsl"? !-- Put site-specific property overrides in this file. -- configuration property namemapred.job.tracker/name value192.168.133.128:9001/value descriptionThe host and port that the MapReduce job tracker runs at. If "local", then jobs are run in-process as a single map and reduce task. /description /property /configuration

  修改完这三个文件了,就一些注意的要点说一下

  1、其实core-site.xml 对应有一个core-default.xml, hdfs-site.xml对应有一个hdfs-default.xml,

  mapred-site.xml对应有一个mapred-default.xml。这三个defalult文件里面都有一些默认配置,现在我们修改这三个site文件,目的就覆盖default里面的一些配置,

  2、hadoop分布式文件系统的两个重要的目录结构,一个是namenode上名字空间的存放地方,一个是datanode数据块的存放地方,还有一些其他的文件存放地方,这些存放地方都是基于hadoop.tmp.dir目录的,比如namenode的名字空间存放地方就是 ${hadoop.tmp.dir}/dfs/name, datanode数据块的存放地

机软件提供的参数提供服务。

  USB支持四种基本的数据传输模式:控制传输,等时传输,中断传输及数据块传输。每种传输模式应用到具有相同名字的终端,则具有不同的性质。

  控制传输类型:支持外设与主机之间的控制,状态,配置等信息的传输,为外设与主机之间提供一个控制通道。每种外设都支持控制传输类型,这样主机与外设之间就可以传送配置和命令/状态信息。等时传输类型:支持有周期性,有限的时延和带宽且数据传输速率不变的外设与主机间的数据传输。该类型无差错校验,故不能保证正确的数据传输,支持像计算机-电话集成系统(CTI)和音频系统与主机的数据传输。

  中断传输类型:支持像游戏手柄,鼠标和键盘等输入设备,这些设备与主机间数据传输量小,无周期性,但对响应时间敏感,要求马上响应。

  数据块传输类型:支持打印机,扫描仪,数码相机等外设,这些外设与主机间传输的数据量大,USB在满足带宽的情况下才进行该类型的数据传输。

  USB采用分块带宽分配方案,若外设超过当前带宽分配或潜在的要求,则不能进入该设备。同步和中断传输类型的终端保留带宽,并保证数据按一定的速率传送。集中和控制终端按可用的最佳带宽来传输传输数据。

  六、 USB外设控制器的两种实现方式

  USB芯片在外设领域的应用面很广。USB外设控制芯片通常包括USB收发器、串行接口引擎(SIE)、USB控制器和外设功能等四个模块(SIE 主要以硬件方式处理大多数USB协议,USB控制器负责与PC交互通信信息)。USB控制器一般有两种类型:一种是MCU集成在芯片里面的,如 Intel的8X930AX、CYPRESS的EZ-USB、SIEMENS的C541U以及 MOTOLORA、National Semiconductors等公司的产品;另一种就是纯粹的USB接口芯片,仅处理 USB通信,如PHILIPS的PDIUSBD11(I2C接口)、 PDIUSBP11A、PDIUSBD12(并行接口),National Semiconductor的USBN9602、USBN9603、USBN9*等。

  集成MCU的USB控制芯片优点是CPU与控制器在同一片芯片里,CPU只需要访问一系列寄存器和存储器,便可实现USB口的数据传输,最大限度的发挥 USB高速的特点。而且简化了程序的设计,极大地降低了USB外设的开发难度。缺点是灵活性不够高,开发成本较大。

  纯粹的USB接口芯片的优点是系统组成灵活,可根据不同的系统需求,搭配不同的MCU,具有较高的性能价格比。但因为USB控制器是通过串行口或并行口与MCU连接,在传输速度方面和开发难度方面不如集成了MCU的控制芯片。

  不同的实现方式在设计开销、上市时间、元器件开销和引脚数方面各有优劣,选择不同的方案意味着在以上各项指标中进行取舍。如PHILIPS公司的PDIUSBD12器件。该芯片是一款性价比很高的USB器件,它通常用作微控制器系统中实现与微控制器进行通信的高速通用并行接口,设计者可根据需要选择合适的微控制器,灵活性较大,适用于开发低成本且高效的USB外围设备。

  七、 USB设备的枚举过程

  USB架构中, hub负责检测设备的连接和断开,利用其中断IN端点(Interrupt IN Endpoint)来向主机(Host)报告。在系统启动时,主机轮询它的根hub(Root Hub)的状态看是否有设备(包括子hub和子hub上的设备)连接。

  

  一旦获悉有新设备连接上来,主机就会发送一系列的请求(Resqusts)给设备所挂载到的hub,再由hub建立起一条连接主机(Host)和设备(Device)之间的通信通道。然后主机以控制传输(Control Transfer)的方式,通过端点0(Endpoint 0)对设备发送各种请求,设备收到主机发来的请求后回复相应的信息,进行枚举(Enumerate)操作。所有的USB设备必须支持标准请求(Standard Requests),控制传输方式(Control Transfer)和端点0(Endpoint 0)。

  当枚举完成后,这个新添加的设备可在Windows的设备管理器里面看到,当用户删除这个设备/硬件时,系统把这个设备从设备管理器里删除。

  对于一般的设备,固件(Firmware)内包含主机所要请求的信息,而有些设备则是完全由硬件来负责响应主机的请求。在主机方面则是由操作系统而非应用程序负责处理相关枚举操作。

  枚举步骤

  USB协议定义了设备的6种状态,仅在枚举过程种,设备就经历了4个状态的迁移:上电状态(Powered),默认状态(Default),地址状态(Address)和配置状态(Configured)(其他两种是连接状态和挂起状态(Suspend))。

  USB协议定义了设备的6种状态,仅在枚举过程种,设备就经历了4个状态的迁移:上电状态(Powered),默认状态(Default),地址状态(Address)和配置状态(Configured)(其他两种是连接状态和挂起状态(Suspend))。

  下面步骤是Windows系统下典型的枚举过程,但是固件不能依此就认为所有的枚举操作都是按照这样一个流程行进。设备必须在任何时候都能正确处理所有的主机请求。

  1.用户把USB设备插入USB端口或给系统启动时设备上电。

  这里指的USB端口指的是主机下的根hub或主机下行端口上的hub端口。Hub给端口供电,连接着的设备处于上电状态。

  2.Hub监测它各个端口数据线上(D+/D-)的电压

  在hub端,数据线D+和D-都有一个阻值在14.25k到24.8k的下拉电阻Rpd,而在设备端,D+(全速,高速)和D-(低速)上有一个1.5k的上拉电阻Rpu。当设备插入到hub端口时,有上拉电阻的一根数据线被拉高到幅值的90%的电压(大致是3V)。hub检测到它的一根数据线是高电平,就认为是有设备插入,并能根据是D+还是D-被拉高来判断到底是什么设备(全速/低速)插入端口(全速、高速设备的区分在我将来的文章中描述)。如下图。

  

  检测到设备后,hub继续给设备供电,但并不急于与设备进行USB传输。

  3. Host了解连接的设备。

  每个hub利用它自己的中断端点向主机报告它的各个端口的状态(对于这个过程,设备是看不到的,也不必关心),报告的内容只是hub端口的设备连接/断开的事件。如果有连接/断开事件发生,那么host会发送一个 Get_Port_Status请求(request)以了解更多hub上的信息。Get_Port_Sta

本文章由淘宝网女装_taob_淘宝皇冠店_淘宝网购物www.firbuy.com首发,转载请注明出处。

和宝宝一起涂鸦涂鸦

Windows出现0x0000000- —操作错误详解

整流桥模块参数

<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/141161/viewspace-1120495/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 转 CMDB
下一篇: 没有了~
请登录后发表评论 登录
全部评论

最新文章