带有 Cygwin 的 Windows XP 上的 PIG

Posted

技术标签:

【中文标题】带有 Cygwin 的 Windows XP 上的 PIG【英文标题】:PIG on windows XP with Cygwin 【发布时间】:2013-01-09 19:37:52 【问题描述】:

我用 Cygwin 在 windows xp 上安装了 PIG (0.10.0)。我还设置了 JAVA_HOME 变量。但是现在当我运行 pig -help 时,我得到“找不到 pig.jar。做 'ant jar',然后再试一次”。我没有安装hadoop(使用嵌入式版本)。

另外,当我在设置 JAVA_HOME 后第一次运行命令时,我收到了以下警告:

cygwin 警告: 检测到 MS-DOS 样式路径:C:\Pig\PIG-01~1.0/pig.jar 首选的 POSIX 等效项是:/cygdrive/c/Pig/PIG-01~1.0/pig.jar CYGWIN 环境变量选项“nodosfilewarning”关闭此警告。 有关 POSIX 路径的更多详细信息,请参阅用户指南: ... 找不到 pig.jar。做'ant jar',然后再试一次

我无法找到它正在读取此路径的位置。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

我可以回答您的具体问题,但必须警告您,我还没有让 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[@]"

在您的 PIG_HOME 中创建一个“日志”目录

将以下导出条目放入主目录的 .bashrc 文件中,以在 bash shell 启动时初始化环境变量:

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>' 提示。

但是,不幸的是,这是一个骗局。在这两种情况下。虚假的咕噜声 - 口技师的咕噜声。箭头键将光标移动到整个提示符上——实际上是屏幕上任何你喜欢的地方——返回键不输入任何内容,无论你输入了什么,只有控制+反斜杠有效,返回美元提示符。如果您到了这一点并了解正在发生的事情,请告诉我。

【讨论】:

以上是关于带有 Cygwin 的 Windows XP 上的 PIG的主要内容,如果未能解决你的问题,请参考以下文章

Windows XP环境下 搭建Android NDK环境

在 Windows 上的 CygWin 下调用 python 挂起

如何在 Windows 上的 Cygwin 中运行 crontab?

Windows 上的 Matlab:将“mex”默认编译器更改为 Cygwin 的 GCC [重复]

Windows 10 Cygwin 中的 OpenMPI java 绑定

从 ubuntu 机器远程运行 windows xp bat 脚本