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!!!!!!!!!!!!!!!!!!!!

时间: 2024-10-14 20:04:49

Python & Hadoop的相关文章

用python + hadoop streaming 编写分布式程序(二) -- 在集群上运行与监控

写在前面 前文:用python + hadoop streaming 编写分布式程序(一) -- 原理介绍,样例程序与本地调试 为了方便,这篇文章里的例子均为伪分布式运行,一般来说只要集群配置得当,在伪分布式下能够运行的程序,在真实集群上也不会有什么问题. 为了更好地模拟集群环境,我们可以在mapred-site.xml中增设reducer和mapper的最大数目(默认为2,实际可用数目大约是CPU核数-1). 假设你为Hadoop安装路径添加的环境变量叫$HADOOP_HOME(如果是$HAD

用python + hadoop streaming 编写分布式程序(三) -- 自定义功能

又是期末又是实训TA的事耽搁了好久……先把写好的放上博客吧 前文: 用python + hadoop streaming 编写分布式程序(一) -- 原理介绍,样例程序与本地调试 用python + hadoop streaming 编写分布式程序(二) -- 在集群上运行与监控 使用额外的文件 假如你跑的job除了输入以外还需要一些额外的文件(side data),有两种选择: 大文件 所谓的大文件就是大小大于设置的local.cache.size的文件,默认是10GB.这个时候可以用-fil

自制 python hadoop streaming 数据分析工具

https://github.com/zhuyi10/hadoop_data_analysis跟大家交流一下我写的数据分析工具用hadoop streaming执行python写的mapper, reducer目前只实现了一些简单的分析功能希望大家多提意见

Java Python Hadoop 教程视频

1.old boy Python周末培训班视频25周全 用淘宝APP或闲鱼网APP扫描下图二维码查看详情 ------------------------------------------------------------------------------------------------- 2.zhuanzhi播客大数据第三期,脱产班,一万多的培训费, 39天全套高清,代码,视频,文档,面试题,面试技巧. 用淘宝APP或闲鱼网APP扫描下图二维码查看详情 ---------------

Python获取程序运行目录和脚本目录

import os import sys #获取脚本所在目录 print os.path.split( os.path.realpath( sys.argv[0] ) )[0] #获取脚本运行目录 print os.getcwd() 在脚本所在目录运行: python test.py /home/Hadoop /home/hadoop 在其他目录运行:python hadoop/test.py /home/hadoop /home

【转】Python学习路线

Python最佳学习路线图 python语言基础 (1)Python3入门,数据类型,字符串 (2)判断/循环语句,函数,命名空间,作用域 (3)类与对象,继承,多态 (4)tkinter界面编程 (5)文件与异常,数据处理简介 (6)Pygame实战飞机大战,2048 python语言高级 (1)Python常见第三方库与网络编程 (2)Python正则表达式 (3)邮箱爬虫,文件遍历,金融数据爬虫,多线程爬虫 (4)Python线程.进程 (5)Python MySQL数据库,协程,jyth

python的方向

学习路线- 前段- 后端- 运维- 数据分析- 机器学习 各项学习内容详情 python语言基础(1)Python3入门,数据类型,字符串(2)判断/循环语句,函数,命名空间,作用域(3)类与对象,继承,多态(4)tkinter界面编程(5)文件与异常,数据处理简介(6)Pygame实战飞机大战,2048 python语言高级(1)Python常见第三方库与网络编程(2)Python正则表达式(3)邮箱爬虫,文件遍历,金融数据爬虫,多线程爬虫(4)Python线程.进程(5)Python MyS

Python介绍与特点(自学python知识整理)

Python 简介 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计: Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节.类似于PHP和Perl语言. Python 是交互式语言: 这意味着,您可以在一个Python提示符,直接互动执行写你的程序. Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术. Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语

Python最佳学习路线

如何学习Python 最近开始整理python的资料,会陆续放到博客中存档.找了几个qq群,其中有一个群78486745.后面就没怎么加群了,还是需要看官方文档为主 python语言基础:(带你熟悉python语言的特性,学会使用python开发环境,使用python开发一些简单的案例) (1)Python3入门,数据类型,字符串 (2)判断/循环语句,函数, (3)类与对象,继承,多态 (4)tkinter界面编程 (5)文件与异常,数据处理简介 (6)Pygame实战飞机大战 python语