本文,我们将以一个具体案例说明,如何通过Pig——这一便捷的框架,进行数据的处理与分析工作。
(1) 上传待分析文件到 hdfs:
比如我们要处理的用户上网日志信息,下载地址,上网日志数据(hadoop用);
[root@hadoop0 ~]# hadoop fs -put /HTTP_20130313143750.dat /wlan
该上网日志信息的字段,类型及含义如下:
- 0、reportTime、long、记录报告时间戳
- 1、msisdn、String、手机号码
- 2、apmac、String、AP mac
- 3、acmac、String、AC mac
- 4、host、String、访问的网址
- 5、siteType、String、网址种类
- 6、upPackNum、long、上行数据包数、单位:个
- 7、downPackNum、long、下行数据包数、单位:个
- 8、upPayLoad、long、上行总流量,单位:byte
- 9、downPayLoad、long、下行总流量、单位:byte
- 10、httpStatus、String、http response 的状态
(2)进入Pig 命令行环境(grunt)
[root@hadoop0 ~]# pig
(3)将hdfs 中待处理的数据转换为pig可以处理的模式
A = load '/wlan' as (t0:long, msisdn:chararray, t2:chararray, t3:chararray, t4:chararray, t5:chararray, t6:long, t7:long, t8:long, t9:long, t10:chararray); # A 为别名,便于引用
查看变量内容拼,使用
dump A;
查看输出日志信息,我们可见其处理依赖的仍然是MapReducer.(4)提取待分析的有用字段信息;
B = foreach A generate msisdn, t6, t7, t8, t9;
(这样的按步执行,类似中学数学题形式的按步执行,我们就会发现其中的优越之处了,解决一些复杂的业务时,按照SQL的方式无法一步给出结果)
(5)指定关键字分组
C = group B by msisdn;
(6)流量汇总
D = foreach C generate group, SUM(B.t6), SUM(B.t7), SUM(B.t8), SUM(B.t9);
(7)将结果存储到hdfs中:
store D into '/wlan_res'
注:
(1)无论是
load
(从hdfs中加载数据)还是store
(存储数据到hdfs),Pig 对 hdfs 有十分方便的交互;(2)Pig 的数据处理操作远不止于这些,比如排序:
E = order D by group;