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