xml.dom 解析XML的API描述 minidom.parse(filename) 加载读取XML文件 doc.documentElement 获取XML文档对象 node.getAttribute(AttributeName) 获取XML节点属性值 node.getElementsByTagName(TagName) 获取XML节点对象集合 node.childNodes #返回子节点列表。 node.childNodes[index].nodeValue 获取XML节点值 node.firstChild #访问第一个节点。等价于pagexml.childNodes[0] doc = minidom.parse(filename) doc.toxml('UTF-8') 返回Node节点的xml表示的文本 Node.attributes["id"] a.name #就是上面的 "id" a.value #属性的值 #!/usr/bin/env python """ *author:czhipeng *Date:2013/08/29 """ from xml.dom import minidom import fileinput import time class parseXMLV(object): def __init__(self,ip,javaEnv): self.ip=ip self.javaEnv=javaEnv def generate_coreXml(self): impl=minidom.getDOMImplementation() dom=impl.createDocument(None,'configuration',None) root=dom.documentElement property=dom.createElement('property') root.appendChild(property) nameE=dom.createElement('name') nameT=dom.createTextNode('hadoop.tmp.dir') nameE.appendChild(nameT) property.appendChild(nameE) nameE=dom.createElement('value') nameT=dom.createTextNode('/hadoop/tmp') nameE.appendChild(nameT) property.appendChild(nameE) property=dom.createElement('property') root.appendChild(property) nameE=dom.createElement('name') nameT=dom.createTextNode('fs.default.name') nameE.appendChild(nameT) property.appendChild(nameE) nameE=dom.createElement('value') nameT=dom.createTextNode('hdfs://'+self.ip+':9000') nameE.appendChild(nameT) property.appendChild(nameE) property=dom.createElement('property') root.appendChild(property) nameE=dom.createElement('name') nameT=dom.createTextNode('hadoop.proxyuser.root.hosts') nameE.appendChild(nameT) property.appendChild(nameE) nameE=dom.createElement('value') nameT=dom.createTextNode(self.ip) nameE.appendChild(nameT) property.appendChild(nameE) property=dom.createElement('property') root.appendChild(property) nameE=dom.createElement('name') nameT=dom.createTextNode('hadoop.proxyuser.root.groups') nameE.appendChild(nameT) property.appendChild(nameE) nameE=dom.createElement('value') nameT=dom.createTextNode('*') nameE.appendChild(nameT) property.appendChild(nameE) f=open('core-siteTmp.xml','a+') dom.writexml(f,addindent=' ',newl='\n') f.close() dst=file('core-site.xml','wa+') inlines=fileinput.input(files=('core-siteTmp.xml')) for inline in inlines: if fileinput.lineno()!=3: dst.write(inline) dst.close() f.close() def generate_hdfsXml(self): impl=minidom.getDOMImplementation() dom=impl.createDocument(None,'configuration',None) root=dom.documentElement property=dom.createElement('property') root.appendChild(property) nameE=dom.createElement('name') nameT=dom.createTextNode('dfs.replication') nameE.appendChild(nameT) property.appendChild(nameE) nameE=dom.createElement('value') nameT=dom.createTextNode('3') nameE.appendChild(nameT) property.appendChild(nameE) property=dom.createElement('property') root.appendChild(property) nameE=dom.createElement('name') nameT=dom.createTextNode('dfs.namenode.name.dir') nameE.appendChild(nameT) property.appendChild(nameE) nameE=dom.createElement('value') nameT=dom.createTextNode('file:/hadoop/hdfs/name') nameE.appendChild(nameT) property.appendChild(nameE) nameE=dom.createElement('final') nameT=dom.createTextNode('true') nameE.appendChild(nameT) property.appendChild(nameE) property=dom.createElement('property') root.appendChild(property) nameE=dom.createElement('name') nameT=dom.createTextNode('dfs.federation.nameservice.id') nameE.appendChild(nameT) property.appendChild(nameE) nameE=dom.createElement('value') nameT=dom.createTextNode('ns1') nameE.appendChild(nameT) property.appendChild(nameE) property=dom.createElement('property') root.appendChild(property) nameE=dom.createElement('name') nameT=dom.createTextNode('dfs.namenode.backup.address.ns1') nameE.appendChild(nameT) property.appendChild(nameE) nameE=dom.createElement('value') nameT=dom.createTextNode(self.ip+':50100') nameE.appendChild(nameT) property.appendChild(nameE) property=dom.createElement('property') root.appendChild(property) nameE=dom.createElement('name') nameT=dom.createTextNode('dfs.namenode.backup.http-address.ns1') nameE.appendChild(nameT) property.appendChild(nameE) nameE=dom.createElement('value') nameT=dom.createTextNode(self.ip+':50105') nameE.appendChild(nameT) property.appendChild(nameE) property=dom.createElement('property') root.appendChild(property) nameE=dom.createElement('name') nameT=dom.createTextNode('dfs.federation.nameservices') nameE.appendChild(nameT) property.appendChild(nameE) nameE=dom.createElement('value') nameT=dom.createTextNode('ns1') nameE.appendChild(nameT) property.appendChild(nameE) property=dom.createElement('property') root.appendChild(property) nameE=dom.createElement('name') nameT=dom.createTextNode('dfs.namenode.rpc-address.ns1') nameE.appendChild(nameT) property.appendChild(nameE) nameE=dom.createElement('value') nameT=dom.createTextNode(self.ip+':9000') nameE.appendChild(nameT) property.appendChild(nameE) property=dom.createElement('property') root.appendChild(property) nameE=dom.createElement('name') nameT=dom.createTextNode('dfs.namenode.rpc-address.ns2') nameE.appendChild(nameT) property.appendChild(nameE) nameE=dom.createElement('value') nameT=dom.createTextNode(self.ip+':9000') nameE.appendChild(nameT) property.appendChild(nameE) property=dom.createElement('property') root.appendChild(property) nameE=dom.createElement('name') nameT=dom.createTextNode('dfs.namenode.http-address.ns1') nameE.appendChild(nameT) property.appendChild(nameE) nameE=dom.createElement('value') nameT=dom.createTextNode(self.ip+':23001') nameE.appendChild(nameT) property.appendChild(nameE) property=dom.createElement('property') root.appendChild(property) nameE=dom.createElement('name') nameT=dom.createTextNode('dfs.namenode.http-address.ns2') nameE.appendChild(nameT) property.appendChild(nameE) nameE=dom.createElement('value') nameT=dom.createTextNode(self.ip+':13001') nameE.appendChild(nameT) property.appendChild(nameE) property=dom.createElement('property') root.appendChild(property) nameE=dom.createElement('name') nameT=dom.createTextNode('dfs.dataname.data.dir') nameE.appendChild(nameT) property.appendChild(nameE) nameE=dom.createElement('value') nameT=dom.createTextNode('file:/hadoop/hdfs/data') nameE.appendChild(nameT) property.appendChild(nameE) nameE=dom.createElement('final') nameT=dom.createTextNode('true') nameE.appendChild(nameT) property.appendChild(nameE) property=dom.createElement('property') root.appendChild(property) nameE=dom.createElement('name') nameT=dom.createTextNode('dfs.namenode.secondary.http-address.ns1') nameE.appendChild(nameT) property.appendChild(nameE) nameE=dom.createElement('value') nameT=dom.createTextNode(self.ip+':23002') nameE.appendChild(nameT) property.appendChild(nameE) property=dom.createElement('property') root.appendChild(property) nameE=dom.createElement('name') nameT=dom.createTextNode('dfs.namenode.secondary.http-address.ns2') nameE.appendChild(nameT) property.appendChild(nameE) nameE=dom.createElement('value') nameT=dom.createTextNode(self.ip+':23002') nameE.appendChild(nameT) property.appendChild(nameE) property=dom.createElement('property') root.appendChild(property) nameE=dom.createElement('name') nameT=dom.createTextNode('dfs.namenode.secondary.http-address.ns1') nameE.appendChild(nameT) property.appendChild(nameE) nameE=dom.createElement('value') nameT=dom.createTextNode(self.ip+':23003') nameE.appendChild(nameT) property.appendChild(nameE) property=dom.createElement('property') root.appendChild(property) nameE=dom.createElement('name') nameT=dom.createTextNode('dfs.namenode.secondary.http-address.ns2') nameE.appendChild(nameT) property.appendChild(nameE) nameE=dom.createElement('value') nameT=dom.createTextNode(self.ip+':23003') nameE.appendChild(nameT) property.appendChild(nameE) f=open('tmphdfssite.xml','a+') dom.writexml(f,addindent=' ',newl='\n') f.close() dst=file('hdfs-site.xml','wa+') inlines=fileinput.input(files=('tmphdfssite.xml')) for inline in inlines: if fileinput.lineno()!=3: dst.write(inline) dst.close() f.close() def addJava(self): f=open("hadoop-env.sh",'a+') f.write(self.javaEnv) f.close() def generate_mapredXml(self): impl=minidom.getDOMImplementation() dom=impl.createDocument(None,'configuration',None) root=dom.documentElement property=dom.createElement('property') root.appendChild(property) nameE=dom.createElement('name') nameT=dom.createTextNode('mapreduce.framework.name') nameE.appendChild(nameT) property.appendChild(nameE) nameE=dom.createElement('value') nameT=dom.createTextNode('yarn') nameE.appendChild(nameT) property.appendChild(nameE) f=open('tmpmapredsite.xml','a+') dom.writexml(f,addindent=' ',newl='\n') f.close() dst=file('mapred-site.xml','wa+') inlines=fileinput.input(files=('tmpmapredsite.xml')) for inline in inlines: if fileinput.lineno()!=3: dst.write(inline) dst.close() f.close() def generate_yarnXml(self): impl=minidom.getDOMImplementation() dom=impl.createDocument(None,'configuration',None) root=dom.documentElement property=dom.createElement('property') root.appendChild(property) nameE=dom.createElement('name') nameT=dom.createTextNode('yarn.resourcemanager.address') nameE.appendChild(nameT) property.appendChild(nameE) nameE=dom.createElement('value') nameT=dom.createTextNode(self.ip+':18040') nameE.appendChild(nameT) property.appendChild(nameE) ''' property=dom.createElement('property') root.appendChild(property) nameE=dom.createElement('name') nameT=dom.createTextNode('yarn.resourcemanager.nodes.exclude-path') nameE.appendChild(nameT) property.appendChild(nameE) nameE=dom.createElement('value') nameT=dom.createTextNode('/home/hadoop/hadoop/etc/hadoop/node-exclude.list') nameE.appendChild(nameT) property.appendChild(nameE) ''' property=dom.createElement('property') root.appendChild(property) nameE=dom.createElement('name') nameT=dom.createTextNode('yarn.resourcemanager.scheduler.address') nameE.appendChild(nameT) property.appendChild(nameE) nameE=dom.createElement('value') nameT=dom.createTextNode(self.ip+':18030') nameE.appendChild(nameT) property.appendChild(nameE) property=dom.createElement('property') root.appendChild(property) nameE=dom.createElement('name') nameT=dom.createTextNode('yarn.resourcemanager.webapp.address') nameE.appendChild(nameT) property.appendChild(nameE) nameE=dom.createElement('value') nameT=dom.createTextNode(self.ip+':18088') nameE.appendChild(nameT) property.appendChild(nameE) property=dom.createElement('property') root.appendChild(property) nameE=dom.createElement('name') nameT=dom.createTextNode('yarn.resourcemanager.resource-tracker.address') nameE.appendChild(nameT) property.appendChild(nameE) nameE=dom.createElement('value') nameT=dom.createTextNode(self.ip+':18025') nameE.appendChild(nameT) property.appendChild(nameE) property=dom.createElement('property') root.appendChild(property) nameE=dom.createElement('name') nameT=dom.createTextNode('yarn.resourcemanager.admin.address') nameE.appendChild(nameT) property.appendChild(nameE) nameE=dom.createElement('value') nameT=dom.createTextNode(self.ip+':18141') nameE.appendChild(nameT) property.appendChild(nameE) property=dom.createElement('property') root.appendChild(property) nameE=dom.createElement('name') nameT=dom.createTextNode('yarn.nodemanager.aux-services') nameE.appendChild(nameT) property.appendChild(nameE) nameE=dom.createElement('value') nameT=dom.createTextNode('mapreduce.shuffle') nameE.appendChild(nameT) property.appendChild(nameE) property=dom.createElement('property') root.appendChild(property) nameE=dom.createElement('name') nameT=dom.createTextNode('yarn.nodemanager.aux-services.mapreduce.shuffle.class') nameE.appendChild(nameT) property.appendChild(nameE) nameE=dom.createElement('value') nameT=dom.createTextNode('org.apache.hadoop.mapred.ShuffleHandler') nameE.appendChild(nameT) property.appendChild(nameE) f=open('yarn-site.xml','w+') dom.writexml(f,addindent=' ',newl='\n',encoding='utf-8') f.close() if __name__=="__main__": t=parseXMLV("10.108.39.104","export JAVA_HOME=/usr/java/jdk1.7.0_25") start=time.time() t.generate_yarnXml() t.generate_coreXml() t.addJava() t.generate_mapredXml() t.generate_hdfsXml() stop=time.time() print stop-start #3.376ms
不生成 只替换:
#!/usr/bin/env python ''' name:chenzhipeng date:2013-0904 ''' import os import re import time class fileConfig(object): def __init__(self,ip,javaEnv): self.ip=ip self.javaEnv=javaEnv def configYarnSite(self): f=open("tmpYarnSite.xml","r+") open("yarn-site.xml",'w').write(re.sub(r'&ip&',self.ip,f.read())) f.close() def configHdfsSite(self): f=open("tmpHdfsSite.xml","r+") open("hdfs-site.xml",'w').write(re.sub(r'&ip&',self.ip,f.read())) f.close() def addJava(self): f=open("hadoop-env.sh",'a+') f.write(self.javaEnv) f.close() #map-site.xml no alter def configCoreSite(self): f=open("tmpCoreSite.xml","r+") open("core-site.xml",'w').write(re.sub(r'&ip&',self.ip,f.read())) f.close() if __name__=="__main__": t=fileConfig("10.108.39.104","export JavaHome=") start=time.time() #t.configYarnSite() #t.configHdfsSite() #t.addJava() t.configCoreSite() stop=time.time() print stop-start