博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hive Python Streaming的原理及写法
阅读量:5892 次
发布时间:2019-06-19

本文共 2108 字,大约阅读时间需要 7 分钟。

在Hive中,须要实现Hive中的函数无法实现的功能时,就能够用Streaming来实现。

其原理能够理解成:用HQL语句之外的语言,如Python、Shell来实现这些功能,同一时候配合HQL语句,以实现特殊的功能。

比方,我有一张不同站点訪问的日志表,当中有两个列是url和ref。分别代表当前訪问的网址和来源地址,我想要查看用户的来源。即看用户都是从那些站点跳到这些站点上去的。这里有些站点可能域名是二级甚至三级域名,可是这些实际上是属于其顶级域名的。

所以要找出其顶级域名。

这个在Hive的自己定义函数中是无法实现的。所以採用Streaming的方式来实现。

准备表和数据

--建表drop table if exists view_all;create table if not exists view_all(ad STRING,ua STRING,ip STRING,cookie STRING,url STRING,ref STRING,action STRING,value STRING,timestamp STRING)ROW FORMAT DELIMITEDFIELDS TERMINATED BY '\t'STORED AS TEXTFILE;--导入日志数据load data local inpath 'view_all' overwrite into table view_all;

Python实现获取顶级域名和过滤站内跳转

#!/usr/bin/env python# -*- coding:utf-8 -*-'''Created on 2014年8月6日@author: zhaohf'''import sysimport urlparseimport retopHostPostfix = (    '.com',    '.net',    '.org',    '.cn',    '.com.cn')#获取顶级域名def get_top_host(url):    parts = urlparse.urlparse(url)    host = parts.netloc    extractPattern = r'[^\.]+('+'|'.join([h.replace('.',r'\.') for h in topHostPostfix])+')$'    pattern = re.compile(extractPattern,re.IGNORECASE)    m = pattern.search(host)    return m.group() if m else host
#排除站内跳转if __name__ == '__main__':    for line in sys.stdin:        try:            line = line.strip()            li = line.split('\t')            url = li[4]            ref = li[5]            url_top_host = get_top_host(url)            ref_top_host = get_top_host(ref)            if url_top_host != ref_top_host:                li[4] = url_top_host                li[5] = ref_top_host                newline = ''                for l in li:                    newline += '\t'+l                print newline.strip()            else:                pass        except Exception,err:            continue

调用python 脚本
--排除站内跳转drop table if exists view_from;CREATE TABLE if not exists view_from like view_from;ADD FILE mapper.py;INSERT OVERWRITE TABLE view_fromSELECT TRANSFORM(ad,ua,ip,cookie,url,ref,action,value,timestamp)USING 'python mapper.py'AS (ad,ua,ip,cookie,url,ref,action,value,timestamp)FROM view_all;
亦能够将hql语句保存成文件,使用hive -f query.hql 来调用。

当中须要注意细节,比方__main__被写成了 __mian__。好痛苦!

转载地址:http://pmnsx.baihongyu.com/

你可能感兴趣的文章
异常处理汇总-开发工具
查看>>
[LeetCode] Excel Sheet Column Number 求Excel表列序号
查看>>
通过浏览器直接打开Android应用程序
查看>>
MVC调用SVC无法找到资源解决问题
查看>>
div加jquery实现iframe标签的功能
查看>>
解决Yapi 插件运行不支持文件上传的问题解决
查看>>
Windows路由表详解
查看>>
MySQL从库记录binlog日志出错一例
查看>>
2015年度扯淡
查看>>
phpcms2008列表页模板与内容页模板list.html show.html
查看>>
Java程序员从笨鸟到菜鸟之(八十四)深入浅出Ajax
查看>>
GNS3全面详解系列-GNS3的前世今生
查看>>
JDK 1.8.0_144 集合框架之CopyOnWriteArrayList
查看>>
linux 将大文件分成小文件
查看>>
CCNA- 距离矢量路由协议学习
查看>>
jira 配置 LDAP 访问
查看>>
Canonical发布Ubuntu server 11.10版本
查看>>
企业实践用户邮箱导入/导出(第2部分)
查看>>
我的友情链接
查看>>
nagios搭建(五):nagios监控mysql
查看>>