2013-04-13 41 views
1

我試圖在運行Ubuntu羣集上的實際豬腳本之前在Windows 7計算機上運行PigUnit測試,並開始認爲我對「withouthadoop」的理解不正確。在Windows 7上沒有Hadoop的豬

Do I need to install Hadoop to locally run a PigUnit test on a Windows 7 machine?

我裝:

  1. 日食朱諾&螞蟻
  2. cygwin的

我設置:

  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構建jar-allpigunit-jar

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

不過當我在Cygwin中鍵入pig -x local我得到:

$./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) 

當我嘗試從http://pig.apache.org/docs/r0.10.0/test.html#pigunit從Eclipse中運行測試使用選項「運行JUnit的」,我得到:

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世界。

回答

1

像你一樣,我現在正嘗試在Windows PC上使用cygwin來安裝Pig,以便在單個JVM上使用小數據集學習Pig Latin。不是一個巨大的問題,你會想到,但痛苦幾乎無法忍受。我來自Windows背景,UNIX部分對我來說是一個陡峭的學習曲線。沒有hadoop的罐子裏沒有hadoop,所以hadoop需要已經安裝在你的機器上才能使用它; pig.jar包含豬自己的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" 音響

Cygpath是一個cygwin實用程序,UNIX風格文件路徑變換爲Windows風格文件路徑,反之亦然。錯誤消息:「cygpath:無法轉換空路徑」必須來自這裏,我認爲。檢查CLASSPATH,PIG_HOME和PIG_LOG_DIR是否爲空,可能是將自己的回顯命令放在腳本中。

在我的機器和安裝上,這裏產生了一個錯誤,但與您的不一樣。我發現用-m替換-w和-d,這使得cygpath使用C:/ Program Files/Java ...語法轉換工作。但是接下來會出現其他問題,我將回答我自己的問題。

0

根據本說明[1],這是不可能使用在Windows 7上的Hadoop本地庫直接使用Cygwin:

Hadoop native library is supported only on *nix platforms only. Unfortunately it is known not to work on Cygwin [...]

我已經在Hadoop的配置追查下錯誤消息cygpath: can't convert empty path到行JAVA_LIBRARY_PATH=cygpath -w "$JAVA_LIBRARY_PATH" .SH我註釋掉下面從[2]

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上工作。因此:恕我直言,豬不能運行使用Cygwin,因爲它是。

1

不要打它。從Web Platform安裝程序在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/

+0

我需要HBase的,這對我來說不是可選的。但是這是一件很好的事情,有些讀者可能在這種情況下。 – ATN

+1

也許你可以在不同的機器上安裝Hbase,並且仍然可以在Win7上用HDInsight來做你的Pig事情。從來沒有與豬搏鬥過,你們都變髒了,豬喜歡它...... – TobyEvans

+0

和HBase現在在HDP 1.3中,效果很好 – TobyEvans

1

我已經安裝豬0.12在cygwin(我運行Windows 7的64位)沒有安裝hadoop。據我所看到的,步驟我跟着其中:

  • 安裝Cygwin64(與Perl包)

  • 下載豬0.12.1.tar.gz,複製到主文件夾

  • 提取到cygwin中的主文件夾:

    $ tar xzf pig-0.12.1.tar。GZ

  • 出口JAVA_HOME:

    $出口JAVA_HOME =/cygdrive/C /程序\文件/的Java/JRE6/

  • 添加豬路徑:

    $出口PATH =〜/豬-0.12.1 /斌/:$ PATH

  • 重命名豬0.12.1.jar到pig.jar:

    $ CP豬0.12.1.jar pig.jar

  • 出口PIG_CLASSPATH:

    $出口PIG_CLASSPATH =〜/豬-0.12.1/pig.jar以本地模式

  • 運行豬(開始咕嚕聲):

    $豬-x當地

  • 將會有一個警告: 「cygpath:無法創建C的簡稱:\ cygwin64 \家\ XXX \豬0.12.1 \日誌」 我們可以運行簡單的刪除:

    $的mkdir日誌

+0

一些跟進:我將導出移到了我的.bash_profile,並且我還修改了JAVA_HOME定義,以避免與「程序文件」中的空間問題(我在Windows中創建了一個連接點,將java文件夾映射到c:/ java_cygwin /中)。此時,我可以在本地模式下運行Pig並獲得Grump外殼。然而,Grump和Cygwin似乎存在一個問題(你編寫命令,但基本上沒有迴應,這在Stack Overflow的其他問題中已經有報道),所以我試圖運行豬腳本。 – Alfonso

+0

這不起作用,因爲默認的hadoop版本有一個與cygwin不兼容的bug。我在這一點上做的是安裝hadoop hadoop-0.20.2。這很有用:https://gist.github.com/tariqmislam/2159173但ssh部分有點過時,所以我跟着http://ebiquity.umbc.edu/Tutorials/Hadoop/05%20-%20Setup% 20SSHD.html – Alfonso

+0

仍然有數據節點不活着的另一個問題。我最後做的是嘗試恢復conf中文件的原始配置(我根據上述教程修改了一些文件)。我認爲這與在僞分佈式模式下運行hadoop而不是在單個節點上或類似的東西有關。無論如何,最後我設法運行豬官方文檔中的啓動指南中顯示的豬腳本。 – Alfonso

0

要在Windows 7上運行我PigUnit不安裝Cygwin。 感謝康斯坦丁·庫德里亞夫採夫我用他的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> 
相關問題