Python & Hadoop

Posted GeoWin_CAU

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python & Hadoop相关的知识,希望对你有一定的参考价值。

由于试验的需要,需要调整大量的参数,索性就采用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!!!!!!!!!!!!!!!!!!!!

技术分享



以上是关于Python & Hadoop的主要内容,如果未能解决你的问题,请参考以下文章

2022&2023华为OD机试 - 单词反转 2(Python)

Sphinx - 在代码块片段中使用省略号 (...)

华为OD机试真题Python实现翻转单词顺序真题+解题思路+代码(2022&2023)

如何在 Javadoc 中使用 @ 和 符号格式化代码片段?

手把手教你入门Hadoop(附代码&资源)

为 Blogger 上的博客格式化代码片段 [关闭]