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. DownloadManager 版本更新,出现 No Activity found to handle Intent 的解决办法

    项目中,进行版本更新的时候,用的是自己写的下载方案,最近看到了使用系统服务 DownloadManager 进行版本更新,自己也试试. 在下载完成以后,安装更新的时候,出现了一个 crash,抓取的 ...

  2. 查看Linux最近重启的时间

    最近实验室老是掉电,想查看服务器什么时候重启的,于是在网上找了一些资料.有两种方式可以查看服务器重启. (1) who -b (2) last reboot |head -1

  3. 分析java堆

    内存溢出(OutOfMemory) OOM 堆溢出 直接内存溢出 永久区溢出

  4. dotnet调用node.js写的socket服务(websocket/socket/socket.io)

    https://github.com/jstott/socketio4net/tree/develop socket.io服务端node.js,.里面有js写的客户端:http://socket.io ...

  5. IOS 创建和设置pch

    1.添加pch文件 2.修改工程配置文件 Building Settings->All->Apple LLVM 6.0 -Language -> Prefix Header

  6. permutation test

  7. 利用DIV+CSS制作网页过程中常用的基本概念及标签使用细节

    CSS主要用于对HTML文件功能的补充及扩展,其作用就是对HTML文件中各种排版进行设置,达到对网页中字体.颜色.背景.图片等的控制,使网页能够完全依照设计者的想法来显示. CSS可以控制网页的显示, ...

  8. 解决windows 10 9926 中vmware安装的虚拟机无法桥接上网的问题

    从windows 10 出来之后就安装了使用,但一直有一个问题直到9926也没有解决,那就是vmware下的虚拟机无法桥接上网,但NAT方式正常.发现有一种办法可以实现桥接方式上网.但这种方式下本机与 ...

  9. CRS-2800 CRS-4000

    I was installing Clusterware using ASM on VMware shared disks.  When I created the independent persi ...

  10. #DP# ----- OpenJudge最大子矩阵

    OpenJudge 1768:最大子矩阵 总时间限制: 1000ms   内存限制: 65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 ...