zoukankan      html  css  js  c++  java
  • pyinstaller打包python源程序访问hive

    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到该目录下,如下图:

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

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

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

    5.执行

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

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

    按任意键即可退出。

    6.待优化

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

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

  • 相关阅读:
    SqlServer:此数据库处于单用户模式,导致数据库无法删除的处理
    syscolumns表中所有字段的意思
    SQL数据库之变量
    Sqlserver常用的时间函数---GETDATE、GETUTCDATE、DATENAME
    判断游标是否存在的同时检测游标状态
    向已写好的多行插入sql语句中添加字段和值
    truncate和delete之间有什么区别
    javascript实现单例模式
    关于javascript中的 执行上下文和对象变量
    了解javascript中的this --实例篇
  • 原文地址:https://www.cnblogs.com/wuren/p/3747916.html
Copyright © 2011-2022 走看看