我可以回答您的具体问题,但必须警告您,我还没有让 pig 在我的 PC 上的 cygwin UNIX 模拟器上工作。我会告诉你我知道的。
消息:'找不到 pig.jar。做'ant jar'然后再试一次。来自 pig shell 脚本末尾附近的一段代码。您正在使用 pig-0.10.0。我试图让 pig-0.11.1 工作,但收到与您相同的错误消息。如果未安装 Hadoop,则在 shell 脚本中没有将环境变量 HADOOP_BIN 指向的目录,因为脚本使用 - HADOOP_BIN=which hadoop - 来设置它。因此,在脚本接近尾声时,没有设置 HADOP_BIN,代码分支到需要 pig.jar 或 pig-?.!(*withouthadoop).jar 在 $PIG_HOME 给定的位置,放入变量 PIG_JAR。您的 shell 脚本都找不到这些,因此 PIG_JAR 为空,因此出现错误消息。
如果 [ -n "$PIG_JAR" ];然后
CLASSPATH="${CLASSPATH}:$PIG_JAR"
其他
echo "找不到 pig.jar。做'ant jar,然后再试一次"
1号出口
菲
java 容器 pig.jar 不存在于您的目录中,因为 pig 不是使用 ant 构建的。但实际上,脚本应该找到 pig.?.!(*withouthadoop).jar。您的目录中将有 pig-0.10.0.jar,模式匹配意味着 pig- 后跟单个字符,后跟 .后面是任何东西,除了以 'withouthadoop' 结尾的东西,然后是 .jar 。 'withouthadoop' 表示 jar 不包含嵌入的 hadoop,因此必须已经安装了 hadoop。如果未安装 hadoop,则 pig-0.10.0.jar 似乎应该没问题。
那么为什么它没有找到呢?在 shell 脚本中有一小段代码供在 cygwin UNIX 中运行脚本的人使用:
如果 $cygwin;然后
类路径=cygpath -w "$CLASSPATH"
PIG_HOME=cygpath -d "$PIG_HOME"
PIG_LOG_DIR=cygpath -d "$PIG_LOG_DIR"
菲
这会将传递给 java.exe 的路径转换为 java.exe 可以理解的形式,因为它是 Windows 可执行文件。我发现在这些表达式中使用 -m 而不是 -w 或 -d - 让 cygpath 进行转换,例如/cygdrive/c/Program Files/Java .. 到 c:/Program Files/Java .. 使用正斜杠 - -m 规定 - 有效。
在 pig.jar 中使用 'cannot find org.apache.pig.Main ' 经历了很多痛苦之后(是的,我在弄清楚上述内容之前'anted'它)我终于得到了一个 'grunt>' 提示.为了实现这一点,我对 pig shell 脚本所做的修改是:
删除整个 if $cygwin; ... 上面描述的 fi 块。我假设将 $PIG_HOME 转换为 Windows 文件路径格式会导致代码块: if [-f $PIG_HOME/pig.jar];然后; PIG_JAR=$PIG_HOME/pig.jar;别的; PIG_JAR=echo $PIG_HOME/pig-?.!(*withouthadoop).jar; fi 抛出你看到的错误:cygwin warning, MS-DOS style path detected: c:\pig\pig-01~1/pig.jar, etc.
按照你删除cygwin路径翻译块的地方,将PIG_OPTS变量设置改写为:
PIG_OPTS="$PIG_OPTS -Dpig.log.dir=cygpath -m $PIG_LOG_DIR"
PIG_OPTS="$PIG_OPTS -DPIG.log.file=pig.log"
PIG_OPTS="$PIG_OPTS -Dpig.home.dir=cygpath -m $PIG_HOME"
- 将调用 java.exe - exec "$JAVA" .. 的 shell 脚本末尾的代码行重写为:
exec "$JAVA" $JAVA_HEAP_MAX $PIG_OPTS -classpath "cygpath -p -m $CLASSPATH" $CLASS "${remaining[@]}"
export PATH="$PATH:/cygdrive/c/Program Files/Java/jdk-your_version/bin:/cygdrive/..your-pig-home/bin"
export JAVA_HOME="/cygdrive/c/Program Files/Java/jdk-your_version"
导出 CLASSPATH=""
所有这些让我输入“pig -x local”,然后我得到一个“grunt>”提示。有趣的是,通过下载 pig-0.7.0、解压 pig-0.7.0.tar.gz 文件并在本地运行 pig -x,它可以立即使用。同样的 'grunt>' 提示。
但是,不幸的是,这是一个骗局。在这两种情况下。虚假的咕噜声 - 口技师的咕噜声。箭头键将光标移动到整个提示符上——实际上是屏幕上任何你喜欢的地方——返回键不输入任何内容,无论你输入了什么,只有控制+反斜杠有效,返回美元提示符。如果您到了这一点并了解正在发生的事情,请告诉我。