设为首页 收藏本站
查看: 1625|回复: 0

[经验分享] hadoop中的hive查询cdn访问日志指定时间段内url访问次数最多的前10位(结合python语言)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-11-7 08:54:48 | 显示全部楼层 |阅读模式
hadoop环境描述:

master节点:node1
slave节点:node2,node3,node4
远端服务器(python连接hive):node29

需求:通过hive查询到cdn日志中指定时间段内url访问次数最多的前10个url

ps:用pig查询可以查询文章:
http://shineforever.blog./1429204/1571124

说明:python操作远程操作需要使用Thrift接口:
hive源码包下面自带Thrift插件:

[iyunv@node1 shell]# ls -l /usr/local/hive-0.8.1/lib/py
total 28
drwxr-xr-x 2 hadoop hadoop 4096 Nov  5 15:29 fb303
drwxr-xr-x 2 hadoop hadoop 4096 Oct 15 10:30 fb303_scripts
drwxr-xr-x 2 hadoop hadoop 4096 Nov  5 15:29 hive_metastore
drwxr-xr-x 2 hadoop hadoop 4096 Oct 15 10:30 hive_serde
drwxr-xr-x 2 hadoop hadoop 4096 Nov  5 15:29 hive_service
drwxr-xr-x 2 hadoop hadoop 4096 Nov  5 15:20 queryplan
drwxr-xr-x 6 hadoop hadoop 4096 Nov  5 15:20 thrift

1)把相关文件scp到远端的node29相关目录下:

scp -r /usr/local/hive-0.8.1/lib/py/* 172.16.41.29:/usr/local/hive_py/.

2) 在node1服务器上开发hive:
[hadoop@node1 py]$ hive --service  hiveserver
Starting Hive Thrift Server

3)在node29上编写查询脚本:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/usr/bin/env python
#coding:utf-8
#找出cdn日志指定时间段,url访问次数最多的前10个;

import sys
import os
import string
import re
import MySQLdb

#加载hive的python相关库文件;
sys.path.append('/usr/local/hive_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


dbname="default"
hsql="select request,count(request) as counts from cdnlog where time >= '[27/Oct/2014:10:40:00 +0800]' and time <= '[27/Oct/2014:10:49
:59 +0800]' group by request order by counts desc limit 10"

def hiveExe(hsql,dbname):

    try:
        transport = TSocket.TSocket('172.16.41.151', 10000)
        transport = TTransport.TBufferedTransport(transport)
        protocol = TBinaryProtocol.TBinaryProtocol(transport)
        client = ThriftHive.Client(protocol)
        transport.open()
#加载增长表达式支持,必需(以下加载路径为远端hive路径,不是脚本的本地路径!)
        client.execute('add jar /usr/local/hive-0.8.1/lib/hive_contrib.jar')
#        client.execute("use " + dbname)
#        row = client.fetchOne()
        client.execute(hsql)
        return client.fetchAll() #查询所有数据;

        transport.close()
    except Thrift.TException, tx:
        print '%s' % (tx.message)

if __name__ == '__main__':
    results=hiveExe(hsql,dbname)
    num=len(results)
    for i in range(num):





在node29上执行脚本,输入结果为:
wKioL1RbHoPT0rHZAAHHICCIv7U438.jpg
node1服务器上hive计算过程为:
wKiom1RbHjnhxxvdAAcmfK-RneY166.jpg



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-27285-1-1.html 上篇帖子: 如何把hadoop相关源码关联到eclipse工程中 下篇帖子: Hadoop 2.5.1 集群安装配置 python 时间段
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表