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

简介:

hadoop环境描述:

master节点:node1

slave节点:node2,node3,node4

远端服务器(python连接hive):node29


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

ps:用pig查询可以查询文章:

http://shineforever.blog.51cto.com/1429204/1571124


说明:python操作远程操作需要使用Thrift接口:

hive源码包下面自带Thrift插件:

[root@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



本文转自 shine_forever 51CTO博客,原文链接:http://blog.51cto.com/shineforever/1573439


相关文章
|
Java 数据处理 索引
(Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
DataFrame结构 每一列都属于Series类型,不同列之间数据类型可以不一样,但同一列的值类型必须一致。 DataFrame拥有一个总的 idx记录列,该列记录了每一行的索引 在DataFrame中,若列之间的元素个数不匹配,且使用Series填充时,在DataFrame里空值会显示为NaN;当列之间元素个数不匹配,并且不使用Series填充,会报错。在指定了index 属性显示情况下,会按照index的位置进行排序,默认是 [0,1,2,3,...] 从0索引开始正序排序行。
842 0
|
数据采集 Web App开发 iOS开发
解决Python爬虫访问HTTPS资源时Cookie超时问题
解决Python爬虫访问HTTPS资源时Cookie超时问题
|
存储 应用服务中间件 开发工具
对象存储OSS-Python设置代理访问请求
通过 Python SDK 配置 nginx 代理地址请求阿里云 OSS 存储桶服务。示例代码展示了如何使用 RAM 账号进行身份验证,并通过代理下载指定对象到本地文件。
850 15
|
SQL JavaScript 前端开发
基于Python访问Hive的pytest测试代码实现
根据《用Java、Python来开发Hive应用》一文,建立了使用Python、来开发Hive应用的方法,产生的代码如下
462 6
基于Python访问Hive的pytest测试代码实现
|
SQL 分布式计算 Hadoop
Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL
Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL
529 3
|
SQL JavaScript 前端开发
用Java、Python来开发Hive应用
用Java、Python来开发Hive应用
313 7
|
SQL JavaScript 前端开发
基于Java访问Hive的JUnit5测试代码实现
根据《用Java、Python来开发Hive应用》一文,建立了使用Java、来开发Hive应用的方法,产生的代码如下
508 6
|
NoSQL JavaScript Java
Java Python访问MongoDB
Java Python访问MongoDB
229 4
WK
|
存储 安全 索引
如何在Python中访问字典中的值
在Python中,访问字典(Dictionary)中的值非常简单。字典是一种无序的集合,它存储了键值对(key-value pairs),其中每个键都是唯一的,并映射到一个值上。要访问字典中的值,你需要使用键作为索引。
WK
739 0
|
机器学习/深度学习 开发工具 Python
【Azure 应用服务】使用Python Azure SDK 来获取 App Service的访问限制信息(Access Restrictions)
【Azure 应用服务】使用Python Azure SDK 来获取 App Service的访问限制信息(Access Restrictions)
396 0

推荐镜像

更多