6

所以,我在网上看过几个教程,但每个教程似乎都说要做一些不同的事情。此外,他们每个人似乎都没有指定您是试图让事情在远程集群上工作,还是在本地与远程集群交互,等等......

也就是说,我的目标只是让我的本地计算机(mac)让 pig 使用已经设置为使用 lzo 文件的 Hadoop 集群上存在的 lzo 压缩文件。我已经在本地安装了 Hadoop,并且可以使用 hadoop fs -[command].

当我运行脚本或通过 grunt 运行东西时,我也已经在本地安装了 pig 并与 hadoop 集群通信。我可以很好地加载和播放非 lzo 文件。我的问题只是想办法加载 lzo 文件。也许我可以通过集群的 ElephantBird 实例来处理它们?我不知道,只在网上找到了很少的信息。

因此,任何类型的简短教程或答案都会很棒,希望能帮助更多的人,而不仅仅是我。

4

1 回答 1

4

我最近开始使用它,并为我的同事写了一个 wiki。这是一段详细说明如何让 PIG 与 lzos 一起工作的摘录。希望这对某人有帮助!

注意:这是为 Mac 编写的。对于其他操作系统,这些步骤几乎相同,这绝对应该为您提供在 Windows 或 Linux 上配置所需的知识,但您需要进行一些推断(显然,将以 Mac 为中心的文件夹更改为您的任何操作系统)重新使用等...)。

连接 PIG 以便能够与 LZO 一起工作

到目前为止,这对我来说是最烦人和最耗时的部分——不是因为它很难,而是因为网上有 50 种不同的教程,但都没有那么有用。无论如何,我为使其工作所做的工作是:

  1. 在https://github.com/kevinweil/hadoop-lzo从 github 克隆 hadoop-lzo 。

  2. 编译它以获得 hadoop-lzo*.jar 和本机 *.o 库。您需要在 64 位机器上编译它。

  3. 将本机库复制到 $HADOOP_HOME/lib/native/Mac_OS_X-x86_64-64/。

  4. 将 java jar 复制到 $HADOOP_HOME/lib 和 $PIG_HOME/lib

  5. 然后配置 hadoop 和 pig 让属性 java.library.path 指向 lzo 本机库。您可以在 $HADOOP_HOME/conf/mapred-site.xml 中执行此操作:

    <property>
        <name>mapred.child.env</name>
        <value>JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native/Mac_OS_X-x86_64-64/</value>
    </property>
    
  6. 现在通过再次运行尝试 grunt shell pig,并确保一切正常。如果没有,您可能弄乱了 mapred-site.xml 中的某些内容,您应该仔细检查一下。

  7. 伟大的!我们快要到了。您现在需要做的就是安装大象鸟。你可以从https://github.com/kevinweil/elephant-bird得到它(克隆它)。

  8. 现在,为了让大象鸟工作,你需要相当多的先决条件。这些在上面提到的页面上列出,并且可能会改变,所以我不会在这里指定它们。我要提到的是,这些版本非常重要。如果你得到一个不正确的版本并尝试运行 ant,你会得到错误。因此,不要尝试从 brew 或 macports 获取 pre-reqs,因为您可能会获得更新的版本。相反,只需下载 tarball 并为每个文件构建。

  9. 命令: ant 在大象鸟文件夹中以创建一个 jar。

  10. 为简单起见,请将您需要经常注册的所有相关 jar(hadoop-lzo-xxxjar 和elephant-bird-xxxjar)移动到可以轻松找到它们的地方。/usr/local/lib/hadoop/... 工作得很好。

  11. 试试看!在 grunt shell 中加载普通文件和 lzos。注册上面提到的相关 jars,尝试加载文件,将输出限制为可管理的数量,然后转储它。无论您使用的是普通文本文件还是 lzo,这都应该可以正常工作。

于 2011-09-19T19:46:35.627 回答