当前位置:首页 > 思想汇报 > [基于Pig,Latin语言的海量数据分析] 海量数据分析
 

[基于Pig,Latin语言的海量数据分析] 海量数据分析

发布时间:2019-02-21 03:55:49 影响了:

  摘要:随着互联网的飞速发展,分析海量数据的需求变得十分迫切。针对分布式数据库昂贵及Map-Reduce计算框架中代码难以维护、重用等问题,雅虎研发了自己的海量数据分析平台Pig。Pig平台基于Hadoop的Map-Reduce计算框架并提供类SQL的命令式查询语言Pig Latin,该平台为复杂的海量数据并行计算提供了简易的操作和编程接口。本文对Pig Latin语言四种数据模型、常用表达式及关键操作符进行介绍,并结合实例对Pig Latin脚本程序进行分析。
  关键词:Pig平台 Pig Latin语言 海量数据 并行分析
  中图分类号: 文献标识码:A文章编号:1007-9416(2010)05-0000-00
  
  1 前言
  步入网络时代后,企业内部各类数据急剧增长,如何高效的分析海量数据已成为一个亟待解决的问题,如从账单中分析潜在优质客户,从网站日志中分析用户关心的产品和服务。海量数据目前一般通过分布式系统进行存储和处理,如分布式数据库。分布式数据库一般对底层复杂的集群实现进行封装,并向外提供基于SQL的接口。分布式数据库一般需运行在专用服务器上,实施、维护成本高,普通用户将无法承担其高昂的费用。
  当下流行的Map-Reduce[1]并行计算框架仅依赖廉价的PC集群便可提供高效、可靠的计算,适于处理海量数据。Hadoop[2]作为Map-Reduce的开源实现系统,正被越来越多的用户使用。由于Map-Reduce是一种通用处理模型,导致用户难以快速实现海量数据分析。首先,用户需为JOIN、GROUP等常用分析过程手动编写代码,这些代码往往不能确保正确且难以维护、重用。其次,海量数据分析任务难以直接分解为Map与Reduce两阶段的处理任务,导致普通开发人员难以编写Map-Reduce程序。再者,由于Map函数和Reduce函数间的界限并不是十分明显,导致系统难以优化。
  雅虎于2006年着手研发的Pig[3、4]项目结合分布式数据库及Hadoop系统各自的优点为用户提供一个高效、实用的海量数据分析平台。作为Apache的开源项目,Pig平台基于Hadoop的Map-Reduce计算框架,提供类SQL的编程语言Pig Latin[5]。相比声明式语言SQL,命令式编程语言Pig Latin更符合用户的编程习惯。同时用户编写Pig程序时无需考虑效率问题,Pig平台会对Pig Latin代码自动进行优化。除此之外,Pig Latin支持以Java语言编写的用户自定义函数(UDF),该特性便于用户实现自定义功能。
  
  2 Pig Latin语言
  Pig Latin是在Map-Reduce并行计算框架上构建的类SQL高级查询语言。Pig Latin提供四种基本的数据模型,支持常用的表达式,提供类似SQL关键字功能的常用操作符,为用户以命令式编程的方式分析、处理海量数据提供便利。
  Pig Latin数据模型包括以下四个部分:
  (1)原子值:一个原子值是一个不能分割的值,例如字符串或数字。
  (2)元组:一个元组是一组值的序列,这些值可是任意类型,如(‘Pig’,‘1’)。元组可自嵌套,如(‘1’,(‘Pig’,‘Sample’))。
  (3)包:一个包是一些元组的集合。包内的元组可重复,如:{(‘1’),(‘1’),(‘2’,‘Sample’)}。
  (4)映射:映射是数据项的集合,每一数据项都有相对应的键以用于查找。映射中的数据项可以是不同类型的,但为确保查询效率,关键字必须是原子值。例如在映射[‘key’  {(‘Pig’),(‘Sample’)},‘age’  20]中,键‘key’被映射到一个有两条元组的包,键‘age’被映射到一个原子值。
  Pig Latin数据模型允许嵌套使用,用户可根据实际问题定义复杂的数据结构。
  Pig Latin支持常用的数据类型及运算,如下所示:
  Pig Latin常用关系操作符包括“LOAD”、“FOREACH”、“FILTER”、“JOIN”、“ORDER”、“COGROUP”、“STORE”等,如表2所示。“LOAD”操作符确定要加载的文件,并利用反序列化函数将文件中数据转换为特定结构的元组,最终返回包的句柄。“LOAD”并不立刻加载文件,仅当用户保存结果的时候才加载。“FOREACH”操作符对包内每个元组进行处理,常用来进行初始化或数据转换等工作,最终返回经处理后包的句柄。“FILTER”操作符过滤不符合条件的元组。“JOIN”操作符返回两个或多个包的笛卡尔乘积。“ORDER”操作符根据元组中一个或多个域进行排序。“COGROUP”操作符对两个或多个相关的包进行分组。“GROUP”操作符对一个包进行分组,是“COGROUP”的特例。“STORE”操作符把查询结果保存到文件中,并触发“LOAD”操作符正式加载文件。
  2.1 Pig应用举例
  假如我们有用户信息(包括用户名和用户年龄)以及用户浏览网站记录(包括用户名和访问网站的url),如图1所示。
  这些海量数据存放在Hadoop分布式文件系统上,如果要查询“在18岁到30岁使用者查看的前100网站”,可用Pig Latin编写以下简单脚本解决:
  
  1 Users = LOAD ‘users.in’ AS (name, age);
  2 Pages = LOAD ‘pages.in’ AS (user, url);
  3 MyUsr = FILTER Users BY age >= 18 and age 本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文

猜你想看
相关文章

Copyright © 2008 - 2022 版权所有 职场范文网

工业和信息化部 备案号:沪ICP备18009755号-3