标签:
由于试验的需要,需要调整大量的参数,索性就采用Python写个脚本去执行hadoop命令。
------------------------------------------------------------------------------------------------------------------------------
Python,今天是第一次接触,按照例子写了一个执行命令。
#!/usr/bin/python
import sys
import subprocess
import os
import commands
from datetime import datetime
from datetime import timedelta
import time
import re
import math
import cmd
# This following script aim to do experiments in hadoop.
# ###############################################################################################################
# global variables
# ###############################################################################################################
logger = open('./logger.out', 'w')
logger_error = open('./logger.err', 'w')
hadoopDir = './hadoop-1.2.1/'
# ###############################################################################################################
# function execute command
# ###############################################################################################################
def execute_command(cmd):
result = executionTime()
logger.write(cmd+'\n')
print cmd
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
logger_error.write(cmd+'\n')
for line in p.stderr.readlines():
logger_error.write(line)
print 'error >>>>> '+ line
print line
for line in p.stdout.readlines():
logger.write(line)
print 'out >>>>>> ' + line
result.parseLines(line)
'''
if 'time in ' in line:
tokens = line.split()
length = len(tokens)
executionTime = tokens[length-1]
'''
logger.write('***->Execution time in Milliseconds(' + result.runTime.replace('\n','')+') ')
print '***->Execution time of ' + result.runTime.replace('\n','')
return result
# ###############################################################################################################
# function close writers
# ###############################################################################################################
def close_writers():
logger.flush()
logger_error.flush()
logger.close()
logger_error.close()
def log(message):
logger.write('\n----------\n\t'+message+'\n-----------\n')
# ###############################################################################################################
# Experiments on gplot
# ###############################################################################################################
#dataFiles = ['lakes.random','buildings.spatial','allobjects.spatial']
dataFiles = ['land.rtree']
dataShape = 'shppolygon'
overwrite = True;
def gplot():
overwriteFlag = ''
if overwrite is True:
overwriteFlag = '-overwrite'
for infilename in dataFiles:
cmd = hadoopDir + './bin/hadoop' + ' gplot ' + infilename +' '+ infilename + '.png' + 'color:red' + ' shape:' + dataShape +' ' + overwriteFlag
logger.write(cmd+'\n')
t = execute_command(cmd)
return t
logger.close()
# ###############################################################################################################
#Classes
# ###############################################################################################################
class executionTime(object):
def __init__(self):
self.runTime = ''
self.sampleTime = ''
self.subdivisionTime = ''
def parseLines(self,line):
if 'Total time for sampling' in line:
token = line.split(" ")
self.sampleTime = token[len(token)-1]
elif 'Total time for space subdivision' in line:
token = line.split(" ")
self.subdivisionTime = token[len(token)-1]
elif 'time in' in line:
token = line.split(" ")
self.runTime = token[len(token)-1]
# ###############################################################################################################
# Main()
# ###############################################################################################################
gplot()
print 'Program is done '
close_writers()
执行后,也得到了正确的结果,nice!!!!!!!!!!!!!!!!!!!!
标签:
原文地址:http://blog.csdn.net/yaoxiaochuang/article/details/50832267