2

我试图在 Windows 7 机器上运行 PigUnit 测试,然后在 Ubuntu 集群上运行实际的 pig 脚本,我开始认为我对“ withouthadoop ”的理解是不正确的。

我是否需要安装Hadoop才能在 Windows 7 机器上本地运行 PigUnit 测试?

我安装了:

  1. 日食朱诺和蚂蚁
  2. 赛格温

我设置:

  1. JAVA_HOME=C:\Program Files\Java\jdk1.6.0_39
  2. PIG_HOME=C:\Users\john.doe\Java\eclipse\pig
  3. PIG_CLASSPATH=%PIG_HOME%\bin

我使用 eclipse 的 Ant builder 创建jar-allpigunit-jar

  1. pig.jar
  2. pig-withouthadoop.jar
  3. pigunit.jar

仍然当我输入pig -x localcygwin 时,我得到:

$./pig -x local
cygpath: can't convert empty path
Exception in thread "main" java.io.IOException: Error opening job jar: /usr/lib/pig/pig-withouthadoop.jar
    at org.apache.hadoop.util.RunJar.main(RunJar.java:135)
Caused by: java.io.FileNotFoundException: \usr\lib\pig\pig-withouthadoop.jar (the systen cannot find the given path)
    at java.util.zip.ZipFile.open(Native Method)
    at java.util.zip.ZipFile.<init>(ZipFile.java:127)
    at java.util.jar.JarFile.<init>(JarFile.java:136)
    at java.util.jar.JarFile.<init>(JarFile.java:73)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:133)

当我尝试使用选项“ Run as JUnit ”从 Eclipse 中的http://pig.apache.org/docs/r0.10.0/test.html#pigunit运行测试时,我得到:

java.io.IOException
at org.apache.pig.pigunit.pig.PigServer.registerScript(PigServer.java:62)
at org.apache.pig.pigunit.PigTest.registerScript(PigTest.java:171)
at org.apache.pig.pigunit.PigTest.assertOutput(PigTest.java:267)
at org.apache.pig.pigunit.PigTest.assertOutput(PigTest.java:262)
at da.utils.pigunit.PigUnitExample.testTop2Queries(PigUnitExample.java:72)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

我开始认为我错过了一些在 Windows 上运行 Pig 的关键基本信息,我还必须说我不是 Windows 7 和 cygwin 的经验丰富的用户,我来自 Unix 世界。

4

5 回答 5

2

不要与之抗争。通过 Web 平台安装程序在 Windows 上安装 Hadoop HDInsight 服务器:http: //www.microsoft.com/web/downloads/platform.aspx

它不需要很长时间或占用太多空间,整个 shebang 只是为您设置和运行。我无法让 Pig 脚本获取参数,也没有 HBase,但你会得到 HDFS、Pig、Hive。您甚至可以让整个本地集群运行,只要遵循:http ://social.msdn.microsoft.com/Forums/en-US/hdinsight/thread/885efc22-fb67-4df8-8648-4ff38098dac6/

于 2013-04-24T18:55:31.643 回答
2

我已经在 cygwin 中安装了 pig 0.12(我运行 windows 7 64 位),但没有安装 hadoop。据我所知,我遵循的步骤是:

  • 安装 Cygwin64(带 Perl 包)

  • 下载pig-0.12.1.tar.gz,复制到home文件夹

  • 解压到 cygwin 中的主文件夹:

    $ tar xzf pig-0.12.1.tar.gz

  • 导出 JAVA_HOME:

    $ export JAVA_HOME=/cygdrive/c/Program\ Files/Java/jre6/

  • 将猪添加到路径:

    $ 出口路径=~/pig-0.12.1/bin/:$PATH

  • 将 pig-0.12.1.jar 重命名为 pig.jar:

    $ cp pig-0.12.1.jar pig.jar

  • 导出 PIG_CLASSPATH:

    $ export PIG_CLASSPATH=~/pig-0.12.1/pig.jar

  • 以本地模式运行 pig(启动 Grunt):

    $ 猪 -x 本地

  • 会有一个警告:“cygpath: cannot create short name of C:\cygwin64\home\xxx\pig-0.12.1\logs” 我们可以通过运行简单地删除它:

    $ mkdir 日志

于 2014-07-15T14:06:57.530 回答
1

和你一样,我目前正在尝试使用 cygwin 在 Windows PC 上安装正常运行的 Pig,以便在单个 JVM 上使用小型数据集学习 Pig Latin。你会想,这不是一个很大的要求,但疼痛几乎无法忍受。我来自 Windows 背景,而 UNIX 部分对我来说是陡峭的学习曲线。pig-withouthadoop jar 不包含 hadoop,所以你的机器上需要已经安装了 hadoop 才能使用它;pig.jar 包含 pig 自己的 hadoop 版本,如果您的计算机上尚未安装 hadoop,则可以使用它。这是我理解它的方式,它似乎是通过将每个 .jar 的内容列表转储到文本文件并在 Notepad++ 中查看结果来产生的。

当您在 cygwin 的美元提示符下键入 pig -x local 时,将调用并运行 bash 命令脚本“pig”。用 $cd bin $ cat pig 看看它(从你的 PIG_HOME)。最近几天我一直在用 vim (!) 完成它,并且在代码的最后是为 cygwin 用户提供的一个小分支,以便将环境变量(到目前为止一直是 Unix 格式)转换为当在脚本末尾调用“exec java ...”时,Windows 版本的 java.exe 将理解这种形式。如果没有这种转换,Windows java.exe 将无法理解其参数:

'#' cygwin 路径转换
if $cygwin; 然后 CLASSPATH= cygpath -p -w "$CLASSPATH" PIG_HOME= cygpath -d "£PIG_HOME" PIG_LOG_DIR= cygpath -d "$PIG_LOG_DIR" fi

Cygpath 是一个 cygwin 实用程序,可将 UNIX 样式的文件路径转换为 ​​Windows 样式的文件路径,反之亦然。我认为错误消息:“cygpath:无法转换空路径”必须来自这里。检查 CLASSPATH、PIG_HOME 和 PIG_LOG_DIR 是否为空,可能通过在脚本中放置您自己的 echo 命令。

在我的机器和安装上,这里产生了一个错误,但和你的不一样。我发现用 -m 替换 -w 和 -d,这使得 cygpath 使用 C:/Program Files/Java... 语法转换,有效。但随后出现了其他问题,我将留给我自己的问题。

于 2013-04-16T16:04:40.780 回答
0

根据this note [1],无法直接使用Cygwin在Windows 7上使用Hadoop本机库:

Hadoop 本机库仅在 *nix 平台上受支持。不幸的是,众所周知,它不适用于 Cygwin [...]

我已将错误消息追溯到hadoop-config.sh 中cygpath: can't convert empty path的行,我按照[2]JAVA_LIBRARY_PATH=cygpath -w "$JAVA_LIBRARY_PATH"的建议将其注释掉

Comment some translation in hadoop-config.sh.

#if $cygwin; then
  #HADOOP_PREFIX=`cygpath -w "$HADOOP_PREFIX"`
  #HADOOP_LOG_DIR=`cygpath -w "$HADOOP_LOG_DIR"`
  #JAVA_LIBRARY_PATH=`cygpath -w "$JAVA_LIBRARY_PATH"`
#fi

现在我收到以下错误:

Error before Pig is launched -- ERROR 2999: Unexpected internal error.
java.lang.UnsupportedOperationException: Not implemented by the DistributedFileSystem FileSystem implementation

所以我从中得出的结论是,即使在本地模式下,Pig 也需要 HDFS。HDFS 需要 Hadoop 原生库。并且已知本机库不适用于 Cygwin。因此:恕我直言,Pig 无法按原样使用 Cygwin 运行。

于 2013-04-17T09:41:20.810 回答
0

在 Windows 7 上运行 PigUnit。我没有安装 Cygwin。 感谢 Konstantin Kudryavtsev 我使用他的 FixHadoopOnWindows.runFix() http://simpletoad.blogspot.com/2013/05/pigunit-issue-on-windows.html 我在我的设置中调用 runFix,例如

private static PigTest test;

@BeforeClass
public static void setUp() throws IOException, ParseException {
    try {
        FixHadoopOnWindows.runFix();
        // TODO: load pig script properly
        test = new PigTest("src/pig/example.pig");           

        //test.override(...);
    }
    catch (Exception e) {
    }
}

使用maven,需要以下依赖

         <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-core</artifactId>
            <version>1.2.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.pig</groupId>
            <artifactId>pig</artifactId>
            <version>0.15.0</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.forge</groupId>
            <artifactId>forge-javassist</artifactId>
            <version>2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.pig</groupId>
            <artifactId>pigunit</artifactId>
            <version>0.15.0</version>
            <scope>test</scope>
        </dependency>
于 2015-08-27T04:46:44.523 回答