业务系统JSON日志通过python处理并导入Hive方案

本文介绍了尝试使用Python解析JSON日志并逐条插入Hive的不可行方案,强调了Hive更适合批量数据处理。提供了相关环境准备、Python脚本示例,包括连接Hive执行SQL的脚本和数据处理脚本。
摘要由CSDN通过智能技术生成
首先说明,此方案是一个不可行的方案。与导入Mysql数据库不同,Hive数据库不支持记录级数据插入;即使一些版本支持,插入速度也是奇慢。Hive主要优势在于处理批量数据,数据量越大越能体现出性能优势;数据量小,如记录级数据插入,则没有可用性。所以,对于使用python将json数据解析出来再一条条插入的方法肯定是行不通的。方案记录在此,为通过python连接操作Hive数据库等提供一些参考。
一、环境准备
1、安装thritf依赖库

#yum install automake libtool flex bison pkgconfig gcc-c++ boost-devel libevent-devel zlib-devel python-devel ruby-devel

2、拷贝库文件夹如果在脚本中引用,此步不拷也可以
cp -r $HIVE_PATH/lib/py /usr/local/lib/python2.7/site-packages

3、默认Hadoop环境、Python环境、Hive的thritf服务及Json文件已经准备好

二、实现数据插入的脚本
简版是为了测试用,正式版本是如果方案可行的话的可正式使用的脚本。
1、json2hive_python简版
[spark@Master Py_logproc]$ pwd
/home/spark/opt/Log_Data/Py_logproc
[spark@Master Py_logproc]$ cat json2hive_python_recordasarray_basic.py 
# -*- encoding:utf-8 -*-
#!/usr/bin/env python
import sys
sys.path.append('/home/spark/opt/hive-1.2.1/lib/py')
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
import json
import warnings
warnings.filterwarnings("ignore")




def hiveExe(sql):
   try:
      transport = TSocket.TSocket('127.0.0.1', 10000)
      transport = TTransport.TBufferedTransport(transport)
      protocol = TBinaryProtocol.TBinaryProtocol(transport)
      client = ThriftHive.Client(protocol)
      transport.open()
      client.execute(sql)
      transport.close()
   except Thrift.TException, tx:
      print '%s' % (tx.message)




if __name__=="__main__": 
  import sys
  reload(sys)
  sys.setdefaultencoding( "utf-8" ) 
 
  if len(sys.argv)==1:  
     print "need argv"  
  else:  
     print sys.argv  




for json_array in open('/home/spark/opt/Log_Data/Py_logproc/log_tmpdir/yemaopythonlog'):
  yemao_array = json.loads(json_array)
  for yemao in yemao_array: 
   print yemao['time']
   if not yemao.has_key('_reason'):
    
    id              =   yemao['id']
    time            =   yemao['time']
    url_from        =   yemao['url_from']
    url_current     =   yemao['url_current']
    url_to          =   yem
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值