Apache Pig处理数据示例
Apache Pig是一个高级过程语言,可以调用MapReduce查询大规模的半结构化数据集。
样例执行的环境为cloudera的单节点虚拟机
读取结构数据中的指定列
- 在hdfs上放置一个文件
[cloudera@quickstart ~]$ hdfs dfs -put /etc/passwd /user/cloudera/
- 启动Apache Pig
[cloudera@quickstart ~]$ pig -x mapreduce
grunt>
- 使用Pig Latin进行数据提取
grunt> A = load '/user/cloudera/passwd' using PigStorage(':');
grunt> B = foreach A generate $0, $4, $5 ;
grunt> dump B;
(root,root,/root)
(bin,bin,/bin)
(daemon,daemon,/sbin)
(adm,adm,/var/adm)
(lp,lp,/var/spool/lpd)
(sync,sync,/sbin)
(shutdown,shutdown,/sbin)
(halt,halt,/sbin)
(mail,mail,/var/spool/mail)
(uucp,uucp,/var/spool/uucp)
(operator,operator,/root)
(games,games,/usr/games)
(gopher,gopher,/var/gopher)
(ftp,FTP User,/var/ftp)
(nobody,Nobody,/)
(dbus,System message bus,/)
(vcsa,virtual console memory owner,/dev)
(abrt,,/etc/abrt)
(haldaemon,HAL daemon,/)
(ntp,,/etc/ntp)
(saslauth,Saslauthd user,/var/empty/saslauth)
(postfix,,/var/spool/postfix)
(sshd,Privilege-separated SSH,/var/empty/sshd)
(tcpdump,,/)
(zookeeper,ZooKeeper,/var/lib/zookeeper)
(cloudera-scm,Cloudera Manager,/var/lib/cloudera-scm-server)
(rpc,Rpcbind Daemon,/var/cache/rpcbind)
(apache,Apache,/var/www)
(solr,Solr,/var/lib/solr)
(hbase,HBase,/var/lib/hbase)
(hdfs,Hadoop HDFS,/var/lib/hadoop-hdfs)
(yarn,Hadoop Yarn,/var/lib/hadoop-yarn)
(hive,Hive,/var/lib/hive)
(sentry,Sentry,/var/lib/sentry)
(impala,Impala,/var/lib/impala)
(mapred,Hadoop MapReduce,/var/lib/hadoop-mapreduce)
(hue,Hue,/usr/lib/hue)
(flume,Flume,/var/lib/flume-ng)
(spark,Spark,/var/lib/spark)
(sqoop,Sqoop,/var/lib/sqoop)
(sqoop2,Sqoop 2 User,/var/lib/sqoop2)
(oozie,Oozie User,/var/lib/oozie)
(mysql,MySQL Server,/var/lib/mysql)
(kms,Hadoop KMS,/var/lib/hadoop-kms)
(llama,Llama,/var/lib/llama)
(httpfs,Hadoop HTTPFS,/var/lib/hadoop-httpfs)
(gdm,,/var/lib/gdm)
(rtkit,RealtimeKit,/proc)
(pulse,PulseAudio System Daemon,/var/run/pulse)
(avahi-autoipd,Avahi IPv4LL Stack,/var/lib/avahi-autoipd)
(cloudera,,/home/cloudera)
grunt>
……
其中dump的作用是将内容转存到屏幕。
- 将结果转存到HDFS中
grunt> store B into 'userinfo.out';
对数据进行分组(group by)操作
- 读入文件,并使用AS来制定列名
grunt> passwd = load '/user/cloudera/passwd' using PigStorage(':') AS (user:chararray,passwd:chararray, uid:int, gid:int, userinfo:chararray, home:chararray, shell:chararray);
- 进行GROUP BY操作
grunt> grp_shell = GROUP passwd BY shell;
grunt > dump grp_shell;
(/bin/bash,{(root,x,0,0,root,/root,/bin/bash),(httpfs,x,481,480,Hadoop HTTPFS,/var/lib/hadoop-httpfs,/bin/bash),(llama,x,500,481,Llama,/var/lib/llama,/bin/bash),(kms,x,482,482,Hadoop KMS,/var/lib/hadoop-kms,/bin/bash),(mysql,x,27,27,MySQL Server,/var/lib/mysql,/bin/bash),(mapred,x,489,488,Hadoop MapReduce,/var/lib/hadoop-mapreduce,/bin/bash),(impala,x,490,489,Impala,/var/lib/impala,/bin/bash),(yarn,x,493,492,Hadoop Yarn,/var/lib/hadoop-yarn,/bin/bash),(hdfs,x,494,493,Hadoop HDFS,/var/lib/hadoop-hdfs,/bin/bash),(cloudera,x,501,501,,/home/cloudera,/bin/bash)})
(/bin/sync,{(sync,x,5,0,sync,/sbin,/bin/sync)})
……
- 对分组结果进行计数(count)
grunt> counts = FOREACH grp_shell GENERATE group, COUNT(passwd);
grunt> DUMP counts;
(/bin/bash,10)
(/bin/sync,1)
(/bin/false,1)
(/sbin/halt,1)
(/sbin/nologin,37)
(/sbin/shutdown,1)
模糊匹配行
- 使用FILTER过滤匹配行
grunt> bashs = FILTER passwd by shell MATCHES '.*bash+.*';
grunt> DUMP bashs;
- 对结果进行转存
grunt> store bashs into 'test_bashs.out';
[cloudera@quickstart ~]$ hdfs dfs -ls /user/cloudera/test_bashs.out
Found 2 items
-rw-r--r-- 1 cloudera cloudera 0 2017-02-21 18:41 /user/cloudera/test_bashs.out/_SUCCESS
-rw-r--r-- 1 cloudera cloudera 531 2017-02-21 18:41 /user/cloudera/test_bashs.out/part-m-00000
[cloudera@quickstart ~]$ hdfs dfs -cat /user/cloudera/test_bashs.out/part-m-00000
root x 0 0 root /root /bin/bash
hdfs x 494 493 Hadoop HDFS /var/lib/hadoop-hdfs /bin/bash
yarn x 493 492 Hadoop Yarn /var/lib/hadoop-yarn /bin/bash
impala x 490 489 Impala /var/lib/impala /bin/bash
mapred x 489 488 Hadoop MapReduce /var/lib/hadoop-mapreduce /bin/bash
mysql x 27 27 MySQL Server /var/lib/mysql /bin/bash
kms x 482 482 Hadoop KMS /var/lib/hadoop-kms /bin/bash
llama x 500 481 Llama /var/lib/llama /bin/bash
httpfs x 481 480 Hadoop HTTPFS /var/lib/hadoop-httpfs /bin/bash
cloudera x 501 501 /home/cloudera /bin/bash
总结
- pig处理方式类似于awk或者sed的行处理方式,其优势在于可以调用MapReduce对HDFS中的文件进行处理和分析,降低了使用MR的门槛
- 筛选过程中支持正则表达式,增加了处理数据的灵活性
- 对于需要定期执行的操作,可以写成pig脚本,使用
pig -x mapreduce exec script.pig的方式调用就可以了
Apache Pig处理数据示例的更多相关文章
- Apache Hive处理数据示例
继上一篇文章介绍如何使用Pig处理HDFS上的数据,本文将介绍使用Apache Hive进行数据查询和处理. Apache Hive简介 首先Hive是一款数据仓库软件 使用HiveQL来结构化和查询 ...
- 玩转大数据系列之Apache Pig高级技能之函数编程(六)
原创不易,转载请务必注明,原创地址,谢谢配合! http://qindongliang.iteye.com/ Pig系列的学习文档,希望对大家有用,感谢关注散仙! Apache Pig的前世今生 Ap ...
- 玩转大数据系列之Apache Pig如何与Apache Solr集成(二)
散仙,在上篇文章中介绍了,如何使用Apache Pig与Lucene集成,还不知道的道友们,可以先看下上篇,熟悉下具体的流程. 在与Lucene集成过程中,我们发现最终还要把生成的Lucene索引,拷 ...
- 玩转大数据之Apache Pig如何与Apache Lucene集成
在文章开始之前,我们还是简单来回顾下Pig的的前尘往事: 1,Pig是什么? Pig最早是雅虎公司的一个基于Hadoop的并行处理架构,后来Yahoo将Pig捐献给Apache(一个开源软件的基金组 ...
- Apache Pig和Solr问题笔记(一)
记录下最近两天散仙在工作中遇到的有关Pig0.12.0和Solr4.10.2一些问题,总共有3个,如下: (1)问题一: 如何Pig中使用ASCII和十六进制(hexadecimal)的分隔符进行加载 ...
- 【java】org.apache.commons.lang3功能示例
org.apache.commons.lang3功能示例 package com.simple.test; import java.util.Date; import java.util.Iterat ...
- 使用poi读取excel数据示例
使用poi读取excel数据示例 分两种情况: 一种读取指定单元格的值 另一种是读取整行的值 依赖包: <dependency> <groupId>org.apache.poi ...
- Apache Pig入门学习文档(一)
1,Pig的安装 (一)软件要求 (二)下载Pig (三)编译Pig 2,运行Pig (一)Pig的所有执行模式 (二)pig的交互式模式 (三)使用pig脚本 ...
- 如何给Apache Pig自定义UDF函数?
近日由于工作所需,需要使用到Pig来分析线上的搜索日志数据,散仙本打算使用hive来分析的,但由于种种原因,没有用成,而Pig(pig0.12-cdh)散仙一直没有接触过,所以只能临阵磨枪了,花了两天 ...
随机推荐
- Memcached源码分析之线程模型
作者:Calix 一)模型分析 memcached到底是如何处理我们的网络连接的? memcached通过epoll(使用libevent,下面具体再讲)实现异步的服务器,但仍然使用多线程,主要有两种 ...
- sql语句的截取字符串下标是从1开始
这里的指的sqliter数据库 substr函数 substr(date,1,10)
- TCP/IP详解--拥塞控制 & 慢启动 快恢复 拥塞避免
TCP的拥塞控制 1. 拥塞:即对资源的需求超过了可用的资源.若网络中许多资源同时供应不足,网络的性能就要明显变坏,整个网络的吞吐量随之负荷的增大而下降. 拥塞控制:防止过多的数据注入到网络中,这样 ...
- UVa 10360 - Rat Attack
题目大意:有一个1025*1025的矩阵,每个矩阵元素保存这个点上老鼠的数量.现有一种气体炸弹,能覆盖“半径”为d的矩形,在这个范围内可以消灭所有的老鼠,让你找出合适的放置炸弹的位置使的消灭的老鼠数量 ...
- 解析xml的问题未解决
工作上需要解析xml,目前的逻辑是:解析xml到对象中,然后对象再插入数据库.但这存在内存溢出的风险. 今天做的另外一件事是将循环用到工作上,暂时还没有测试,是否能保证程序的重启.有待观察 ##### ...
- iOS UITabBar
参考文章:http://www.cnblogs.com/wendingding/p/3775488.html 简单明了,不用再总结了.
- windy数(bzoj 1227)
Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? In ...
- 我对CSS中的BFC的理解
1.什么是BFC 其实在老师让我们写这篇叫BFC的时候,我跟本不知道有什么BFC的东西. 后来,我找了一些资料,知道了,BFC是Block Formatting Context (块级格式化上下 ...
- JMeter使用代理录制脚本
用JMeter做接口测试,有时候接口数量比较多,用录制方式可以节省很多时间,录制接口可以配合badboy使用,但是badboy访问的浏览器是基于ie6的,基本上现在的网站不会对ie6做兼容了,使用代理 ...
- php循环生成的表单如何获得其各项值案例
思路:输入框和按钮是用for循环生成的,不但要获取输入框里的各项值,并且要获取点击按钮的值,要知道是那个按钮被点击了,这里以生成5个为例.如图: 这是提交页面,点击的是“小米”. 这是显示结果,测试显 ...