hive streaming 使用shell脚本
一。HIVE streaming
在Hive中,需要实现Hive中的函数无法实现的功能时,就可以用Streaming来实现。其原理可以理解成:用HQL语句之外的语言,如Python、Shell来实现这些功能,同时配合HQL语句,以实现特殊的功能。
二。 实例
1. 日志文件的格式
-- :: W3SVC1 :da8:::: GET /favicon.ico - - :da8:::ca:f74b:eede:a024 Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.1+(KHTML,+like+Gecko)+Maxthon/4.1.2.4000+Chrome/26.0.1410.43+Safari/537.1
-- :: W3SVC1 :da8:::: GET /index.asp - - :da8:::ca:f74b:eede:a024 Mozilla/5.0+(Windows+NT+6.1;+WOW64;+Trident/7.0;+rv:11.0;+Maxthon/4.1.2.4000)
-- :: W3SVC1 :da8:::: GET /skin6/index.asp - - :da8:::ca:f74b:eede:a024 Mozilla/5.0+(Windows+NT+6.1;+WOW64;+Trident/7.0;+rv:11.0;+Maxthon/4.1.2.4000)
-- :: W3SVC1 :da8:::: GET /skin6/images/head_menu_jt2.gif - - :da8:::ca:f74b:eede:a024 Mozilla/5.0+(Windows+NT+6.1;+WOW64;+Trident/7.0;+rv:11.0;+Maxthon/4.1.2.4000)
2. 处理的目的
以空格将日志文件分割后,将第10个字段的IP中的’%‘及其后边的数字删除
3.hive脚本和shell内容
hive脚本文件
ADD FILE /home/hadoop_admin/program/bash/process_exmovielog_ipv6.sh;
FROM
(
FROM exmovielog
SELECT TRANSFORM(*)
USING 'sh process_exmovielog_ipv6.sh'
AS log_date,s_sitename,s_ip,cs_method,cs_uri_stem,cs_uri_query,c_ip,user_agen,sc_status,sc_substatus,sc_win32_status
)temp
INSERT OVERWRITE TABLE movielog
PARTITION (year,month)
SELECT *,YEAR(temp.log_date),MONTH(temp.log_date);
process_exmovielog_ipv6.sh脚本内容:
#!/bin/bash
#Time : --
#Desc: when do hive SQL , process the ipv6
cat $ | awk -F " " '
{
#获取%好的位置
pos=index($,"%");
if(pos == )
print $" "$"\t"$"\t"$"\t"$"\t"$"\t"$"\t"$"\t"$"\t"$"\t"$"\t"$;
else
{
ip=substr($,,pos-);
print $" "$"\t"$"\t"$"\t"$"\t"$"\t"$"\t"ip"\t"$"\t"$"\t"$"\t"$;
}
}
'
hive streaming 使用shell脚本的更多相关文章
- 写hive sql和shell脚本时遇到几个蛋疼的问题!
错误一: Hive的where后不能用字段的别名, 错误二: hive的groupby中不能用自己定义函数,否则报错(用嵌套select取代) 错误三: 运行:$ ./hive_game_operat ...
- Azkaban实战,Command类型单一job示例,任务中执行外部shell脚本,Command类型多job工作flow,HDFS操作任务,MapReduce任务,HIVE任务
本文转载自:https://blog.csdn.net/tototuzuoquan/article/details/73251616 1.Azkaban实战 Azkaba内置的任务类型支持comman ...
- [转]实现Hive数据同步更新的shell脚本
引言: 上一篇文章<Sqoop1.4.4 实现将 Oracle10g 中的增量数据导入 Hive0.13.1 ,并更新Hive中的主表>http://www.linuxidc.com/Li ...
- 用java代码调用shell脚本执行sqoop将hive表中数据导出到mysql
1:创建shell脚本 touch sqoop_options.sh chmod 777 sqoop_options.sh 编辑文件 特地将执行map的个数设置为变量 测试 可以java代码传参数 ...
- shell脚本中向hive动态分区插入数据
在hive上建表与普通分区表创建方法一样: CREATE TABLE `dwa_m_user_association_circle`( `device_number` string, `oppo_nu ...
- shell脚本监控Flume输出到HDFS上文件合法性
在使用flume中发现由于网络.HDFS等其它原因,使得经过Flume收集到HDFS上得日志有一些异常,表现为: 1.有未关闭的文件:以tmp(默认)结尾的文件.加入存到HDFS上得文件应该是gz压缩 ...
- hive语句嵌入python脚本(进行map和reduce,实现左外连接)
在Hive语句中使用脚本(如python和shell)进行map和reduce:利用命令transform(或者指定map和reduce),配合加入的脚本文件add file 请看:http://ww ...
- Hadoop生态圈-Oozie实战之调度shell脚本
Hadoop生态圈-Oozie实战之调度shell脚本 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客展示案例:使用Oozie调度Shell脚本. 1>.解压官方案例 ...
- 【linux】系统初始化的shell脚本
根据参考网上的一些文章,总结出来一个系统初始化的shell脚本 1.初始化脚本 #!/bin/bash cat << EOF +------------------------------ ...
随机推荐
- ajax加载模块实时刷新的原理
var loadMenu = function(data) { var trs = template.render('menu-list-temp', {'list': data}); ...
- stdafx.h的作用
// stdafx.h : include file for standard system include files,// or project specific include files th ...
- httpclient 支持代理和http & https
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.Inpu ...
- Android xml text 预览属性
只在 AS 中生效 xmlns:tools="http://schemas.android.com/tools" tools:text="I am a title&quo ...
- IT人学习方法论(一):学习方向
07年的时候曾经讲过一节Webcast,名叫<使您成为Windows专家的一些学习习惯 >.直到最近,还经常收到听众关于这一节课反馈和心得的电子邮件,可见学习方法论是大家非常关心的问题.因 ...
- location url 反向代理到来机的其它端口 gitlab
location /nexus { proxy_pass http://127.0.0.1:8081/nexus; } [root@GitMaven conf]# pwd /var/opt/gitla ...
- POJ3691 DNA repair(AC自动机 DP)
给定N个长度不超过20的模式串,再给定一个长度为M的目标串S,求在目标串S上最少改变多少字符,可以使得它不包含任何的模式串 建立Trie图,求得每个节点是否是不可被包含的串,然后进行DP dp[i][ ...
- angularjs 菜鸟教程 版本1.4.6
最简angularJS webstorm代码提示 在 head 里面添加:<script src="https://ajax.googleapis.com/ajax/libs/angu ...
- 在ASP.NET 5中读取配置文件
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 在ASP.NET 5中摒弃了之前配置文件的基础结构,引入了一个全新配置文件系统.今天推荐的文 ...
- 浅学JSON——Json.NET之首次试手
首次遭遇Json格式,缘由项目中用到Json数据,需要进行解析,为此,将Json数据转为了自己较为熟悉的DataTable格式,以此展示至DataGridView中,验证是否成功. 直接上代码: // ...