zoukankan      html  css  js  c++  java
  • hadoop应用pig

    第1章 引言

    1.1 编写目的

    介绍pig,一个不得不说的hadoop的扩展。

    1.2 什么是pig

    Pig是一个基于Hadoop的大规模数据分析平台,它提供的SQL-LIKE语言叫Pig Latin,该语言的编译器会把类SQL的数据分析请求转换为一系列经过优化处理的MapReduce运算。Pig为复杂的海量数据并行计算提供了一个简单的操作和编程接口。

    1.3 pig的特点

    1、专注于于大量数据集分析(ad-hoc analysis , ad-hoc 代表:a solution that has been custom designed for a specific problem );
          2、运行在集群的计算架构上,Yahoo Pig 提供了多层抽象,简化并行计算让普通用户使用;这些抽象完成自动把用户请求queries翻译成有效的并行评估计划,然后在物理集群上执行这些计划;
         3、提供类似 SQL 的操作语法;
         4、开放源代码;

    1.4 pig的主要用户

    1、yahoo

    2、twitter

    1.5 关于pig和hive

    对于开发人员,直接使用Java APIs可能是乏味或容易出错的,同时也限制了Java程序员在Hadoop上编程的运用灵活性。于是Hadoop提供了两个解决方案,使得Hadoop编程变得更加容易。

    •Pig是一种编程语言,它简化了Hadoop常见的工作任务。Pig可加载数据、表达转换数据以及存储最终结果。Pig内置的操作使得半结构化数据变得有意义(如日志文件)。同时Pig可扩展使用Java中添加的自定义数据类型并支持数据转换。

    •Hive在Hadoop中扮演数据仓库的角色。Hive添加数据的结构在HDFS(hive superimposes structure on data in HDFS),并允许使用类似于SQL语法进行数据查询。与Pig一样,Hive的核心功能是可扩展的。

    Pig和Hive总是令人困惑的。Hive更适合于数据仓库的任务,Hive主要用于静态的结构以及需要经常分析的工作。Hive与SQL相似促使 其成为Hadoop与其他BI工具结合的理想交集。Pig赋予开发人员在大数据集领域更多的灵活性,并允许开发简洁的脚本用于转换数据流以便嵌入到较大的应用程序。Pig相比Hive相对轻量,它主要的优势是相比于直接使用Hadoop Java APIs可大幅削减代码量。正因为如此,Pig仍然是吸引大量的软件开发人员。

     

    第2章 安装pig

    2.1 下载pig

    下载pig的最新版本:

    http://www.apache.org/dyn/closer.cgi/pig

    我下载的是pig-0.10.0.tar.gz  

    2.2 安装pig

    解压缩

    tar zxvf pig-0.10.0.tar.gz

    进入目录

    cd pig-0.10.0

    注意,pig是hadoop的工具,所以不需要修改原hadoop的配置。

    将pig加入到环境变量中:

    输入

    cd ~

    进入到用户主目录

    vi .bashrc

    最下边加入环境变量的配置

    保存然后执行

    . .bashrc

    输入 pig -help进行测试,如果设置成功,则出现如下界面

    如果想获取pig的源码,可以使用svn下载

    http://svn.apache.org/repos/asf/pig/trunk

    2.3 配置hadoop

    进入目录$PIG_HOME/conf

    修改配置文件,在pig.properties中加入

    fs.default.name=hdfs://localhost:9000

    mapred.job.tracker=localhost:9001

    指向本地伪分布式的hdfs和mapreduce

    在本地运行pig

    pig -x local

    得到如下界面

    和hadoop一起运行

    直接输入pig或者pig -x mapreduce

    有可能出现下面的错误

    Cannot find hadoop configurations in classpath (neither hadoop-site.xml nor core-site.xml was found in the classpath).

    需要配置~/.bashrc或者/etc/profile,建议配置.bashrc文件,加入

    export HADOOP_HOME=/home/hadoop/hadoop-1.0.3

    export PIG_CLASSPATH=$HADOOP_HOME/conf

    配置完成后可正常进入

    第3章 grunt shell

    3.1 基本命令

    Quit 退出grunt

    kill hadoopID 终止正在运行的hadoop进程

    set debug on 打开debug级别

    使用命令包括:

    help,quit,kill jobid,set debug [on|off],set job.name ‘jobname’

    文件命令包括:

    cat,cd,copyFromLocal,copyToLocal,cp,ls,mkdir,mv,pwd,rm,rmf,exec,run

    3.2 查询测试

    到安装目录下找到/tutorial/data/excite-sall.log文件,数据分为3列,按制表符分隔,第一列为用户ID,第二列为Unix时间戳,第三列为查询记录。

    输入如下语句:

    grunt> log = LOAD 'tutorial/data/excite-small.log' AS (user,time,query);

    将数据装载到一个称为log的别名中。

    查询返回4个元组并显示:

    grunt> lmt = LIMIT log 4;

    grunt> DUMP lmt;

    得到结果:

    PIG中的读写操作:

    LOAD

    从文件装载数据到一个关系

    LIMIT

    限制元组个数为n

    DUMP

    显示一个关系的内容,主要用于调试

    STORE

    将一个关系中的数据存储到一个目录中

    输入执行:

    grunt> log = LOAD '/home/lgstar888/hadoop/pig-0.10.0/tutorial/data/excite-small.log' AS (user:chararray,time:long,query:chararray);

    grunt> grpd = GROUP log BY user;

    grunt> cntd = FOREACH grpd GENERATE group,COUNT(log);

    grunt> STORE cntd INTO 'output';

    用于统计每个用户查询发起的个数

    使用grunt> DESCRIBE log;

    查看schema

    log: {user: chararray,time: long,query: chararray}

    pig中的诊断运算符:

    DESCRIBE alias;

    显示一个关系的schema

    EXPLAIN

    显示用于计算一个关系的执行计划

    ILLUSTRATE alias

    逐步显示数据如何被转换

    AVG

    求平均值

    CONCAT

    连接两个字符串

    COUNT

    计算一个包中的元组个数

    DIFF

    比较一个元组中的两个字段

    MAX

    计算在一个单列包中的最大值

    MIN

    计算在一个单列包中的最小值

    SIZE

    计算元素的个数

    SUM

    计算在一个单列包中的数值的总和

    IsEmpty

    检查一个包是否为空

    更多的相关的使用与配置已整理到

    http://code.google.com/p/mycloub/ 

  • 相关阅读:
    CPU使用率100%的一个原因
    Oracle 9.2.0.1升级到9.2.0.5
    Javacript同样的意思,更巧的写法
    前端面试题
    Linux shell
    vi/vim 光标移动命令
    CSS 中的分离、抽象和层叠
    practice first开张
    Linux下访问Windows的方法(原)
    Evolution收发Gmail邮件
  • 原文地址:https://www.cnblogs.com/itgg168/p/2796535.html
Copyright © 2011-2022 走看看