与猪(pig)共舞
猪在吃东西的时候稍有浪费,pig 也有类似的情况.
pig执行时消耗的内存,一般对没有压缩的数据,将会占用4倍于本地磁盘空间的内存空间。Pig中的NULL与SQL中的NULL概念一样,类型转换的语法与Java中的语法是一样的,是强类型的。
过程函数
Pig Latin 是一种数据流语言,每个处理步骤都产生一个新的数据集,或产生一个新的关系。无论关系还是字段都是以字母字符开头,大小写敏感,注释和java相同。
任何一种数据流处理的第一步都是指定输入,pig通过load语句完成。默认加载函数是PigStorage,加载存放在HDFS中且以制表符分割的文件,可以使用相对路径或绝对路径。 更多情况是应用Using 语句指定指定加载函数,例如 Using HBaseStorage() 是从HBase中加载数据。 进一步,使用as语句确定加载的数据指定模式。同时,PigStorage和TextLoader这两个内置的加载函数是支持正则匹配的。 存储时使用Store 语句,是Load的镜像语句。标准输出使用Dump语句。
关系操作
foreach 语句接受一组表达式,在数据管道中将它们应用到每条记录中,可以使用自定义函数UDF,每一条处理结果是一条新的tuple。 Filter 可以选择将哪些数据保留到用户的数据流中,可以使用正则表达式,不可以在foreach中使用。 Group:将包含了特定的健所对应的值的所有记录封装到一个bag中,group中的字段是包含每个键值的tuple。 order by 按照一个或多个健对数据进行排序,总是会引起数据流通过一个reduce阶段,因此将所有相等的记录收集在一起是必要的。 distinct 对这个记录去重,会出发一个reduce处理过程。 jion 将一个输入的数据和另一个输入的数据放在一起,当键值相等的时候,数据会被连接在一起,没有匹配到的数据会被去掉,同样会触发一个新的reduce过程。 limit 获得指定的数据条数 sample 通过百分比获得抽样数据。 parallel 附在以上的操作符后,只设置reduce阶段的并行执行。
UDF可以java或python实现,PiggyBank包含了用户贡献的UDF集合。在脚本中通过register 命令完成这个注册过程,define命令来简化路径,invokeForxxx 方法来实现静态java函数的调用。
面对输入数据的倾斜问题,可以采用skew join的方法,但是使用skew join,可能会损失5%的性能。如果在下一步的处理中要求具有相同健的所有记录需要在同一个文件片中,就不能使用skew join了。
cogroup 是基于一个键收集多个输入的记录,结果是一条包含一个键和每个输入的一个数据包bag的记录。(和json类似)
union只是将两个数据集合并到一起,不会像Join那样去重。
cross 相当于叉乘运算,GFCross是一个内置的UDF。
Stream 可以在数据流中插入一个个性化的可执行任务,而mapreduce命令可在数据流中直接添加MapReduce任务,可以使用包含mapreduce 任务的jar文件。
pig对join,union,cross或cogroup 不会使用multiquery,只有对hadoop组合器才会采用。
set 设置执行MapReduce任务的环境变量,同时可以设置Partitioner 在shuffle阶段对记录进行划分,然后传给reducer。可以有宏定义和include其他pig latin 脚本。
pig的开发工具
Eclipse 查件 http://code.google.com/p/pig-eclipse
Emacs http://github.com/cloudera/piglatin-mode
TextMate http://www.github.com/kevinweil/pig.tmbundle
Vim http://www.vim.org/scripts/script.php?script_id=2186

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Flex4的可视化显示对象
flex3中用addChild(child:DisplayObject) 增加显示对象,flex4中用addElement(element:IVisualElement)。绝大多数的flex3显示控件都是从DispalyObject继承的,所以在flex3中增加显示对象非常容易。一旦到了flex4,要显示sprite shape Bitmap都会报错,因为都没有实现IVisualElement接口。习惯了flex3,再用flex4的时候还真有点不适应了。 从adobe帮助文档可以看到直接实现IVisualElement接口的只有如下几个, GraphicElement, SpriteVisualElement, StyleableTextField, UIComponent, UIMovieClip,spark.primitives名字空间下的所有类也间接实现了IVisualElement。 直接实现的类都比较轻量级的,所以把你要显示的sprite等加入到这些类中,再把这些类加入可视对象即可 var spr:Sprite = new Sprite(); var sve:Spr...
- 下一篇
会飞的猪(Pig)
版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载。 https://blog.csdn.net/wireless_com/article/details/42060379 猪会飞么? 提高pig的性能,让猪飞起来有如下办法:1.尽早地并经常地进行过滤2.尽早地并经常地进行映射3.正确并合理地使用Join4.选择正确的数据类型,合适的并行值5.调整pig 的性能属性:pig.cachedbag.menusage 和pig.skewedjoin.reduce.memusage6.对中间结果进行压缩 Describe 命令会显示脚本中指定关系的模式。explain 可以深入到pig内部看如何将用户的脚本编译成MapReduce任务的。 illustrate 对用户的数据进行抽样并且对抽样的数据执行用户的脚本。 在提交的hadoop集群执行之前,pig需要消耗几秒钟来解析脚本,这些M/R任务真正运行时才会显示在JobTracker页面上。 PigUnit提供了一个集成到JUnit中的单元测试框架,在0.8版本引入的。 Hadoop降低了IO约束但...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS8安装Docker,最新的服务器搭配容器使用
- Hadoop3单机部署,实现最简伪集群
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8编译安装MySQL8.0.19