使用 Hadoop 配置猪关系

Posted

技术标签:

【中文标题】使用 Hadoop 配置猪关系【英文标题】:Configuring pig relation with Hadoop 【发布时间】:2014-05-23 14:39:34 【问题描述】:

我无法理解 Hadoop 和 Pig 之间的关系。 我了解 Pig 的目的是将 MapReduce 模式隐藏在脚本语言 Pig Latin 之后。

我不明白 Hadoop 和 Pig 是如何关联的。到目前为止,唯一的安装过程似乎假设 pig 与主 hadoop 节点在同一台机器上运行。 实际上,它使用了 hadoop 配置文件。

这是因为 pig 只将脚本翻译成 mapreduce 代码并将它们发送到 hadoop 吗?

如果是这样,我该如何配置 Pig 以使其将脚本发送到远程服务器?

如果不是,是否意味着我们总是需要让 hadoop 在 pig 中运行?

【问题讨论】:

【参考方案1】:

Pig 可以在两种模式下运行:

    本地模式。在此模式下根本不使用 Hadoop 集群。所有进程都在单个 JVM 中运行,并且从本地文件系统中读取文件。要在本地模式下运行 Pig,请使用以下命令:

    pig -x local 
    

    MapReduce 模式。 在这种模式下,Pig 将脚本转换为 MapReduce 作业并在 Hadoop 集群上运行它们。这是默认模式。

    集群可以是本地的或远程的。 Pig 使用 HADOOP_MAPRED_HOME 环境变量在本地机器上查找 Hadoop 安装(请参阅Installing Pig)。

    如果你想连接到远程集群,你应该在 pig.properties 文件中指定集群参数。 MRv1 示例:

    fs.default.name=hdfs://namenode_address:8020/
    mapred.job.tracker=jobtracker_address:8021
    

    你也可以在命令行指定远程集群地址:

    pig -fs namenode_address:8020 -jt jobtracker_address:8021
    

因此,您可以将 Pig 安装到任何机器并连接到远程集群。 Pig 包含 Hadoop 客户端,因此您无需安装 Hadoop 即可使用 Pig。

【讨论】:

最后一个问题:当您使用 MapReduce 模式时,ls 是否会向您显示集群的文件(就像您使用 ssh 时一样)? 是的。在我的 Pig (0.11.0-cdh4.6.0) 版本中,ls 显示完整路径,包括协议(hdfs:// 用于集群文件,file:// 用于本地文件)。 我明白了。感谢您的回答!

以上是关于使用 Hadoop 配置猪关系的主要内容,如果未能解决你的问题,请参考以下文章

本地模式下的猪与没有 hadoop.jar 的猪之间的区别

Hadoop 猪过滤器

Pig Hadoop Stream 帮助

猪错误:未处理的内部错误。找到了接口 org.apache.hadoop.mapreduce.TaskAttemptContext,但是需要类

Apache Pig - 在猪关系中加载时缺少数字数据

阿帕奇猪程序