使用 Ant 构建 Pig 的难度

Posted

技术标签:

【中文标题】使用 Ant 构建 Pig 的难度【英文标题】:Difficulty building Pig using Ant 【发布时间】:2014-06-17 13:42:22 【问题描述】:

我是一个猪新手,一直试图让它在我的 Windows 7 机器上运行。我的 hadoop (2.4.0) 在我的本地机器上运行良好,但是每当我尝试运行一个简单的 Pig 脚本时,每当我尝试转储文件的内容时它都会引发错误。

找到了here 的类似问题的解决方案,我尝试使用 Ant 重建我的 Pig (0.12.1)。 每当我跑步时

ant clean jar-withouthadoop -Dhadoopversion=23

我收到以下错误:

Buildfile: C:\pig-0.12.1-src\build.xml
......
[org.apache.ftpserver#ftpserver-core;1.0.0] in [hadoop20]
[ivy:resolve]   org.apache.mina#mina-core;2.0.0-M2 by [org.apache.mina#mina-core;2.0.0-M5] in [hadoop20]
---------------------------------------------------------------------
|                  |            modules            ||   artifacts   |
|       conf       | number| search|dwnlded|evicted|| number|dwnlded|
---------------------------------------------------------------------
|      master      |   0   |   0   |   0   |   0   ||   0   |   0   |
|      default     |  101  |   32  |   0   |   3   ||  101  |   0   |
|      runtime     |  101  |   32  |   0   |   3   ||  101  |   0   |
|      compile     |   89  |   29  |   0   |   2   ||   90  |   0   |
|       test       |  101  |   32  |   0   |   3   ||  101  |   0   |
|      javadoc     |  101  |   32  |   0   |   3   ||  101  |   0   |
|   releaseaudit   |   3   |   2   |   0   |   0   ||   3   |   0   |
|       jdiff      |   3   |   0   |   0   |   0   ||   3   |   0   |
|    checkstyle    |   10  |   3   |   0   |   0   ||   10  |   0   |
|     buildJar     |  101  |   32  |   0   |   3   ||  101  |   0   |
|     hadoop20     |   48  |   30  |   0   |   9   ||   39  |   0   |
|     hadoop23     |   40  |   13  |   0   |   0   ||   42  |   0   |
|      hbase94     |   1   |   0   |   0   |   0   ||   2   |   0   |
|      hbase95     |   7   |   0   |   0   |   0   ||   13  |   0   |
---------------------------------------------------------------------

ivy-compile:
[ivy:retrieve] :: retrieving :: org.apache.pig#pig
[ivy:retrieve]  confs: [compile]
[ivy:retrieve]  90 artifacts copied, 0 already retrieved (80170kB/407ms)
[ivy:cachepath] DEPRECATED: 'ivy.conf.file' is deprecated, use 'ivy.settings.file' instead
[ivy:cachepath] :: loading settings :: file = C:\pig-0.12.1-src\ivy\ivysettings.xml

init:
    [mkdir] Created dir: C:\pig-0.12.1-src\src-gen\org\apache\pig\impl\logicalLayer\parser
    [mkdir] Created dir: C:\pig-0.12.1-src\src-gen\org\apache\pig\tools\pigscript\parser
    [mkdir] Created dir: C:\pig-0.12.1-src\src-gen\org\apache\pig\tools\parameters
    [mkdir] Created dir: C:\pig-0.12.1-src\build\classes
    [mkdir] Created dir: C:\pig-0.12.1-src\build\test\classes
    [mkdir] Created dir: C:\pig-0.12.1-src\test\org\apache\pig\test\utils\dotGraph\parser
    [mkdir] Created dir: C:\pig-0.12.1-src\src-gen\org\apache\pig\data\parser
    [move] Moving 1 file to C:\pig-0.12.1-src\build\ivy\lib\Pig

cc-compile:
   [javacc] Java Compiler Compiler Version 4.2 (Parser Generator)
   [javacc] (type "javacc" with no arguments for help)
   [javacc] Reading from file C:\pig-0.12.1-
    ....
   [javacc] Parser generated successfully.

prepare:
    [mkdir] Created dir: C:\pig-0.12.1-src\src-gen\org\apache\pig\parser

genLexer:
     [java] error(1):  cannot write file : java.io.FileNotFoundException: C:\pig-0.12.1-src\src-gen\org\apache\pig\parser\C:\QueryLexer.java (The filename, directory name, or volume label syntax is incorrect)
     [java] java.io.FileOutputStream.open(Native Method)
     [java] java.io.FileOutputStream.<init>(FileOutputStream.java:221)
     [java] java.io.FileOutputStream.<init>(FileOutputStream.java:171)
     [java] java.io.FileWriter.<init>(FileWriter.java:90)
     [java] org.antlr.Tool.getOutputFile(Tool.java:871)
     [java] org.antlr.codegen.CodeGenerator.write(CodeGenerator.java:1262)
     [java] org.antlr.codegen.Target.genRecognizerFile(Target.java:94)
     [java] org.antlr.codegen.CodeGenerator.genRecognizer(CodeGenerator.java:460)
     [java] org.antlr.Tool.generateRecognizer(Tool.java:655)
     [java] org.antlr.Tool.process(Tool.java:468)
     [java] org.antlr.Tool.main(Tool.java:93)
BUILD FAILED
C:\pig-0.12.1-src\build.xml:495 Java returned: 1

我在这里做错了什么?我是缺少文件,还是 build.xml 中的配置问题?

编辑:我已经从 cmd 和 cygwin 终端运行了这个命令。它们都输出相同的错误。

EDIT2:我正在使用 Ant (1.9.4) 构建

最终编辑:原来我需要将 pig src 存档(pig-0.12.1-src.tar.gz)移动到 cygwin 主目录,解压缩,cd 到解压缩的存档并运行命令。

【问题讨论】:

您是否尝试使用来自cygwin 的相同命令? 我做了,产生了同样的错误。 【参考方案1】:

我遇到了同样的问题。我通过在我的 cygwin 家中通过 cygwin 编译 pig 来解决它。

我的常春藤设置是这样的:

<ivysettings>

 <!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->

 <!--
  see http://www.jayasoft.org/ivy/doc/configuration
  -->
  <!-- you can override this property to use mirrors
          http://repo1.maven.org/maven2/
          http://mirrors.dotsrc.org/maven2
          http://ftp.ggi-project.org/pub/packages/maven2
          http://mirrors.sunsite.dk/maven2
          http://public.planetmirror.com/pub/maven2
          http://ibiblio.lsu.edu/main/pub/packages/maven2
          http://www.ibiblio.net/pub/packages/maven2
  -->
  <property name="repo.maven.org" value="$mvnrepo" override="true"/>
  <property name="repo.jboss.org" value="http://repository.jboss.com/nexus/content/groups/public/" override="false"/>
  <property name="repo.apache.snapshots" value="http://repository.apache.org/content/groups/snapshots-group/" override="false"/>
  <property name="repo.dir" value="$user.home/.m2/repository" override="false"/>
  <property name="maven2.pattern" value="[organisation]/[module]/[revision]/[module]-[revision](-[classifier])"/>
  <property name="maven2.pattern.ext" value="$maven2.pattern.[ext]"/>
  <property name="snapshot.pattern" value="[organisation]/[module]/[revision]/[artifact]-[revision](-[classifier]).[ext]"/>
  <property name="resolvers" value="default" override="false"/>
  <property name="force-resolve" value="false" override="false"/>
  <!-- pull in the local repository -->
  <include url="$ivy.default.conf.dir/ivyconf-local.xml"/>
  <settings defaultResolver="$resolvers"/>
  <resolvers>
    <ibiblio name="maven2" root="$repo.maven.org" pattern="$maven2.pattern.ext" m2compatible="true"/>
    <ibiblio name="jboss-maven2" root="$repo.jboss.org" pattern="$maven2.pattern.ext" m2compatible="true"/>
    <ibiblio name="apache-snapshots" root="$repo.apache.snapshots" pattern="$snapshot.pattern"
         checkmodified="true" changingPattern=".*SNAPSHOT" m2compatible="true"/>
    <filesystem name="fs" m2compatible="true" checkconsistency="false" force="$force-resolve"
         checkmodified="true" changingPattern=".*SNAPSHOT">
      <artifact pattern="$repo.dir/$maven2.pattern.ext"/>
      <ivy pattern="$repo.dir/[organisation]/[module]/[revision]/[module]-[revision].pom"/>
    </filesystem>
    <chain name="internal" checkmodified="true">
      <resolver ref="fs"/>
    </chain>
    <chain name="external" dual="true">
      <resolver ref="maven2"/>
      <resolver ref="jboss-maven2"/>
      <resolver ref="apache-snapshots"/>
    </chain>
    <chain name="default" dual="true" checkmodified="true">
      <resolver ref="internal"/>
      <resolver ref="external"/>
    </chain>
  </resolvers>
  <modules>
    <module organisation="org.apache.pig" name=".*" resolver="internal"/>
  </modules>
</ivysettings>

【讨论】:

你能分享你的 ivy.settings 吗?

以上是关于使用 Ant 构建 Pig 的难度的主要内容,如果未能解决你的问题,请参考以下文章

找不到 pig-core-h2.jar。执行 'ant -Dhadoopversion=23 jar',然后再试一次

Groovy构建工具 ( 构建工具引入 | Gradle 构建工具作用 | 传统的依赖管理 )

你可以使用ANT构建文件作为Phing构建文件吗?

Ant—使用Ant构建简单Java项目

使用Ant构建当前构建目标的依赖关系

如何使用 Ant 构建 Android 项目? (IntelliJ IDE)