• Apache Pig


    What is Pig

    Apache Pig是MapReduce的一个抽象,它是一个工具/平台(所以说它并不完全是一门语言),用于分析较大数据集,并将其表示为数据流;

    Pig通常与Hadoop一起使用,使用Pig进行数据处理、分析时,需要使用其提供的Pig Latin脚本语言编写相应脚本,这些脚本执行时会被转换为Map和Reduce任务(类似Spark),Pig Engine组件接受Pig Latin脚本为输入,并转换为作业;

    Why Pig

    可以把Pig看作是SQL,相对于java等高级语言来说,它的功能更加简单直接,更容易上手,同时又不像直接写MapReduce程序那样考虑太多分布式相关内容,因此Pig是一种较为适中的用于在分布式集群上进行作业编写的脚本语言;

    Component in Pig

    Parser:解析Pig脚本,检查其语法以及其他杂项,输出有向无环图DAG,其中运算符为节点,数据流为边;

    Optimizer:进行逻辑优化,例如投影和下推;

    Compiler:将逻辑计划转为一系列MapReduce作业;

    Execution engine:提交MapReduce作业到Hadoop;

    DataType in Pig

    Atom:任何单个值,无论其数据类型,都认为是原子的;

    Tuple:存储一系列字段值,可以是任何类型,类似行;

    Bag:一组无序的元组,每个元组中字段数量任意,也就是不需要对齐;

    Map:key-value对,key需要是chararray类型且需要唯一;

    Relation:一个关系是一个元组的包;

    Run with Pig

    Grunt Shell:以交互式的方式运行Pig代码,类似python shell;

    Script:以脚本方式运行Pig代码,类似python脚本;

    UDF:嵌入java等语言使用;

    Grunt Shell in Pig

    sh:在grunt shell中使用任何shell命令,比如ls;

    fs:在grunt shell中使用任何Hadoop命令,比如fs -ls;

    command:clear、help、history、set、quit、exec、run、kill;

    Pig Latin

    DataModel:Relation -> (Tuple,Tuple) -> ((name,age),(name,age,job)) -> ((张三,15),(李四,16,学生))

    DataType:int、long、float、double、chararray、Bytearray、Boolean、Datetime、Biginteger、Bigdecimal、Tuple、Bag、Map、Null;

    算术运算符:+ - * / % ?:三元运算符 CASE WHEN THEN ELSE多选语句;

    比较运算符:== != > < >= <= matches模式匹配;

    类型结构运算符:()-Tuple、{}-Bag、[]-Map;

    关系运算符:LOAD(将数据从fs加载到关系)、STORE(将数据从fs存储到关系)、FILTER(从关系中删除行)、DISTINCT(从关系中删除重复行)、FOREACH(基于数据列生成数据转换)、GENERATE、STREAM(使用外部程序转换关系)、JOIN(连接两个或多个关系)、COGROUP(将数据分组为两个或多个关系)、GROUP(在单个关系中对数据分组)、CROSS(创建两个或多个关系的向量积)、ORDER(基于一个或多个字段排序关系)、LIMIT(从关系中获取有限个元组)、UNION(将两个或多个关系合并为单个关系)、SPLIT(将单个关系拆分为两个或多个关系)、DUMP(在console上打印关系内容)、DESCRIBE(描述关系模式)、EXPLAIN(查看逻辑、物理或MapReduce执行计划以计算关系)、ILLUSTRATE(查看一系列预测的分步执行);

    语句:使用Relation,包括expression和schema,以分号结束,使用运算符执行操作,除LOAD和STORE外,其余语句均采用Relation作为输入,并产生另一个Relation作为输出;

    grunt> student_data = LOAD 'student_data.txt' USING PigStorage(',') as (id:int, firstname:chararray, lastname:chararray, phone:chararray, city:chararray)
    

    Function case with Pig

    在交互式过程中,定义的Relation都没有真正的执行,真正执行需要类似DUMP、LOAD、STORE等操作才会触发,类似Spark中的Action算子;

    student = LOAD './pig/student.txt' USING PigStorage(',') as (id:int, firstname:chararray, lastname:chararray, phone:chararray,city:chararray);
    STORE student INTO './pig/pig_output/' USING PigStorage('	');
    student_filter = FILTER student BY ENDSWITH(firstname,'i')
    DUMP student_filter;
    
  • 相关阅读:
    【leetcode】11. 盛最多水的容器
    【leetcode】8. 字符串转换整数 (atoi)
    【leetcode】6. Z 字形变换
    【leetcode】5. 最长回文子串
    【leetcode】LCP 19. 秋叶收藏集
    删除第一个节点问题
    问一个大学学习计算机这门专业的问题
    Struts文件上传页面上传后显示“连接已重置”
    2013-12-6 思杨没吃饱 饿醒了
    2013-12-7 snoopy乐园中的思杨
  • 原文地址:https://www.cnblogs.com/helongBlog/p/14297660.html
Copyright © 2020-2023  润新知