pyinstaller打包python源程序访问hive

摘要:
我主要使用python-hrift访问集群的hive,因此很自然地将python源代码打包到Exe中,业务人员可以在Windows环境下双击应用程序,输入参数并按enter键查询hive数据。执行后,将在当前目录下生成connectHive目录,如上图所示。

1.需求

  使用hvie server一段时间后,业务部门需要自己不定时的查询业务数据,之前这一块都是他们提需求我们来做,后来发现这样重复一样的工作放在我们这边做是在没有效率,遂提出给他们工具或者web UI自助查询,当然hive有自己的hwi可以通过网页UI进行自助查询,但是这对不懂sql的业务人员有点不太友好,目前有没时间去修改hwi的UI,所以还是给他们提供查询工具吧。我这边主要使用python thrift访问集群的hive,所以自然要将python源码打包成.exe,业务人员在windows环境下双击该应用程序,输入参数回车后即可查询hive数据。

2.python thrift访问hive示例代码如下(connectHive.py):

#-*-encoding: utf-8-*-
'''
Created on 2014年2月19日

@author: jxw
'''

import sys
from hive_service import ThriftHive
from hive_service.ttypes import HiveServerException
from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol


def hiveExe(sql):

    try:
        transport = TSocket.TSocket('192.168.243.128', 10000) 
        transport = TTransport.TBufferedTransport(transport)
        protocol = TBinaryProtocol.TBinaryProtocol(transport)
        client = ThriftHive.Client(protocol)
        transport.open()


        client.execute(sql)

        print "The return value is : " 
        #print client.fetchAll()
        for r in client.fetchAll():
            #for w in r.strip().split('	'):
                #print w
            print r
        print "............"
        transport.close()
    except Thrift.TException, tx:
        print '%s' % (tx.message)

if __name__ == '__main__':
    num = int(raw_input("input top N:"))
    #print num
    sql_ctx = "select * from game_log.tab_char_create limit %d" %num
    #print sql_ctx
    hiveExe(sql_ctx)
    s = raw_input("Enter any key to exit.")
    print s

3.从http://www.pyinstaller.org/下载pyinstaller,放在F:zip目录下并解压,将以上代码copy到该目录下,如下图:

pyinstaller打包python源程序访问hive第1张

4.打开命令行进入上面的目录,输入以下代码

pyinstaller打包python源程序访问hive第2张

其中-F表示生成单一的一个可执行文件.exe(会将各种.dll等文件集成一个exe文件);-p代表需要import的包的目录,这里是python使用thrift服务访问hive的包py。

执行完成后会在当前目录下生成一个connectHive的目录,见上图。

5.执行

在connectHive目录下的dist下面有个connectHive.exe,即为需要的执行文件,双击如下:

pyinstaller打包python源程序访问hive第3张

输入参数后回车,执行结果见下:

pyinstaller打包python源程序访问hive第4张

按任意键即可退出。

6.待优化

(1) 将结果序列化进文件,方便业务人员自由处理;

(2) 设置hive query的执行频度,这可以在代码中设置hadoop用户和mapreduce使用的作业队列mapred.job.queue.name,防止集群资源被该业务频繁大规模占用。

免责声明:文章转载自《pyinstaller打包python源程序访问hive》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇读懂IL代码(一)VMware的安装下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Scala学习(二)练习

Scala控制结构和函数&练习 1. 一个数字如果为正数,则它的signum为1;如果是负数,则signum为-1;如果为0,则signum为0;编写一个函数来计算这个值 简单逻辑判断: 测试结果如下: Scala中已经有此方法了,如下: println(BigInt(10).signum) 测试结果如下: 2. 一个空的快表达式{}...

Python 第四十二章 mysql 级联+查询

删除或修改被关联字段 场景:book表和publish表为多对一关系,book表的pid字段外键关联到了publish表的id字段 1 查看外键关系名称: show create table book; | book | CREATE TABLE `book` ( `id` int(11) NOT NULL AUT...

吴裕雄 python 机器学习——数据预处理字典学习模型

from sklearn.decomposition import DictionaryLearning #数据预处理字典学习DictionaryLearning模型 def test_DictionaryLearning(): X=[[1,2,3,4,5], [6,7,8,9,10], [10,9,8,7,6,],...

Python基础-5

目录 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 hashlib re正则表达式 模块分为三种: 自定义模块 内置标准模块(又称标准库) 开源模块 自定义模块 和开源模块的使用参考 http://www.cnblogs.com/wupe...

cmd命令、Python脚本生成任意大小任意格式文件

  工作中遇到上传文件格式和文件大小有要求的情况,然而一时不好找到符合条件的文件,下面总结了两种生成任意大小任意格式文件的方法; 方法一:cmd命令,如下生成一个大小为1M的txt文件。 fsutil file createnew c: est.txt 1048576 方法二:Python脚本,使用pywin32库。 import win32file im...

python 数据库备份脚本

#!/usr/bin/python # -*- coding: UTF-8 -*- """数据库备份""" import os import time import sched import re import smtplib from email.mime.text import MIMEText from email....