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插件:

[[email protected] 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:

[[email protected] py]$ hive --service  hiveserver

Starting Hive Thrift Server

3)在node29上编写查询脚本:

#!/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上执行脚本,输入结果为:

node1服务器上hive计算过程为:

时间: 2024-10-13 11:50:05

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

从一千万条短信中找出重复次数最多的前10条

题目:      有1千万条短信,有重复,以文本文件的形式保存,一行一条.请用5分钟时间,找出重复出现最多的前10条. struct TNode { BYTE* pText; //直接指向文件映射的内存地址 DWORD dwCount; //计算器,记录此节点的相同短信数 TNode* ChildNodes[256]; //子节点数据,由于一个字母的ASCII值不可能超过256,所以子节点也不可能超过256 TNode() { //初始化成员 } ~TNode() { //释放资源 } }; /

【Transact-SQL】统计某字段中的值第一次出现后的2小时内出现的次数

原文:[Transact-SQL]统计某字段中的值第一次出现后的2小时内出现的次数 table1 name createdate a 2011-03-01 10:00:00 a 2011-03-01 11:00:00 a 2011-03-01 14:00:00 b 2011-03-01 13:00:00 b 2011-03-01 13:20:00 b 2011-03-01 14:00:00 查询结果为 name createdate count a 2011-03-01 10:00:00 2 a

给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 ,返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况)

1 """ 2 #给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 3 #返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况) 4 解题思路: 5 1.设定一个空字典,去存储列表中的值和值出现的次数 6 2.使用L.count()方法可以统计出L中值出现的次数 7 3.使用sorted方法可以进行排序,sorted(iterable,key,reverse) 8 注意key是函数 9 4.列表中的元祖取值 d[i][j] i是哪一个元祖,j是元祖

用java实现输出英文小说飘中出现次数最多的前N个单词(附:使用文件读写)

本文参考于:https://blog.csdn.net/u014204432/article/details/40348839 一.题目 输出单个文件(<飘> 英文版)中的前 N 个最常出现的英语单词,并将结果输入到文本文件中. 二.程序设计思路 1.首先将英文小说飘文件内容用文件读写方式读入StringBuffer中,然后一行一行读取并去掉句子和单词 间空格然后将StringBuffer转换成String,然后再将所有字符转化成小写字符,然后再将句子分割成单词并 存入字符数组. 2.随后遍历

建立HBase的集群和HDInsight在Hadoop中使用Hive来查询它们

在本教程中,您将学习如何创建和查询HDInsight使用HiveHadoop的HBase的表.下列步骤描述:?如何使用提供在Azure门户的HBase的集群.?如何启用和使用RDP访问HBase的外壳,并使用HBase的外壳创建HBase的示例表,添加行,然后列出表中的行.?如何创建一个Hive表映射到一个现有的HBase的表,使用HiveQL查询数据在HBase的表.?如何使用Microsoft HBase的REST客户端库.NET创建一个新的HBase的表,列出您帐户中的HBase的表,以及

Hadoop集群中使用Hive查询报错

今天在使用Hive查询某分析数据最大值的时候,出现了一定的问题,hive中现象如下: Caused by: java.io.FileNotFoundException://http://slave1:50060/tasklog?attemptid=attempt_201501050454_0006_m_00001_1 然后查看一下jobtracker的日志: 2015-01-05 21:43:23,724 INFO org.apache.hadoop.mapred.JobInProgress:

统计Apache或Nginx访问日志里的独立IP访问数量的Shell

1.把IP数量直接输出显示: cat access_log_2011_06_26.log |awk '{print $1}'|uniq -c|wc -l 2.把IP数量输出到文本显示: cat access_log_2011_06_26.log |awk '{print $1}'|uniq -c|wc -l > ip.txt 总结:如果单个访问日志大小超过2G,用这个命令查看时很占系统资源,系统负载会上升:所以在服务器高负载时不要查看,最好在低负载时间段查看.上面截图是公司其中一台广告服务器的一

(总结)统计Apache或Nginx访问日志里的独立IP访问数量的Shell

1.把IP数量直接输出显示:cat access_log_2011_06_26.log |awk '{print $1}'|uniq -c|wc -l 2.把IP数量输出到文本显示:cat access_log_2011_06_26.log |awk '{print $1}'|uniq -c|wc -l > ip.txt 总结:如果单个访问日志大小超过2G,用这个命令查看时很占系统资源,系统负载会上升:所以在服务器高负载时不要查看,最好在低负载时间段查看.上面截图是公司其中一台广告服务器的一天i

统计Apache或nginx日志里访问次数最多的前十个IP

nginx awk '{print $1}' urlogfile | sort | uniq -c | sort -nr -k1 | head -n 10 awk '{print $1}' /usr/local/nginx/logs/localhost.access.log | sort | uniq -c | sort -nr -k1 | head -n 10 Apache cd /var/log/httpd/&&cat access_log | awk '{print $1}' | u