zoukankan      html  css  js  c++  java
  • hadoop pig0.16 搭建

    Apache Pig是用来处理大规模数据的高级查询语言,配合Hadoop使用,可以在处理海量数据时达到事半功倍的效果,比使用Java,C++等语言编写大规模数据处理程序的难度要小N倍,实现同样的效果的代码量也小N倍。 

    一、安装

      pig下载地址:http://pig.apache.org/

      解压安装包至usr/local

    sudo tar zxvf pig-0.16.0.tar.gz  -C /usr/local
    

     二、环境配置

    sudo vim ~/.bashrc
    
    export PIG_HOME=/usr/local/pig-0.16.0
    
    export PATH=$PATH:$HADOOP_INSTALL/sbin:$HADOOP_INSTALL/bin:$PIG_HOME/bin

    配置生效

    source  ~/.bashrc

    测试是否安装成功

    pig --help

    进入pig 本地模式 (进入grunt shell) :

    该方式的所有文件和执行过程都在本地,一般用于测试程序

    pig -x local

    运行示例:

    在abc用户目录新增1.txt ,内容为:

    a    1    2    3    4.2    9.8
    a    3    0    5    3.5    2.1
    b    7    9    9    -    -
    a    7    9    9    2.6    6.2
    a    1    2    5    7.7    5.9
    a    1    2    3    1.4    0.2

    问题如下:怎样求出在第2、3、4列的所有组合的情况下,最后两列的平均值分别是多少?
    例如,第2、3、4列有一个组合为(1,2,3),即第一行和最后一行数据。对这个维度组合来说,最后两列的平均值分别为:
    (4.2+1.4)/2=2.8
    (9.8+0.2)/2=5.0
    而对于第2、3、4列的其他所有维度组合,都分别只有一行数据,因此最后两列的平均值其实就是它们自身。
    特别地,组合(7,9,9)有两行记录:第三、四行,但是第三行数据的最后两列没有值,因此它不应该被用于平均值的计算,也就是说,在计算平均值时,第三行是无效数据。所以(7,9,9)组合的最后两列的平均值为 2.6 和 6.2。
    我们现在用pig来算一下,并且输出最终的结果。

    A = LOAD '1.txt' AS (col1:chararray, col2:int, col3:int, col4:int, col5:double, col6:double);
    B = GROUP A BY (col2, col3, col4);
    C = FOREACH B GENERATE group, AVG(A.col5), AVG(A.col6);
    DUMP C;

    得到执行结果:

    以Mapreduce模式登录,实际工作模式,直接输入pig:

    三、pig 和hive 的区别

    pig的特点
    1)专注于于大量数据集分析;
    2)运行在集群的计算架构上,Yahoo Pig 提供了多层抽象,简化并行计算让普通用户使用;这些抽象完成自动把用户请求queries翻译成有效的并行评估计划,然后在物理集群上执行这些计划;
    3)提供类似 SQL 的操作语法;
    4)开放源代码;
    Pig与Hive的区别
      对于开发人员,直接使用Java APIs可能是乏味或容易出错的,同时也限制了Java程序员在Hadoop上编程的运用灵活性。于是Hadoop提供了两个解决方案,使得Hadoop编程变得更加容易。
      •Pig是一种编程语言,它简化了Hadoop常见的工作任务。Pig可加载数据、表达转换数据以及存储最终结果。Pig内置的操作使得半结构化数据变得有意义(如日志文件)。同时Pig可扩展使用Java中添加的自定义数据类型并支持数据转换。
      •Hive在Hadoop中扮演数据仓库的角色。Hive添加数据的结构在HDFS,并允许使用类似于SQL语法进行数据查询。与Pig一样,Hive的核心功能是可扩展的。
      Pig和Hive总是令人困惑的。Hive更适合于数据仓库的任务,Hive主要用于静态的结构以及需要经常分析的工作。Hive与SQL相似促使 其成为Hadoop与其他BI工具结合的理想交集。Pig赋予开发人员在大数据集领域更多的灵活性,并允许开发简洁的脚本用于转换数据流以便嵌入到较大的应用程序。Pig相比Hive相对轻量,它主要的优势是相比于直接使用Hadoop Java APIs可大幅削减代码量。正因为如此,Pig仍然是吸引大量的软件开发人员。
    请允许我很无聊的把飞机和火车拿来做比较,因为2者根本没有深入的可比性,虽然两者都是一种高速的交通工具,但是具体的作用范围是截然不同的,就像Hive和Pig都是Hadoop中的项目,并且Hive和pig有很多共同点,但Hive还似乎有点数据库的影子,而Pig基本就是一个对MapReduce实现的工具(脚本)。两者都拥有自己的表达语言,其目的是将MapReduce的实现进行简化,并且读写操作数据最终都是存储在HDFS分布式文件系统上。看起来Pig和Hive有些类似的地方,但也有些不同,来做一个简单的比较:
    Language
    在Hive中可以执行  插入/删除 等操作,但是Pig中我没有发现有可以 插入 数据的方法,请允许我暂且认为这是最大的不同点吧。
    Schemas
    Hive中至少还有一个“表”的概念,但是Pig中我认为是基本没有表的概念,所谓的表建立在Pig Latin脚本中,对与Pig更不要提metadata了。
    Partitions
    Pig中没有表的概念,所以说到分区对于Pig来说基本免谈,如果跟Hive说“分区”(Partition)他还是能明白的。
    Server
    Hive可以依托于Thrift启动一个服务器,提供远程调用。 找了半天压根没有发现Pig有这样的功能,如果你有新发现可以告诉我,就好像有人开发了一个Hive的REST
    Shell
    在Pig 你可以执行一些个 ls 、cat 这样很经典、很cool的命令,但是在使用Hive的时候我压根就没有想过有这样的需求。
    Web Interface
    Hive有,Pigg的特点

     转载SophieZhou的专栏

    (1)《Apache Pig的一些基础概念及用法总结(1)

    (2)《Apache Pig的一些基础概念及用法总结(2)

    (3)《Apache Pig中文教程(进阶)

    (4)《使用Apache Pig时应该注意/避免的操作或事项

  • 相关阅读:
    Release和Debug的区别[转]
    SVM运用到多分类[引]
    HMM
    [转] 数据挖掘 机器学习 模式识别的关系
    [转]mysql 数据导入
    java 获取当前时间戳
    二叉树遍历建树[zhuan]
    关于c指针[转]
    词法分析
    组合数据类型练习,综合练习
  • 原文地址:https://www.cnblogs.com/tatungzhang/p/6043915.html
Copyright © 2011-2022 走看看