《云计算与大数据概论》课件第7章 pig.pptx
《《云计算与大数据概论》课件第7章 pig.pptx》由会员分享,可在线阅读,更多相关《《云计算与大数据概论》课件第7章 pig.pptx(31页珍藏版)》请在文库网上搜索。
1、目标了解Pig的作用了解Pig的设计思想了解Pig的运行模式掌握PigLatin的基础知识掌握Pig脚本的运行方法Pig概述Pig是Hadoop的一个扩展,它简化了Hadoop的编程,提供了一套高级数据处理语言,且保持了Hadoop易于扩展与可靠的特性。Pig有两个主要的组成部分:高级数据处理语言PigLatin;依据可供抽样的评价机制编译与运行PigLatin脚本的编译器。PigLatin是Pig的脚本语言,主要特性:易于编程、自动优化、可扩展性Pig的用途Pig的主要应用场景是传统的数据流处理、原生数据研究和迭代处理。另外,Pig还可以用来处理离线用户数据,对用户行为进行预测,比如扫描所有
2、的用户和网站的交互数据,将用户进行分类,对每一类建立一个数学模型,通过分析该模型,可以预测某类用户对各种类型的广告或新闻会作出怎样的反应,从而有针对性地展示这类用户感兴趣的广告。Pig采用面向数据批处理的模式,因此,如果需要处理大量的数据,如GB或者TB数量级的数据,则Pig是个不错的选择,但对于需要写单条或者少量记录的任务,Pig并非十分适用。Pig的设计思想Pig的主要设计思想:不管数据是否有元数据,Pig都可以操作;不管数据是关系型的、嵌套型的或者是非结构化的,Pig都可以操作;Pig还应该很容易扩展,不仅可以操作文件,还可以操作键值型的存储和数据库等。Pig的设计目标并非是只能用于Ha
3、doop平台。目前,Pig支持用户自定义字段类型转换函数、用户自定义聚合方法函数和用户自定义条件式函数,允许用户随时整合加入自己的代码。Pig还有一个优化控制器,可以重新排列脚本中的操作过程以达到更好的性能,如果用户不希望进行这种优化,也可以很容易地将该控制器关闭,就不会改变执行过程。Pig的运行模式-1Pig有两种运行模式:Local模式和MapReduce模式,默认使用MapReduce模式。当Pig在Local模式下运行时,Pig只访问本地一台主机;而当Pig在MapReduce模式下运行时,它将访问一个Hadoop集群和HDFS的安装位置,此时Pig将自动对这个集群进行分配和回收。Pi
4、g的Local模式和MapReduce模式都有三种运行方式,分别为GruntShell方式、脚本文件方式和嵌入式程序方式。Pig的运行模式-21.Local模式在Local模式下,Pig在单个JVM中访问本地文件系统,该模式用于测试或处理小规模数据集。1)GruntShell方式在Linux终端中执行如下命,开启Pig的GruntShell窗口。$pigxlocalGruntShell窗口与Windows系统中的Dos窗口非常类似,用户可以在这里逐条输入命令对数据进行操作。Pig的运行模式-32)脚本文件方式该方式以脚本文件来进行Pig命令的批处理运行,这些脚本文件实际上是Pig命令的集合。执
5、行如下命令,可在本地模式下运行Pig脚本。$Pigxlocalscript.Pig其中,script.Pig是要运行的Pig脚本,这里需要正确指定该Pig脚本的位置,否则系统将无法识别,例如,假设Pig脚本位于/root/PigTmp目录下,则需要写出此脚本的完整路径“/root/PigTmp/script.Pig”。Pig的运行模式-43)嵌入式程序方式与运行普通的Java程序相同,首先需要编写特定的Java程序,并将其编译生成对应的.class文件或package包,然后调用main函数运行该程序。可以使用如下命令,对Java源文件进行编译。$javaccpPig*.*.*core.jar
6、local.javaPig*.*.*core.jar为Java源文件编译过后的打包文件,位于Pig安装目录下,local.java为用户编写的Java源文件,两个文件都需要正确指定其位置。编译完成后,Java会生成一个文件local.class,可以使用如下命令,调用此文件。$javacpPig*.*.*core.jar:.localPig的运行模式-52.MapReduce模式在MapReduce模式下,Pig可以访问整个Hadoop集群,处理大规模数据集。1)GruntShell方式在Linux终端上执行如下命令,就可以进入GruntShell的MapReduce模式。$Pigxmapre
7、duce2)脚本文件方式执行如下命令,可以在MapReduce模式下运行Pig脚本文件。$Pigxmapreducescript.Pig3)嵌入式程序方式与Local模式相同,在MapReduce模式下运行嵌入式程序同样需要经过编译和执行两个步骤,可以使用如下命令完成相应操作。javaccpPigxxxcore.jarmapreduce.javajavacpPigxxxcore.jar:.mapreducePig LatinPigLatin是Pig针对MapReduce算法(框架)开发的一套Shell脚本,类似用户熟悉的SQL语句,这套脚本可以对加载完毕的数据进行排序、过滤、求和、分组(gro
8、upby)、关联(joining)等操作。PigLatin是一种数据流语言,每一步处理都会产生一个新的数据集或者一个新的关系,比如下面这个脚本:input=loaddata该脚本中,“input”是加载数据集data之后的结果的关系名称,这里的关系名称即指通常所说的别名,但需要注意的是,关系名称与变量不同,一旦声明了,这个名称就是不变的了。Pig中的另一个常见概念是字段名称,它是一个关系所包含的字段(或者称为列)的名称。关系名称和字段名称都必须以字母字符开头,后面可以跟上零个或多个字母、数字或者下划线。Pig中的关系名称和字段名称是大小写敏感的,例如“A=loadfoo;”和“a=loadfo
9、o;”是不等价的;但是,Pig中的关键字是不分大小写的,例如LOAD和load就是等价的。Pig Latin读写和检测操作符PigLatin中使用的读/写操作符如表:操作符操作符说明明LOAD语法:alias=LOADfileUSINGfunctionASschema;作用:从文件中装载数据。如果不使用USING选项,则默认使用PigStorage装载函数。数据可以使用AS选项给出schemaLIMIT语法:alias=LIMITaliasn;作用:限制元素个数为n,即当作用于alias时,LIMIT返回前n个元素,如不使用,则不能保证哪些元素会被返回DUMP语法:DUMPa1ias;作用:在
10、屏幕上显示数据STORE语法:STOREaliasINTOdirectoryUSINGfunction;作用:将一个关系中的数据存储到一个目录中,并把关系存储在以“partnnnnn”为名的文件中,如果不使用USTNG选项特别指定,则默认使用PigStorage存储函数PigLatin入门例子:在Pig安装目录下有一个文件tutoria1/data/excitesmall.log,其中的数据分为3列,中间用制表符分隔,第一列为用户ID,第二列为Unix时间戳,第三列则为查询记录。首先,从该文件的4500条记录中,选取一段样本如下。3F8AAC2372F6941C970916091301 bac
11、3F8AAC2372F6941C970916091354 bloodalcoholcontent3F8AAC2372F6941C9709160914253F8AAC2372F6941C9709160915453F8AAC2372F6941C9709160934483F8AAC2372F6941C970916093544 breathalizers3F8AAC2372F6941C970916093551 breathalizers3F8AAC2372F6941C970916093642 breathalizers3F8AAC2372F6941C970916093724 minorsinposse
12、sion3F8AAC2372F6941C970916093848 minorsinpossesion3F8AAC2372F6941C970916093904 mip然后,在GruntShell中输入如下命令,将数据装载到一个称为log的别名中。gruntlog=LOADtutoria1/data/excitesmall.LogAS(user,time,query);LIMIT命令允许指定有多少元组(行)用于返回结果。本例中,如果要查看别名log的4个元组,则可使用以下命令。grunt1mt=LIMITlog4;gruntDUMP1mt;返回结果如下。2A9EABFB35F5B954970916
13、105432+mdfoods+proteinsBED75271605EBD0C970916001949yahoochatBED75271605EBD0C970916001954yahoochatBED75271605EBD0C970916003523yahoochat执行以下命令,完成统计每个用户发起的查询个数。gruntlog=LOADtutorial/data/excitesmall.logAS(user:chararray,time:long,query:chararray);gruntgrpd=GROUPlogBYuser;gruntcntd=FOREACHgrpdGENERATEgr
14、oup,COUNT(log);gruntSTOREcntdINTOoutput;部分统计结果如下。002BB5A52580A8ED18005BD9CD3AC6BB381800A08A54CD03EB953011ACA65C2BF70B2501500FAFE317B7C0150158F8ACC570947D3018FBF6BFB213E681019E9463F669596310Pig Latin数据类型和schemaPig有6个简单的原子类型和3个复杂的类型。原子类型包括数字标量、字符串和二进制对象,类型间转换的实现和常规方式相同,除非特别声明,字段默认为bytearray。数据数据类型型说明明
15、int整数,存储一个4个字节大小的带符号整数,如36long长整型,存储一个8个字节大小的带符号整数,以一个结尾为L的整数来表示,如50000000000Lfloat浮点数,用4个字节存储值,通过一个浮点数加上f来表示,例如3.14fdouble双精度浮点数,用8个字节存储值,可以使用简单的格式表示,例如3.25628hararray字符串或者字符数组,以加单引号的一系列字符来表示,如food,也可以通过转义符反斜杠表示一些特定的字符,例如n表示回车bytearray一组字节,通过封装Java的byte的DataByteArray类来实现,没有办法单独定义一个bytearray常量3个复杂数据
16、类型是元组(tuple)、包(bag)和映射表(map)。数据数据类型型说明明例子例子tuple(元(元组)一个定长的包含有序Pig数据元素的集合,一个元组相当于SQL中的一行,而元组的字段相当于SQL中的列,其表现形式为逗号分隔的字段,前后用小括号包裹(helloworld,12.5,2,123)bag(包)(包)元组的无序集合(允许元组重复),表示为逗号分隔的元组,前后由大括号包裹,一个包中的元组不必有相同的schema,甚至字段也不必相同(hello world,12.5,2,123),(2.87,byeworld,10)map(映射)(映射)一 组 键 值 对,键 必 须 是 唯 一
17、的 字 符 串(chararray),值可以是任意类型的数据name#bob,age#21除了为字段声明类型,schema还可以为字段命名,使它们更易于引用,用户可以在LOAD、STREAM和FOREACH命令中使用AS关键字为关系定义字段名。在定义schema时,如果遗漏了类型,Pig会默认将bytearray作为最常用的类型。也可以不设置字段的名称,此时该字段的状态为未命名,只能通过位置来引用它。Pig Latin表达式和函数将表达式和函数应用于数据字段,可以计算出各种数值。最简单的表达式为常数值。表达式也可以引用一个字段的值,既可以通过名字直接引用命名字段的值,也可以使用$n命令引用一个
18、未命名的字段,这里的n是该字段在元组中的位置,从0开始计数。例如,关系log有3个命名的字段,分别为user、time和query,则可以通过“time”或者“$1”来引用time字段。Pig还支持标准算术表达式、比较表达式、条件表达式、类型转换表达式和布尔表达式,它们常见于大多数流行的编程语言中,如表表达式表达式说明明12,19.2,hello world常数值,没有小数点的数值为int型,数字之后带有l或L则为long型;带有小数点的数值为double型,数字之后有f或者F则为float型+,-,*,/加减乘除+x,-x负号(),改变一个数字的符号t(x)将x的值转换为t类型x%yx被y除
19、的余数(x?y:z)如果x为真则返回y,否则为z,该表达式必须用圆括号包裹=,!=,=分别为等于,不等于,小于,大于,不大于,不小于x matches regex与字符串x匹配的正则表达式x is nullx is not null检查x是否为空x and y,x or ynot x布尔值:与、或、非Pig也支持函数,Pig的内置函数及用法如下:avg用法avg(expression):计算单列值的平均数,忽略NULL值,在使用groupall或group单列后可使用。contact用法contact(expression1,expression2):将两个字段的值拼接为一个字符串,如果其中一
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 云计算与大数据概论 云计算与大数据概论课件第7章 pig 计算 数据 概论 课件