zoukankan      html  css  js  c++  java
  • 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;
    
  • 相关阅读:
    采用多种算法,模拟摇奖:从1-36中随机抽出8个不重复的数字
    有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?
    5文钱可以买一只公鸡,3文钱可以买一只母鸡,1文钱可以买3只雏鸡。现在用100文钱买100只鸡,那么各有公鸡、母鸡、雏鸡多少只?请编写程序实现。
    集合相关题目0927
    输入输出作业
    IO流,File类的测试........课堂加总结
    使用泛型............课堂
    Map 映射
    Set
    List相关知识点.......课堂加整理
  • 原文地址:https://www.cnblogs.com/helongBlog/p/14297660.html
Copyright © 2011-2022 走看看