使用Cygwin在Windows XP上进行PIG

时间:2013-01-09 19:37:52

标签: cygwin apache-pig

我用Cygwin在Windows XP上安装了PIG(0.10.0)。我还设置了JAVA_HOME变量。但是现在当我跑猪 - 帮助时,我得到“找不到猪。哇。做'蚂蚁罐',然后再试一次”。我没有安装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。做'蚂蚁罐',然后再试一次

我找不到它正在读这条路的地方。任何帮助都将非常感激。

1 个答案:

答案 0 :(得分:1)

我可以回答您的具体问题,但必须警告您,我还没有在我的PC上使用cygwin UNIX模拟器。我会告诉你我所知道的。

消息:'找不到pig.jar。做'蚂蚁罐'然后再试一次。'来自pig shell脚本末尾附近的一段代码。您正在使用pig-0.10.0。我试图让pig-0.11.1正常工作但收到的错误信息与你相同。如果未安装Hadoop,则没有目录将环境变量HADOOP_BIN指向shell脚本,因为脚本使用 - HADOOP_BIN = which hadoop来设置它。因此,在脚本末尾没有设置HADOP_BIN的情况下,代码分支需要将pig.jar或pig - ?。!(* withouthadoop).jar放在$ PIG_HOME给出的位置,放入变量PIG_JAR。您的shell脚本找不到这些,因此PIG_JAR为空,因此出现错误消息。

if [-n“$ PIG_JAR”];然后
CLASSPATH = “$ {CLASSPATH}:$ PIG_JAR”
否则
echo“找不到pig.jar。做'蚂蚁罐,然后再试一次”
1号出口 网络

java容器pig.jar在您的目录中不存在,因为尚未使用ant构建pig。但事实上,脚本应该找到pig.?.!(* withoutouthadoop).jar。您的目录中将有pig-0.10.0.jar,模式匹配意味着pig-后跟单个字符。除了以'withouthadoop'结尾的东西,然后是.jar之外,其余都是任何东西。 'withouthadoop'意味着jar不包含嵌入式hadoop,因此必须已安装hadoop。如果没有安装hadoop,看来猪-0.10.0.jar应该没问题。

那为什么不找到呢?在shell脚本中是为cygwin UNIX中运行脚本的人员提供的一小段代码:

如果$ cygwin;然后
CLASSPATH = 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 .. to c:/ Program Files / Java ..使用正斜杠 - 其中-m规定 - 有效。

在pig.jar中找不到'找不到org.apache.pig.Main'之后更多的痛苦(是的,我在弄清楚以上之前就已经把它弄好了)我终于得到了'咕噜咕噜>'提示。为了达到这个目的,我对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警告,检测到MS-DOS样式路径:c:\ pig \ pig-01~1 / pig.jar等。

  • 在删除了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的shell脚本末尾的代码行 - exec“$ JAVA”.. as:

exec“$ JAVA”$ JAVA_HEAP_MAX $ PIG_OPTS -classpath“cygpath -p -m $CLASSPATH”$ CLASS“$ {remaining [@]}”

  • 在PIG_HOME

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

export PATH =“$ PATH:/ cygdrive / c / Program Files / Java / jdk-your_version / bin:/ cygdrive / .. your-pig-home / bin”
导出JAVA_HOME =“/ cygdrive / c / Program Files / Java / jdk-your_version”
export CLASSPATH =“”

所有这些让我输入'pig -x local',我得到'grunt>'提示。有趣的是,通过下载pig-0.7.0,打开pig-0.7.0.tar.gz文件并运行pig -x local,它可以立即开箱即用。同样的'咕噜>'提示。

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