Cloudera Data Analyst Training-Pig 翻译

by Gary

Presenter Notes

Apache Pig

# Apache Pig构建在Hadoop上以提供高级数据处理

  • 这是编写低级MapReduce代码的替代方法
  • Pig特别善于加入和转换数据
    people = LOAD '/user/training/customers' AS (cust_id, name);
    orders = LOAD '/user/training/orders' AS (ord_id, cust_id, cost);
    groups = GROUP orders BY cust_id;
    totals = FOREACH groups GENERATE group, SUM(orders.cost) AS t;
    result = JOIN totals BY group, people BY cust_id;
    DUMP result;
    

# Pig解释器在客户端计算机上运行

  • 将PigLatin脚本转换为MapReduce作业
  • 将这些作业提交到集群

Presenter Notes

1.Pig简介

Presenter Notes

Pig简介

# 在本章中,您将学习

  • Pig的主要特点
  • 组织如何使用Pig进行数据处理和分析
  • 如何以交互方式和批处理模式使用Pig

Presenter Notes

章节主题

# Pig简介

  • 什么是Pig?
  • Pig的功能
  • Pig用例
  • 与Pig交互
  • 结论

Presenter Notes

Apache Pig概述

# Apache Pig是用于Hadoop的数据分析和处理的平台

  • 它提供了直接编写MapReduce代码的替代方法

# 最初在雅虎作为一个研究项目

  • 目标:灵活性、生产力和可维护性
  • 现在是一个开源的Apache项目

Presenter Notes

Pig解析

# Pig的主要组件

  • 数据流语言(Pig Latin)
  • 交互式shell您可以在其中键入Pig Latin语句(Grunt)
  • Pig解释器和执行引擎

Presenter Notes

从哪里获得Pig

# CDH是安装Hadoop和Pig最简单的方法

  • 一个Hadoop分布式集群包括HDFS,MapReduce,Spark,Pig,Hive,Impala,Sqoop,HBase和其他Hadoop生态系统组件
  • 可以使用RPM,Ubuntu/Debian/SuSE或tarball等形式的安装包
  • 安装简单
  • 100%免费和开源

# 安装不在本课程范围内

  • 可学习Cloudera的另外两门培训课程《System Administrators》和《Cloudera Administrator Training for Apache Hadoop》

Presenter Notes

章节主题

# Pig简介

  • 什么是Pig?
  • Pig的功能
  • Pig用例
  • 与Pig交互
  • 结论

Presenter Notes

Pig的功能

# Pig是编写低级MapReduce代码的替代方法

# 许多功能使Pig能够进行复杂的数据分析和处理

  • HDFS操作
  • UNIX shell命令
  • 关系运算
  • 字段的位置引用
  • 常见的数学函数
  • 支持自定义函数和数据格式
  • 复杂的数据结构

Presenter Notes

章节主题

# Pig简介

  • 什么是Pig?
  • Pig的功能
  • Pig用例
  • 与Pig交互
  • 结论

Presenter Notes

组织如何使用Pig

# 许多组织使用Pig进行数据分析

  • 在海量数据集中查找相关记录
  • 查询多个数据集
  • 从输入数据计算值

# Pig也经常用于数据处理

  • 整合现有的数据集
  • 连接来自多个源的数据以产生新的数据集

Presenter Notes

用例:Web日志会话化

# Pig可以帮助您从Web服务器日志文件中提取有价值的信息

Presenter Notes

用例:数据采样

# 抽样可以帮助您探索大型数据集的代表性部分

  • 允许您使用不能缩放的工具检查此部分
  • 在分析作业开发期间支持更快的迭代

Presenter Notes

用例:ETL处理

# Pig还广泛用于提取,转换和加载(ETL)处理

Presenter Notes

章节主题

# Pig简介

  • 什么是Pig?
  • Pig的功能
  • Pig用例
  • 与Pig交互
  • 结论

Presenter Notes

交互式使用Pig

# 你可以通过Grunt shell交互地使用Pig

  • Pig在键入时解释每个Pig Latin语句
  • 执行被延迟直到需要输出时再执行
  • 非常适用于临时数据检查

# 如何启动,使用和退出Grunt的示例

$ pig
grunt> allsales = LOAD 'sales' AS (name, price);
grunt> bigsales = FILTER allsales BY price > 100;
grunt> STORE bigsales INTO 'myreport';
grunt> quit;

# 也可以通过-e从UNIX shell执行Pig Latin语句选项

Presenter Notes

与HDFS交互

# 可以通过fs命令使用Pig操作HDFS

grunt> fs -mkdir sales/;
grunt> fs -put europe.txt sales/;
grunt> allsales = LOAD 'sales' AS (name, price);
grunt> bigsales = FILTER allsales BY price > 100;
grunt> STORE bigsales INTO 'myreport';
grunt> fs -getmerge myreport/ bigsales.txt;

Presenter Notes

与UNIX交互

# 使用sh命令可以从Pig运行UNIX程序

grunt> sh date;
Wed Nov 12 06:39:13 PST 2014
grunt> fs -ls; -- lists HDFS files
grunt> sh ls; -- lists local files

Presenter Notes

运行Pig脚本

# Pig脚本只是存储在文本文件中的Pig Latin代码

  • 按照惯例,这些文件具有.pig扩展名

# 可以通过运行命令从Grunt shell中运行Pig脚本

  • 这对于自动化和批处理执行很有用
    grunt> run salesreport.pig;
    

# 通常直接从UNIX shell运行Pig脚本

$ pig salesreport.pig

Presenter Notes

MapReduce和本地模式

# 如前所述,Pig将Pig Latin转换为MapReduce作业

  • Pig提交这些作业以在Hadoop集群上执行

# 也可以使用x标志在本地模式下运行Pig

  • 这将在本地机器上而不是集群上运行作业
  • 本地模式使用本地文件系统,而不是HDFS
  • 在将作业部署到生产之前可以有助于测试

    $ pig –x local -- interactive
    $ pig -x local salesreport.pig -- batch
    

Presenter Notes

客户端日志文件

# 如果作业失败,Pig可能会生成一个日志文件来解释为什么

  • 这些日志文件通常在当前工作目录中生成

    • 在本地(客户端)机器上
  • Presenter Notes

    章节主题

    # Pig简介

    • 什么是Pig?
    • Pig的功能
    • Pig用例
    • 与Pig交互
    • 结论

    Presenter Notes

    基本要点

    # Pig提供了直接编写MapReduce代码的替代方法

    • Pig解释Pig Latin代码以创建MapReduce作业
    • 然后将这些作业提交到Hadoop集群

    # 可以通过Grunt交互地执行Pig Latin代码

    • Pig延迟作业执行,直到需要输出

    # 在用于批处理执行的脚本中存储Pig Latin代码也是常见的

    • 允许自动化和代码重用

    Presenter Notes

    2.基本数据分析

    Presenter Notes

    基本数据分析

    # 在本章中,您将学习

    • Pig Latin的基本语法
    • 如何使用Pig加载和存储数据
    • Pig使用哪些简单数据类型来表示数据
    • 如何在Pig中排序和过滤数据
    • 如何使用许多Pig的内置函数进行数据处理

    Presenter Notes

    章节主题

    # 基本数据分析

    • Pig Latin语法
    • 加载数据
    • 简单数据类型
    • 字段定义
    • 数据输出
    • 查看模式
    • 过滤和排序数据
    • 常用函数
    • 结论
    • 实践练习:使用Pig进行ETL处理

    Presenter Notes

    Pig Latin概述

    # Pig Latin是一种数据流语言

    • 数据流表示为语句序列

    # 以下是一个简单的Pig Latin脚本,用于加载,过滤和存储数据

    allsales = LOAD 'sales' AS (name, price);
    bigsales = FILTER allsales BY price > 999; -- in US cents
    /*
     * Save the filtered results into a new
     * directory, below my home directory.
     */
    STORE bigsales INTO 'myreport';
    

    Presenter Notes

    Pig Latin语法:关键词

    # Pig Latin关键字在此以蓝色文本突出显示

    • 关键字保留 - 您不能使用它们来命名事物

    Presenter Notes

    Pig Latin语法:标识符(1)

    # 标识符是分配给字段和其他数据结构的名称

    Presenter Notes

    Pig Latin语法:标识符(2)

    # 标识符必须符合Pig的命名规则

    # 标识符必须始终以字母开头

    • 这只能后跟字母,数字或下划线

    Presenter Notes

    Pig Latin语法:注释

    # Pig Latin支持两种类型的注释

    • 单行注释以 -- 开始
    • 多行注释以 / 开头,以 / 结束
      allsales = LOAD 'sales' AS (name, price);
      bigsales = FILTER allsales BY price > 999; -- in US cents
      /*
       * Save the filtered results into a new
       * directory, below my home directory.
       */
      STORE bigsales INTO 'myreport';
      

    Presenter Notes

    Pig Latin对大小写敏感

    # 在Pig Latin中大小写是否重要取决于上下文

    # 关键字(此处显示为蓝色文字)不区分大小写

    • 也不是运算符(例如AND,OR或IS NULL)

    # 标识符和路径(此处以红色文字显示)区分大小写

    • 函数名(例如SUM或COUNT)和常量也是如此

    Presenter Notes

    Pig Latin中的常用运算符

    # Pig Latin中的许多常用运算符对SQL用户很熟悉

    • 显着差异:Pig Latin使用==和!=进行比较

    Presenter Notes

    章节主题

    # 基本数据分析

    • Pig Latin语法
    • 加载数据
    • 简单数据类型
    • 字段定义
    • 数据输出
    • 查看模式
    • 过滤和排序数据
    • 常用函数
    • 结论
    • 实践练习:使用Pig进行ETL处理

    Presenter Notes

    Pig中加载基本数据

    # Pig的默认加载函数称为PigStorage

    • 调用LOAD时,函数的名称是隐式的
    • PigStorage呈现文本格式使用制表符来分隔列

    # 考虑HDFS中名为sales的以下文件

    • 这两个字段由制表符字符分隔
      Alice       2999
      Bob         3625
      Carlos      2764
      

    # 此示例从上面的文件加载数据

    allsales = LOAD 'sales' AS (name, price);
    

    Presenter Notes

    数据源:文件和目录

    # 上一个示例从名为sales的文件加载数据

    allsales = LOAD 'sales' AS (name, price);
    

    # 因为这不是一个绝对路径,它是相对于你的home目录

    • HDFS中的home目录通常为/user/youruserid/
    • 也可以指定绝对路径(例如/dept/sales/2012/q4)

    # 该路径也可以引用一个目录

    • 在这种情况下,Pig将递归加载该目录中的所有文件
    • 还支持文件模式(“globs”)

      allsales = LOAD 'sales_200[5-9]' AS (name, price);
      

    Presenter Notes

    在加载期间指定列名称

    # 前面的示例还为每个列分配了名称

    allsales = LOAD 'sales' AS (name, price);

    # 不需要指定列名称

    • 这在探索新数据集时很有用
    • 按位置引用字段($0是第一个,$1是第二个,$53是第54个等等)
      allsales = LOAD 'sales';
      

    Presenter Notes

    使用备用列分隔符

    # 您可以将备用分隔符指定为PigStorage的参数

    # 此示例显示如何加载逗号分隔的数据

    • 注意这是一个单独的语句
      allsales = LOAD 'sales.csv' USING PigStorage(',') AS (name, price);
      

    # 或者加载管道分隔的数据而不指定列名称

    allsales = LOAD 'sales.txt' USING PigStorage('|');
    

    Presenter Notes

    章节主题

    # 基本数据分析

    • Pig Latin语法
    • 加载数据
    • 简单数据类型
    • 字段定义
    • 数据输出
    • 查看模式
    • 过滤和排序数据
    • 常用函数
    • 结论
    • 实践练习:使用Pig进行ETL处理

    Presenter Notes

    Pig中的简单数据类型

    # Pig支持几种基本数据类型

    • 类似于大多数数据库和编程语言

    # Pig将未指定类型的字段视为字节数组

    • 在Pig中调用bytearray类型
      allsales = LOAD 'sales' AS (name, price);
      

    Presenter Notes

    简单数据类型列表

    # 对于简单值,Pig中有八种数据类型

    Presenter Notes

    在Pig中指定数据类型

    # Pig将尽最大努力根据上下文来确定数据类型

    • 例如,您可以计算销售佣金为price * 0.1
    • 在这种情况下,Pig将认为此值的类型为double

    # 但是,最好在可能的情况下明确指定数据类型

    • 有助于进行错误检查和优化
    • 最简单的做法是在加载时使用格式fieldname:type
      allsales = LOAD 'sales' AS (name:chararray, price:int);
      

    # 选择正确的数据类型对于避免精度损失很重要

    # 重要提示:避免使用浮点数表示货币!

    Presenter Notes

    Pig如何处理无效数据

    # 遇到无效数据时,Pig将值替换为NULL

    • 例如,一个包含值Q4的int字段

    # IS NULL和IS NOT NULL运算符测试空值

    • 注意,NULL不同于空字符串''

    # 您可以使用这些运算符过滤坏记录

    hasprices = FILTER Records BY price IS NOT NULL;
    

    Presenter Notes

    章节主题

    # 基本数据分析

    • Pig Latin语法
    • 加载数据
    • 简单数据类型
    • 字段定义
    • 数据输出
    • 查看模式
    • 过滤和排序数据
    • 常用函数
    • 结论
    • 实践练习:使用Pig进行ETL处理

    Presenter Notes

    Pig中的关键数据概念

    # 关系数据库具有表,行,列和字段

    # 我们将使用以下数据来说明Pig的等价物

    • 假设此数据是从制表符分隔的文本文件中加载的

    Presenter Notes

    Pig数据概念:Fields

    # 单个数据元素称为字段

    • 它对应于前面看到的八种数据类型之一

    Presenter Notes

    Pig数据概念:Tuples

    # 值的集合称为元组

    • 元组中的字段是有序的,但不必都是相同类型的

    Presenter Notes

    Pig数据概念:Bags

    # 元组的集合称为包

    # 默认情况下,包中的元组是无序的

    • 字段计数和类型可以在包中的元组之间变化

    Presenter Notes

    Pig数据概念:Relations

    # 关系只是一个具有指定名称(别名)的包

    • 大多数Pig Latin语句都会创建一个新的关系

    # 典型的脚本将一个或多个数据集加载到关系中

    • 处理数据创建新关系而不是修改现有关系
    • 最终结果通常也是一个关系,存储为输出

      allsales = LOAD 'sales' AS (name, price);
      bigsales = FILTER allsales BY price > 999;
      STORE bigsales INTO 'myreport';
      

    Presenter Notes

    章节主题

    # 基本数据分析

  • Pig Latin语法

  • 加载数据
  • 简单数据类型
  • 字段定义
  • 数据输出
  • 查看模式
  • 过滤和排序数据
  • 常用函数
  • 结论
  • 实践练习:使用Pig进行ETL处理
  • Presenter Notes

    Pig中的数据输出

    # 用于处理输出的命令取决于输出的目标

    • DUMP:将输出发送到屏幕
    • STORE:将输出发送到磁盘(HDFS)

    # DUMP输出示例,使用之前显示的文件中的数据

    • 括号和逗号表示具有多个字段的元组

      (Alice,2999,us)
      (Bob,3625,ca)
      (Carlos,2764,mx)
      (Dieter,1749,de)
      (Étienne,2368,fr)
      (Fredo,5637,it)
      

    Presenter Notes

    使用Pig存储数据

    # STORE命令用于将数据存储到HDFS

  • 类似于LOAD,但是写入数据而不是读取

  • 输出路径是目录的名称
    • 该目录不能存在
  • # 与LOAD一样,PigStorage的使用是隐式的

    • 字段分隔符也有一个默认值(tab)

      STORE bigsales INTO 'myreport';
      
    • 您还可以指定备用分隔符

      STORE bigsales INTO 'myreport' USING PigStorage(',');
      

    Presenter Notes

    章节主题

    # 基本数据分析

  • Pig Latin语法

  • 加载数据
  • 简单数据类型
  • 字段定义
  • 数据输出
  • 查看模式
  • 过滤和排序数据
  • 常用函数
  • 结论
  • 实践练习:使用Pig进行ETL处理
  • Presenter Notes

    使用DESCRIBE查看模式

    # DESCRIBE命令显示数据的结构,包括名称和类型

    # 下面的Grunt会话显示了一个例子

    Presenter Notes

    章节主题

    # 基本数据分析

    • Pig Latin语法
    • 加载数据
    • 简单数据类型
    • 字段定义
    • 数据输出
    • 查看模式
    • 过滤和排序数据
    • 常用函数
    • 结论
    • 实践练习:使用Pig进行ETL处理

    Presenter Notes

    Pig Latin中过滤

    # FILTER关键字提取符合指定条件的元组

    bigsales = FILTER allsales BY price > 3000;
    

    Presenter Notes

    按多个条件过滤

    # 您可以将条件用AND和OR组合

    somesales = FILTER allsales BY name == 'Dieter' OR (price > 3500 AND price < 4000);
    

    Presenter Notes

    Aside:在Pig Latin中String的比较

    # Pig Latin中的任何类型都支持==运算符

    • 此运算符用于精确比较
      alices = FILTER allsales BY name == 'Alice';
      

    # Pig Latin支持通过Java正则表达式进行模式匹配

    • 这是使用MATCHES运算符完成的

      a_names = FILTER allsales BY name MATCHES 'A.*';
      
      spammers = FILTER senders BY email_addr MATCHES '.*@example\\.com$';
      

    Presenter Notes

    Pig Latin中的字段选择

    # 过滤提取行,但有时我们需要提取列

  • 这是使用FOREACH和GENERATE关键字在Pig Latin中完成的

    twofields = FOREACH allsales GENERATE amount, trans_id;
    
  • Presenter Notes

    在Pig Latin中生成新字段

    # FOREACH和GENERATE关键字也可用于创建字段

    • 例如,您可以根据price创建一个新字段
      t = FOREACH allsales GENERATE price * 0.07;
      

    # 可以命名这样的字段

    t = FOREACH allsales GENERATE price * 0.07 AS tax;
    

    # 还可以指定数据类型

    t = FOREACH allsales GENERATE price * 0.07 AS tax:float;
    

    Presenter Notes

    消除重复

    # DISTINCT删除bag中的重复记录

    • 所有字段必须相等,才能被视为重复
      unique_records = DISTINCT all_alices;
      

    Presenter Notes

    控制排序顺序

    # 使用ORDER ... BY按升序对bag中的记录进行排序

    • 添加DESC以按降序排序
    • 注意指定模式 - 数据类型会影响数据的排序方式!
      sortedsales = ORDER allsales BY country DESC;
      

    Presenter Notes

    限制结果

    # 与在SQL中一样,您可以使用LIMIT来减少输出记录的数量

    somesales = LIMIT allsales 10;
    

    # 谨防! 记录排序是随机的,除非使用ORDER BY指定

    • 使用ORDER BY和LIMIT一起查找前N个结果

      sortedsales = ORDER allsales BY price DESC;
      top_five = LIMIT sortedsales 5;
      

    Presenter Notes

    章节主题

    # 基本数据分析

  • Pig Latin语法

  • 加载数据
  • 简单数据类型
  • 字段定义
  • 数据输出
  • 查看模式
  • 过滤和排序数据
  • 常用函数
  • 结论
  • 实践练习:使用Pig进行ETL处理
  • Presenter Notes

    内置函数

    # 这些只是Pig的许多内置函数的一个示例

    # 您可以通过FOREACH..GENERATE关键字来使用这些内置函数

    rounded = FOREACH allsales GENERATE ROUND(price);
    

    Presenter Notes

    章节主题

    # 基本数据分析

    • Pig Latin语法
    • 加载数据
    • 简单数据类型
    • 字段定义
    • 数据输出
    • 查看模式
    • 过滤和排序数据
    • 常用函数
    • 结论
    • 实践练习:使用Pig进行ETL处理

    Presenter Notes

    基本要点

    # Pig Latin支持许多与SQL相同的操作

    • 虽然Pig的方法是完全不同的
    • Pig Latin在一系列步骤中加载,转换和存储数据

    # 输入和输出的默认分隔符是制表符Tab字符

    • 您可以将备用分隔符指定为PigStorage的参数

    # 不需要指定字段的名称和类型

    • 但它可以提高代码的性能和可读性

    Presenter Notes

    章节主题

    # 基本数据分析

    • Pig Latin语法
    • 加载数据
    • 简单数据类型
    • 字段定义
    • 数据输出
    • 查看模式
    • 过滤和排序数据
    • 常用函数
    • 结论
    • 实践练习:使用Pig进行ETL处理

    Presenter Notes

    3.用Pig处理复杂数据

    Presenter Notes

    用Pig处理复杂数据

    # 在本章中,您将学习

    • Pig如何使用包,元组和映射来表示复杂数据
    • Pig提供的用于分组和取消分组数据的技术
    • 如何在Pig Latin中使用聚合函数
    • 如何遍历复杂数据结构中的记录

    Presenter Notes

    章节主题

    # 用Pig处理复杂数据

    • 存储格式
    • 复杂/嵌套数据类型
    • 分组
    • 处理复杂数据的内置函数
    • 迭代分组数据
    • 结论
    • 实践练习:使用Pig分析广告系列数据

    Presenter Notes

    存储格式

    # 我们已经看到PigStorage加载和存储数据

    • 使用分隔的文本文件格式
      allsales = LOAD 'sales' AS (name, price);
      
      • 默认分隔符(制表符Tab)可以轻松更改

        allsales = LOAD 'sales' USING PigStorage(',') AS (name, price) ;

    # 有时您需要加载或存储其他格式的数据

    Presenter Notes

    其他支持的格式

    # 这里有几个Pig的内置函数用于加载其他格式的数据

    • 也可以通过编写Java代码来实现自定义加载器

    Presenter Notes

    加载和存储函数

    # 一些函数加载数据,一些存储数据,还有一些函数两者都做

    Presenter Notes

    章节主题

    # 用Pig处理复杂数据

    • 存储格式
    • 复杂/嵌套数据类型
    • 分组
    • 处理复杂数据的内置函数
    • 迭代分组数据
    • 结论
    • 实践练习:使用Pig分析广告系列数据

    Presenter Notes

    Pig的复杂数据类型:Tuple和Bag

    # 我们已经看到了Pig的三种复杂数据类型中的两种

    • 元组是值的集合
    • 包是元组的集合

    Presenter Notes

    Pig的复杂数据类型:Map

    # Pig还支持另一种复杂类型:映射

    • 映射将字符(键)与另一个数据的元素(值)联合在一起

    Presenter Notes

    在Pig中表示复杂类型

    # 重要的是要知道如何在Pig中定义和识别这些类型

    Presenter Notes

    加载和使用复杂类型(1)

    # 复杂数据类型可用于任何Pig字段

    # 以下示例显示包是如何存储在文本文件中的

    • 示例:交易ID,金额,已售商品(元组组成的一个包)

    # 这里是相应的LOAD语句指定模式

    details = LOAD 'salesdetail' AS (   
    trans_id:chararray, amount:int,
    items_sold:bag
        {item:tuple (SKU:chararray, price:int)});
    

    Presenter Notes

    加载和使用复杂类型(2)

    # 以下示例显示映射是如何存储在文本文件中的

    • 示例:客户名称,信用账户详细信息(映射),年度账户开立

    # 这里是相应的LOAD语句指定模式

    credit = LOAD 'customer_accounts' AS (
    name:chararray, account:map[], year:int);
    

    Presenter Notes

    引用映射数据

    # 思考具有以下数据的文件

    Bob [salary#52000,age#52]
    

    # 并加载以下模式

    details = LOAD 'data' AS (name:chararray, info:map[]);
    

    # 以下是在map和bag中引用数据的语法

    salaries = FOREACH details GENERATE info#'salary';
    

    Presenter Notes

    章节主题

    # 用Pig处理复杂数据

    • 存储格式
    • 复杂/嵌套数据类型
    • 分组
    • 处理复杂数据的内置函数
    • 迭代分组数据
    • 结论
    • 实践练习:使用Pig分析广告系列数据

    Presenter Notes

    按字段对记录进行分组(1)

    # 有时您需要通过给定字段对记录进行分组

    • 例如,您可以计算每个员工的佣金
      Alice 729
      Bob 3999
      Alice 27999
      Carol 32999
      Carol 4999
      

    # 使用GROUP BY在Pig Latin中执行此操作

    • 新关系在指定字段中具有每个唯一值的一个记录
      byname = GROUP sales BY name;
      

    Presenter Notes

    按字段对记录进行分组(2)

    # 新关系总是包含两个字段

    # 第一个字段在所有情况下都是字面上命名的组

    • 包含GROUP BY中指定的字段的值

    # 第二个字段按照GROUP BY中指定的关系命名

    • 它是一个包含每个对应值的一个元组的包

    Presenter Notes

    按字段对记录进行分组(3)

    # 下面的示例显示了分组后的数据

    Presenter Notes

    使用GROUP BY聚合数据

    # 聚合函数从多个输入值创建一个输出值

    • 例如,计算员工的总销售额
    • 通常应用于分组数据

    Presenter Notes

    将所有内容分组到单个记录

    # 我们只看到GROUP BY为每个唯一值创建一个记录

    # GROUP ALL将所有数据放入一个记录

    Presenter Notes

    使用GROUP ALL聚合数据

    # 当需要聚合一个或多个列时,使用GROUP ALL

    • 例如,计算所有员工的总销售额

    Presenter Notes

    删除数据中的嵌套

    # Pig中的一些操作(如分组)会生成嵌套数据结构

    # 分组可用于向聚合函数提供数据

    # 但是,有时候你想使用一个“扁平”的数据结构

    • FLATTEN操作符删除数据中的嵌套级别

    Presenter Notes

    FLATTEN的示例

    # 下面显示了嵌套数据和FLATTEN对它的影响

    Presenter Notes

    章节主题

    # 用Pig处理复杂数据

    • 存储格式
    • 复杂/嵌套数据类型
    • 分组
    • 处理复杂数据的内置函数
    • 迭代分组数据
    • 结论
    • 实践练习:使用Pig分析广告系列数据

    Presenter Notes

    Pig的内置聚合函数

    # Pig内置支持除SUM之外的其他聚合函数

    # 例子:

    • AVG:计算所有值的平均值(平均值)
    • MIN:返回最小值
    • MAX:返回最大值

    # Pig有两个内置函数用于计数记录

    • COUNT:返回包中非空元素的数量
    • COUNT_STAR:返回包中所有元素的数量

    Presenter Notes

    其他值得注意的内置函数

    # 这里有一些其他有用的Pig函数

    • 有关完整列表,请参阅Pig文档

    Presenter Notes

    章节主题

    # 用Pig处理复杂数据

    • 存储格式
    • 复杂/嵌套数据类型
    • 分组
    • 处理复杂数据的内置函数
    • 迭代分组数据
    • 结论
    • 实践练习:使用Pig分析广告系列数据

    Presenter Notes

    记录迭代

    # 我们已经看到FOREACH ... GENERATE遍历记录

    # 目标是转换记录以产生新的关系

    • 有时只选择某些列

      price_column_only = FOREACH sales GENERATE price;
      
      • 有时创建新列

        taxes = FOREACH sales GENERATE price * 0.07; - 有时对数据调用一个函数

        totals = FOREACH grouped GENERATE SUM(sales.price);

    Presenter Notes

    嵌套FOREACH关键字

    # 我们已经看到FOREACH ... GENERATE遍历记录

  • 这通常用于在组中应用一系列变换

  • # 这称为嵌套FOREACH

    • 仅允许关系操作(例如,LIMIT,FILTER,ORDER BY)
    • GENERATE必须是块中的最后一行

    Presenter Notes

    嵌套FOREACH示例(1)

    # 我们的输入数据包含员工列表职位和相应的薪金

    # 目标:确定每个职称内三个最高的工资

    Presenter Notes

    嵌套FOREACH示例(2)

    # 首先从文件加载数据

    # 接下来,按职称对员工进行分组

    • 分配给新关系title_group

    Presenter Notes

    嵌套FOREACH示例(3)

    # 嵌套FOREACH遍历每个记录(即每个作业标题)

    • 按照工资降序它对该组中的每个记录进行排序
    • 然后选择前三个
    • GENERATE输出职称和薪水

    Presenter Notes

    嵌套FOREACH示例(4)

    Presenter Notes

    章节主题

    # 用Pig处理复杂数据

    • 存储格式
    • 复杂/嵌套数据类型
    • 分组
    • 处理复杂数据的内置函数
    • 迭代分组数据
    • 结论
    • 实践练习:使用Pig分析广告系列数据

    Presenter Notes

    基本要点

    # Pig有三种复杂的数据类型:tuple,bag和map

    • 映射只是键/值对的集合

    # 这些结构可以包含简单类型,如int或chararray

    • 但它们也可以包含复杂的数据类型
    • 嵌套数据结构在Pig中很常见

    # Pig提供了对数据进行分组和取消分组的方法

    • 您可以使用FLATTEN运算符删除嵌套级别

    # Pig提供了几个内置的聚合函数

    Presenter Notes

    章节主题

    # 用Pig处理复杂数据

    • 存储格式
    • 复杂/嵌套数据类型
    • 分组
    • 处理复杂数据的内置函数
    • 迭代分组数据
    • 结论
    • 实践练习:使用Pig分析广告系列数据

    Presenter Notes

    实践练习:使用Pig分析广告系列数据

    # 在本练习中,您将分析来自Dualcore的在线广告系列的数据

    # 有关说明,请参阅实践练习手册

    Presenter Notes

    4.使用Pig的多数据集操作

    Presenter Notes

    使用Pig的多数据集操作

    # 在本章中,您将学习

    • 我们如何使用分组来组合来自多个来源的数据
    • Pig支持哪些类型的联接操作以及如何使用它们
    • 如何连接记录以生成单个数据集
    • 如何将单个数据集拆分为多个关系

    Presenter Notes

    章节主题

    # 使用Pig的多数据集操作

    • 组合数据集的技术
    • 在Pig中连接数据集
    • 设置操作
    • 拆分数据集
    • 结论
    • 实践练习:使用Pig分析不同的数据集

    Presenter Notes

    组合数据集概述

    # 到目前为止,我们集中在处理单个数据集

    • 有价值的洞察通常来自组合多个数据集

    # Pig提供了几种实现这一点的技术

    • 使用具有多个关系的GROUP运算符
    • 像在SQL中一样加入数据
    • 执行集合操作,如CROSS和UNION

    # 我们将在本章中讨论这些内容

    Presenter Notes

    示例数据集(1)

    # 本章中的大多数示例将涉及相同的两个数据集

    # 第一个是包含有关Dualcore的商店信息的文件

    # 此关系中有两个字段

    1.store_id:chararray(主键)

    2.商店所在城市的名称

    Presenter Notes

    示例数据集(2)

    # 我们的其他数据集是一个包含有关Dualcore销售人员信息的文件

    # 此关系包含三个字段

    1.person_id:int(主键)

    2.name:chararray(销售员名称)

    3.store_id:chararray(指商店)

    Presenter Notes

    分组多重关系

    # 我们之前学到了GROUP运算符

    • 基于指定字段的关系中的组值

    # GROUP运算符还可以对多个关系进行分组

    • 在这种情况下,优选使用同义COGROUP运算符
      grouped = COGROUP stores BY store_id, salespeople BY store_id;
      

    # 这会将两个数据集中的值收集到一个新关系中

    • 如前所述,新关系由一个名为group的字段键入

    • 此组字段与每个输入的一个包相关联

    Presenter Notes

    COGROUP的示例

    Presenter Notes

    章节主题

    # 使用Pig的多数据集操作

    • 组合数据集的技术
    • 在Pig中连接数据集
    • 设置操作
    • 拆分数据集
    • 结论
    • 实践练习:使用Pig分析不同的数据集

    Presenter Notes

    连接数据集概述

    # COGROUP运算符创建嵌套数据结构

    # Pig Latin JOIN运算符创建一个平面数据结构

    • 类似于关系数据库中的连接

    # JOIN类似于执行COGROUP,然后是FLATTEN

    • 虽然他们处理空值不同

    Presenter Notes

    关键字段

    # 像COGROUP一样,连接依赖于由每个关系共享的字段

    joined = JOIN stores BY store_id, salespeople BY store_id;
    

    # 连接也可以使用多个字段作为键

    joined = JOIN customers BY (name, phone_number),
                  accounts BY (name, phone_number);
    

    Presenter Notes

    内部连接

    # Pig Latin中的默认JOIN是内部连接

    joined = JOIN stores BY store_id, salespeople BY store_id;
    

    # 仅当在所有输入中找到键时,内部连接才输出记录

    • 在上面的示例中,具有至少一个销售人员的商店

    # 您可以在单个语句中对多个关系执行内部连接

    • 但是您必须使用相同的键才能加入它们

    Presenter Notes

    内部连接示例

    Presenter Notes

    消除重复字段(1)

    # 与COGROUP一样,新关系仍包含重复字段

    Presenter Notes

    消除重复字段(2)

    # 我们可以使用FOREACH ... GENERATE来保留我们需要的字段

    • 然而,引用字段现在稍微复杂一点
    • 我们必须完全限定名称不是唯一的任何字段

    Presenter Notes

    外部连接

    # Pig Latin允许您指定字段名称后面的连接类型

    • 内部连接不指定连接类型

    # 外部连接不需要在两个输入中都找到键

    # 外部连接需要Pig知道至少一个关系的模式

    • 哪个关系需要模式取决于连接类型
    • 完全外部连接需要两个关系的模式

    Presenter Notes

    左外连接示例

    Presenter Notes

    右外连接示例

    Presenter Notes

    全外连接示例

    Presenter Notes

    章节主题

    # 使用Pig的多数据集操作

    • 组合数据集的技术
    • 在Pig中连接数据集
    • 设置操作
    • 拆分数据集
    • 结论
    • 实践练习:使用Pig分析不同的数据集

    Presenter Notes

    交叉数据集

    # JOIN在一个关系中查找与另一个关系中的记录匹配的记录

    # Pig的CROSS运算符创建两个关系的叉积

    • 组合两个表中的所有记录,而不考虑匹配
    • 换句话说,所有可能的记录组合
      crossed = CROSS stores, salespeople;
      

    # 小心:这可以产生大量的数据!

    Presenter Notes

    交叉乘积示例

    Presenter Notes

    连接数据集

    # 我们已经探索了用于组合数据集的几种技术

    • 他们有一个共同点:他们水平结合

    # UNION运算符垂直组合记录

    • 它将来自输入关系的数据添加到新的单个关系中
    • Pig不需要这些输入具有相同的模式
    • 它不会消除重复记录或保留顺序

    # 这有助于将新数据合并到处理中

    both = UNION june_items, july_items;
    

    Presenter Notes

    UNION示例

    Presenter Notes

    章节主题

    # 使用Pig的多数据集操作

    • 组合数据集的技术
    • 在Pig中连接数据集
    • 设置操作
    • 拆分数据集
    • 结论
    • 实践练习:使用Pig分析不同的数据集

    Presenter Notes

    拆分数据集

    # 您已经学习了将数据集合并到单个关系中的几种方法

    # 有时您需要将数据集拆分为多个关系

    • 按日期范围的服务器日志
    • 按地区列出的客户列表
    • 按供应商列出的产品列表
    • 等等

    # Pig Latin支持使用SPLIT运算符

    SPLIT relation INTO relationA IF expression1,
          relationB IF expression2,
          relationC IF expression3...;
    
    • 表达式不必相互排斥

    Presenter Notes

    拆分示例

    # 根据终身价值将客户分类进行奖励计划

    Presenter Notes

    章节主题

    # 使用Pig的多数据集操作

    • 组合数据集的技术
    • 在Pig中连接数据集
    • 设置操作
    • 拆分数据集
    • 结论
    • 实践练习:使用Pig分析不同的数据集

    Presenter Notes

    基本要点

    # 您可以使用COGROUP将多个关系分组

    • 这将创建嵌套数据结构

    # Pig支持常见的SQL连接类型

    • 内,左外,右外,和全外
    • 使用连接数据时,可能需要完全限定字段名称

    # Pig的CROSS运算符创建输入数据的所有可能组合

    • 这可以创建大量的数据 - 仔细使用它!

    # 您可以使用UNION来连接数据集

    # 除了组合数据集,Pig还支持拼接它们

    Presenter Notes

    章节主题

    # 使用Pig的多数据集操作

    • 组合数据集的技术
    • 在Pig中连接数据集
    • 设置操作
    • 拆分数据集
    • 结论
    • 实践练习:使用Pig分析不同的数据集

    Presenter Notes

    实践练习:使用Pig分析不同的数据集

    # 在本练习中,您将使用Pig分析多个数据集

    # 有关说明,请参阅实践练习手册

    Presenter Notes

    5.Pig故障排除和优化

    Presenter Notes

    Pig故障排除和优化

    # 在本章中,您将学习

    • 如何控制Pig和Hadoop写入日志文件的信息
    • Hadoop的Web UI如何帮助您排除失败的作业
    • 如何使用SAMPLE和ILLUSTRATE来测试和调试Pig作业
    • Pig如何从您的Pig Latin代码创建MapReduce作业
    • 对您的Pig Latin代码几个简单的更改可以使它运行更快
    • 哪些资源对排错Pig错误特别有用

    Presenter Notes

    章节主题

    # Pig故障排除和优化

    • Pig故障排除
    • 记录
    • 使用Hadoop的Web UI
    • 可选演示:使用Web UI对失败的作业进行故障排除
    • 数据采样和调试
    • 性能概述
    • 了解执行计划
    • 提高Pig作业表现的一些提示
    • 结论

    Presenter Notes

    故障排除概述

    # 我们现在已经介绍了如何使用Pig进行数据分析

    • 不幸的是,有时您的代码可能无法正常工作
    • 重要的是要记住Pig和Hadoop是交织在一起的

    # 这里我们将介绍一些隔离和解决问题的技术

    • 我们将从Pig命令的几个选项开始

    Presenter Notes

    自我帮助

    # 我们将在本章讨论pig命令的一些选项

    • 您可以使用-h(帮助)选项查看所有这些
    • 请记住,许多选项是高级的或很少使用

    # 一个有用的选项是-c(check),它验证代码的语法

    $ pig -c myscript.pig
    myscript.pig syntax OK
    

    # 如果使用参数或宏,-dryrun选项将非常有用

    $ pig -p INPUT=demodata -dryrun myscript.pig
    
    • 在当前目录中创建一个myscript.pig.substituted文件

    Presenter Notes

    从其他人获得帮助

    # 有时你可能需要他人的帮助

    • 邮件列表或新闻组
    • 论坛和公告板网站
    • 支持服务

    # 您可能需要提供您正在使用的Pig和Hadoop的版本

    $ pig -version
    Apache Pig version 0.12.0-cdh5.2.0
    
    $ hadoop version
    Hadoop 2.5.0-cdh5.2.0
    

    Presenter Notes

    章节主题

    # Pig故障排除和优化

    • Pig故障排除
    • 记录
    • 使用Hadoop的Web UI
    • 可选演示:使用Web UI对失败的作业进行故障排除
    • 数据采样和调试
    • 性能概述
    • 了解执行计划
    • 提高Pig作业表现的一些提示
    • 结论

    Presenter Notes

    自定义日志消息

    # 您可能希望更改记录的信息量

    • Hadoop近期的一个变化在使用Pig时会产生很多警告

    # Pig和Hadoop使用Log4J库,这是很容易定制的

    # 编辑/etc/pig/conf/log4j.properties文件包括:

    log4j.logger.org.apache.pig=ERROR
    log4j.logger.org.apache.hadoop.conf.Configuration=ERROR
    

    # 编辑/etc/pig/conf/pig.properties文件以设置此属性:

    log4jconf=/etc/pig/conf/log4j.properties
    

    Presenter Notes

    在每个作业的基础上定制日志消息

    # 你只想临时更改日志级别

    • 特别是当试图解决你的脚本的问题

    # 您可以指定在调用Pig时使用的Log4J属性文件

    • 这将覆盖默认的Log4J配置

    # 创建customlog.properties文件包括:

    log4j.logger.org.apache.pig=DEBUG
    

    # 通过Pig的-log4jconf参数指定此文件

    $ pig -log4jconf customlog.properties
    

    Presenter Notes

    控制客户端日志文件

    # 当作业失败时,Pig可能会生成一个日志文件来解释为什么

    • 这些通常在当前目录中生成

    # 要使用其他位置,请在启动Pig时使用-l(log)选项

    $ pig -l /tmp
    

    # 或通过编辑/etc/pig/conf/pig.properties永久设置

    • 使用log.file属性指定其他目录

      log.file=/tmp
      

    Presenter Notes

    章节主题

    # Pig故障排除和优化

  • Pig故障排除

  • 记录
  • 使用Hadoop的Web UI
  • 可选演示:使用Web UI对失败的作业进行疑难解答
  • 数据采样和调试
  • 性能概述
  • 了解执行计划
  • 提高你的Pig作业性能的一些提示
  • 结论
  • Presenter Notes

    Hadoop Web UI

    # 每个Hadoop守护进程都有一个相应的Web应用程序

    • 这使我们可以轻松地通过浏览器查看集群和作业状态
    • 在伪分布式模式下,主机名为localhost

    Presenter Notes

    JobTracker Web UI(1)

    # JobTracker提供了最有用的Hadoop的Web UI

    • 它显示Hadoop集群的MapReduce状态信息

    Presenter Notes

    JobTracker Web UI(2)

    # JobTracker Web UI还显示历史信息

    • 您可以点击其中一个链接查看特定工作的详细信息

    Presenter Notes

    JobTracker Web UI(3)

    # 作业详细信息页面可以帮助您解决问题

    Presenter Notes

    命名您的工作

    # Hadoop集群通常是共享资源

    • 可能有几十个或数百个其他人使用集群
    • 因此,有时很难在Web UI中找到您的作业

    # 我们建议在脚本中使用名称来帮助识别您的作业

    • 在Grunt或您的脚本中设置job.name属性
      grunt> set job.name 'Q2 2013 Sales Reporter';
      

    Presenter Notes

    杀死一个作业

    # 处理大量数据的作业可能需要几个小时才能完成

    • 有时,您在提交作业后在代码中发现错误
    • 而不是等待工作完成,你可以杀掉它

    # 首先,在JobTracker Web UI的首页上找到作业ID

    # 然后,在Pig中使用kill命令以及该作业ID

    grunt> kill job_201303151454_0028
    

    Presenter Notes

    章节主题

    # Pig故障排除和优化

    • Pig故障排除
    • 记录
    • 使用Hadoop的Web UI
    • 可选演示:使用Web UI对失败的作业进行疑难解答
    • 数据采样和调试
    • 性能概述
    • 了解执行计划
    • 提高你的Pig作业性能的一些提示
    • 结论

    Presenter Notes

    可选演示:概述

    # 如果时间允许,您的教师现在将演示如何使用JobTracker Web UI来隔离我们的代码中导致作业失败的错误

    # 代码和指令已经在VM上

    $ cd ~/training_materials/analyst/webuidemo
    $ cat README.txt
    

    Presenter Notes

    章节主题

    # Pig故障排除和优化

    • Pig故障排除
    • 记录
    • 使用Hadoop的Web UI
    • 可选演示:使用Web UI对失败的作业进行疑难解答
    • 数据采样和调试
    • 性能概述
    • 了解执行计划
    • 提高你的Pig作业性能的一些提示
    • 结论

    Presenter Notes

    使用SAMPLE创建较小的数据集

    # 您的代码可能在生产中处理百万兆字节的数据

    • 然而,在开发期间以较小的量进行测试是方便的

    # 使用SAMPLE从数据集中选择一组随机记录

    # 此示例从大数据中选择大约5%的记录

    • 将它们存储在一个名为mysample的新目录中

      everything = LOAD 'bigdata';
      subset = SAMPLE everything 0.05;
      STORE subset INTO 'mysample';
      

    Presenter Notes

    智能采样与ILLUSTRATE

    # 有时,随机样本可能缺少测试所需的数据

  • 例如,对于JOIN操作,匹配两个数据集中的记录

  • # Pig的ILLUSTRATE关键字可以做更多的智能采样

    • Pig将检查代码以确定需要什么数据
    • 它选择了几个正确地练习代码的记录

    # 您应该在使用ILLUSTRATE时指定模式

    • 当你不够时,Pig会产生记录

    Presenter Notes

    使用ILLUSTRATE有助于您了解数据流

    # 像DUMP和DESCRIBE,ILLUSTRATE帮助调试

    • 这三个的语法都是相同的

    Presenter Notes

    一般调试策略

    # 经常使用DUMP,DESCRIBE和ILLUSTRATE

    # 看一下数据的样本

    • 验证它是否与LOAD规范中的字段匹配
    • 数据可能不是你认为的

    # 跟踪问题的其他有用步骤

    • 在处理参数和宏后,使用-dryrun查看脚本
    • 通过从本地文件传递一些数据来测试外部脚本(STREAM)
    • 查看日志,特别是来自Web UI的可用任务日志

    Presenter Notes

    章节主题

    # Pig故障排除和优化

    • Pig故障排除
    • 记录
    • 使用Hadoop的Web UI
    • 可选演示:使用Web UI对失败的作业进行疑难解答
    • 数据采样和调试
    • 性能概述
    • 了解执行计划
    • 提高你的Pig作业性能的一些提示
    • 结论

    Presenter Notes

    性能概述

    # 我们已经讨论了几种用于在Pig Latin代码中查找错误的技术

    • 一旦你的代码工作,你会经常想要它工作更快

    # 性能调整是一个广泛和复杂的主题

    • 需要深入了解Pig,Hadoop,Java和Linux
    • 通常是工程师和系统管理员的领域

    # 这些主题大多超出了本课程的范围

    • 我们将在这里介绍一些基础知识,并提供几个性能改进提示
    • 有关详细信息,请参阅《Programming Pig》(第7章和第8章)

    Presenter Notes

    章节主题

    # Pig故障排除和优化

    • Pig故障排除
    • 记录
    • 使用Hadoop的Web UI
    • 可选演示:使用Web UI对失败的作业进行疑难解答
    • 数据采样和调试
    • 性能概述
    • 了解执行计划
    • 提高你的Pig作业性能的一些提示
    • 结论

    Presenter Notes

    Pig Latin如何变成一个MapReduce作业

    # Pig Latin代码最终在Hadoop集群上作为MapReduce作业运行

    # 但是,Pig不会将您的代码转换为Java MapReduce

    • 很像关系数据库不会将SQL转换为C语言代码一样
    • 像数据库一样,Pig解释Pig Latin来开发执行计划
    • Pig的执行引擎使用这些来向Hadoop提交MapReduce作业

    # EXPLAIN关键字详述了Pig的三个执行计划

    • 逻辑
    • 物理
    • MapReduce

    # 查看示例作业将有助于我们理解EXPLAIN的输出

    Presenter Notes

    我们的示例代码和数据的描述

    # 我们的目标是产生每个店铺的销售清单

    Presenter Notes

    使用EXPLAIN关键字

    # 使用EXPLAIN而不是DUMP将显示执行计划

    Presenter Notes

    章节主题

    # Pig故障排除和优化

    • Pig故障排除
    • 记录
    • 使用Hadoop的Web UI
    • 可选演示:使用Web UI对失败的作业进行疑难解答
    • 数据采样和调试
    • 性能概述
    • 了解执行计划
    • 提高你的Pig作业性能的一些提示
    • 结论

    Presenter Notes

    Pig的运行时优化

    # Pig不一定像你写的那样运行你的语句

    # 它可能会删除操作的效率

    sales = LOAD 'sales' AS (store_id:chararray, price:int);
    unused = FILTER sales BY price > 789;
    DUMP sales;
    

    # 它还可以重新整理操作以提高效率

    grouped = GROUP sales BY store_id;
    totals = FOREACH grouped GENERATE group, SUM(sales.price);
    joined = JOIN totals BY group, stores BY store_id;
    only_a = FILTER joined BY store_id == 'A';
    DUMP only_a;
    

    Presenter Notes

    您可以在您的Pig Latin代码中进行优化

    # Pig的优化器可以提高性能

    • 但你知道你自己的代码和数据比它更好
    • 您的代码中的一些小改动可以允许进行其他优化

    # 在接下来的几张幻灯片中,我们将重写这个Pig代码的性能

    stores = LOAD 'stores' AS (store_id, name, postcode, phone);
    sales = LOAD 'sales' AS (store_id, price);
    joined = JOIN sales BY store_id, stores BY store_id;
    DUMP joined;
    groups = GROUP joined BY sales::store_id;
    totals = FOREACH groups GENERATE
                FLATTEN(joined.stores::name) AS name,
                SUM(joined.sales::price) AS amount;
    unique = DISTINCT totals;
    region = FILTER unique BY name == 'Anchorage' OR name == 'Edmonton';
    sorted = ORDER region BY amount DESC;
    topone = LIMIT sorted 1;
    STORE topone INTO 'topstore';
    

    Presenter Notes

    你不是真的需要的就不要生产输出

    # 在这种情况下,我们忘记删除DUMP语句

    • 有时在从开发到生产时发生
    • 如果你不看终端,它可能会被忽视

    Presenter Notes

    尽可能指定模式

    # 在加载数据时指定模式消除了Pig猜测的需要

    • 它可能选择一个比你需要的更大的类型(例如,long而不是int)

    # 商店数据集中的邮政编码和电话字段也从未使用过

    • 在模式中删除它们可确保在连接中省略它们

    Presenter Notes

    尽可能早地过滤不需要的数据

    # 我们以前在我们的FILTER之前做了我们的JOIN

    • 这产生了大量数据而我们最终还是会丢弃掉
    • 将FILTER操作向上移动使我们的脚本更有效率
    • 注意:我们现在必须按商店ID而不是商店名称过滤

    Presenter Notes

    思考调节并行化

    # Hadoop集群通过并行处理数据来扩展

    • 较新的Pig版本根据输入大小选择减少器的数量
    • 但是,在脚本中显式设置值通常是有益的
    • 您的系统管理员可以帮助您确定最佳值

    Presenter Notes

    在Join中首先指定较小的数据集

    # 我们可以通过最后指定更大的数据集来优化连接

    • Pig将“流动”更大的数据集,而不是将其读入内存
    • 在我们的案例中,我们的销售记录远远超过商店数量
    • 更改JOIN语句中的顺序可以提高性能

    Presenter Notes

    提高性能的更多提示

    # 主题:尽早消除不必要的数据

    • 使用FOREACH ... GENERATE只选择您需要的字段
    • 当您只需要几个记录时,使用ORDER BY和LIMIT
    • 当不需要重复记录时,请使用DISTINCT

    # 在JOIN之前删除具有NULL键的记录可以提高性能

    • 这些记录将在最终输出中被消除
    • 但是Pig不会在连接之前丢弃它们
    • 在连接之前,使用FILTER删除带有空键的记录

    Presenter Notes

    章节主题

    # Pig故障排除和优化

    • Pig故障排除
    • 记录
    • 使用Hadoop的Web UI
    • 可选演示:使用Web UI对失败的作业进行疑难解答
    • 数据采样和调试
    • 性能概述
    • 了解执行计划
    • 提高你的Pig作业性能的一些提示
    • 结论

    Presenter Notes

    基本要点

    # 您可以通过在处理期间消除不必要的数据来提高性能

    # Pig的错误消息并不总是清楚地标识问题的根源

    • 我们建议您使用小数据示例测试脚本
    • 查看Web UI,尤其是日志消息,是会有帮助的

    # 这些资源帮助您解决问题

    Presenter Notes

    Presenter Notes