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处理数据示例的更多相关文章

  1. Apache Hive处理数据示例

    继上一篇文章介绍如何使用Pig处理HDFS上的数据,本文将介绍使用Apache Hive进行数据查询和处理. Apache Hive简介 首先Hive是一款数据仓库软件 使用HiveQL来结构化和查询 ...

  2. 玩转大数据系列之Apache Pig高级技能之函数编程(六)

    原创不易,转载请务必注明,原创地址,谢谢配合! http://qindongliang.iteye.com/ Pig系列的学习文档,希望对大家有用,感谢关注散仙! Apache Pig的前世今生 Ap ...

  3. 玩转大数据系列之Apache Pig如何与Apache Solr集成(二)

    散仙,在上篇文章中介绍了,如何使用Apache Pig与Lucene集成,还不知道的道友们,可以先看下上篇,熟悉下具体的流程. 在与Lucene集成过程中,我们发现最终还要把生成的Lucene索引,拷 ...

  4. 玩转大数据之Apache Pig如何与Apache Lucene集成

     在文章开始之前,我们还是简单来回顾下Pig的的前尘往事: 1,Pig是什么? Pig最早是雅虎公司的一个基于Hadoop的并行处理架构,后来Yahoo将Pig捐献给Apache(一个开源软件的基金组 ...

  5. Apache Pig和Solr问题笔记(一)

    记录下最近两天散仙在工作中遇到的有关Pig0.12.0和Solr4.10.2一些问题,总共有3个,如下: (1)问题一: 如何Pig中使用ASCII和十六进制(hexadecimal)的分隔符进行加载 ...

  6. 【java】org.apache.commons.lang3功能示例

    org.apache.commons.lang3功能示例 package com.simple.test; import java.util.Date; import java.util.Iterat ...

  7. 使用poi读取excel数据示例

    使用poi读取excel数据示例 分两种情况: 一种读取指定单元格的值 另一种是读取整行的值 依赖包: <dependency> <groupId>org.apache.poi ...

  8. Apache Pig入门学习文档(一)

    1,Pig的安装    (一)软件要求    (二)下载Pig      (三)编译Pig 2,运行Pig    (一)Pig的所有执行模式    (二)pig的交互式模式    (三)使用pig脚本 ...

  9. 如何给Apache Pig自定义UDF函数?

    近日由于工作所需,需要使用到Pig来分析线上的搜索日志数据,散仙本打算使用hive来分析的,但由于种种原因,没有用成,而Pig(pig0.12-cdh)散仙一直没有接触过,所以只能临阵磨枪了,花了两天 ...

随机推荐

  1. cookie设置

    问题: cookie设置好后,谷歌浏览器下-->只有本页面有值,但是在其它浏览器下正常. $.cookie("userName",$("#loginName&quo ...

  2. mysql,mybatis使用中遇到的类型转化的问题

    产生原因还没有明白,先记录一下. 使用DATEDIFF函数,计算两个日期的时间差.在mybatis中,resultType 是map.在代码中,根据map的key取值的时候. 在mysql 5.5.3 ...

  3. Jconsole连接远程服务器

    本地服务器.win7,安装JDK8 远程服务器:centos6.5 ,tomcat7,java8 配置方法: 1)修改远程服务器的~/tomcat/bin/catalina.sh  文件 在 # -- ...

  4. java基础面试

    1. String类为什么是final的. 安全性:如果字符串是可变的,那么会引起很严重的安全问题.譬如,数据库的用户名.密码都是以字符串的形式传入来获得数据库的连接,或者在socket编程中,主机名 ...

  5. logback的日志配置文件

    日志配置文件logback.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE con ...

  6. MySQL连接数据库报时区错误:java.sql.SQLException: The server time zone value

    连接MySQL数据库时报以下时区错误信息: java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized ...

  7. php中利用array_filter过滤数组为空值

    [导读] 在我们开发过程中,判断数组为空时你会想到什么方法呢?首先想到的应该是empty函数,不过直接用empty函数判断为空是不对的,因为当这个值是多维数的时候,empty结果是有值的.其实我们可以 ...

  8. Eclipse 打开文件所在文件夹

    右击文件 > Show In > System Explorer

  9. OGG数据仓库以及单向复制(二)

    Configure Extract(提取)      Process in Source system 配置capture(捕获)参数 Edit extract process parameter G ...

  10. VS生成时复制文件到指定目录

    1.右键项目属性,选择生成事件,再点击"编辑后生成事件",可以直接在编辑框内填写命令行,如图: 2.也可以在弹出的编辑框内,写命令,$(ProjectDir)这种是系统的宏路径,具 ...