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. Java编程思想非主流知识点

    1. Java中的多态性理解(注意与C++区分) Java中除了static方法和final方法(private方法本质上属于final方法,因为不能被子类访问)之外,其它所有的方法都是动态绑定,这意 ...

  2. EF的 JOIN操作

    ef join 用法 var customers = DB.Customer.Join(DB.Commission, cst => cst.CommissionId,               ...

  3. UVa 10812 - Beat the Spread!

    题目大意:知道一场橄榄球比赛比分的和以及差的绝对值,算出这两个数.注意判断结果的可能性(比分为非负数). #include <cstdio> int main() { #ifdef LOC ...

  4. Android布局及属性归总(查询用)

    常见布局 LinearLayout    线性布局        子元素任意,组织成一个单一的水平或垂直行,默认为水平方向TableLayout    表格布局        子元素为<Tabl ...

  5. 基于Python,scrapy,redis的分布式爬虫实现框架

    原文  http://www.xgezhang.com/python_scrapy_redis_crawler.html 爬虫技术,无论是在学术领域,还是在工程领域,都扮演者非常重要的角色.相比于其他 ...

  6. Bmob 之 简单使用

    1. pod pod 'BmobSDK' 与 pod "BmobSDK" 好像没什么区别 2. 导入 在AppDelegate中: #import <BmobSDK/Bmob ...

  7. centos7.0之Lnmp和Lamp

    首先配置防火墙 CentOS 7.0默认使用的是firewall作为防火墙 1.关闭firewall: systemctl stop firewalld.service #停止firewall sys ...

  8. 互信息应用于SNP特征选择的局限

    互信息已广泛应用于特征选择问题,但应用在 SNP 选择上还存在着一些局限.第一,互信息只能衡量一个 SNP 组合与表型的相关性, 无法衡量多个 SNP 与表型的相关性.第二, 利用互信息排序 SNP ...

  9. js原生设计模式——8单例模式

    1.单例模式——在js中就是指的单个对象,可用于命名空间声明 2.示例 <!DOCTYPE html><html lang="en"><head> ...

  10. Bootstrap3网上api文档地址

    http://v3.bootcss.com/css/#forms http://www.ziqiangxuetang.com/bootstrap/bootstrap-forms.html 另附加fa字 ...