2

Ubuntu クラスターで実際の pig スクリプトを実行する前に、Windows 7 マシンで PigUnit テストを実行しようとしていますが、「 withouthadoop 」についての私の理解が正しくないと思い始めました。

Windows 7 マシンで PigUnit テストをローカルに実行するには、Hadoopをインストールする必要がありますか?

インストールしました:

  1. 日食ジュノ & アリ
  2. シグウィン

私はセットアップしました:

  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

それでもpig -x localcygwinと入力すると、次のようになります。

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

オプション「Run as JUnit 」を使用してEclipse内からhttp://pig.apache.org/docs/r0.10.0/test.html#pigunitからテストを実行しようとすると、次のようになります。

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 の世界から来ました。

4

5 に答える 5

2

Hadoop をインストールせずに、cygwin (Windows 7 64 ビットを実行) に pig 0.12 をインストールしました。私が見る限り、私が従った手順は次のとおりです。

  • Cygwin64 のインストール (Perl パッケージ付き)

  • pig-0.12.1.tar.gz をダウンロードし、ホーム フォルダにコピーします。

  • cygwin のホーム フォルダーに展開します。

    $ tar xzf 豚-0.12.1.tar.gz

  • JAVA_HOME をエクスポートします。

    $ export JAVA_HOME=/cygdrive/c/Program\ Files/Java/jre6/

  • 豚をパスに追加:

    $ export PATH=~/pig-0.12.1/bin/:$PATH

  • pig-0.12.1.jar の名前を pig.jar に変更します。

    $ cp pig-0.12.1.jar pig.jar

  • PIG_CLASSPATH をエクスポートします。

    $ export PIG_CLASSPATH=~/pig-0.12.1/pig.jar

  • pig をローカル モードで実行します (Grunt を開始します):

    $ 豚 -x ローカル

  • 「cygpath: cannot create short name of C:\cygwin64\home\xxx\pig-0.12.1\logs」という警告が表示されます。次のコマンドを実行するだけで削除できます。

    $ mkdir ログ

于 2014-07-15T14:06:57.530 に答える
2

それと戦わないでください。Web プラットフォーム インストーラーから Hadoop HDInsight サーバーを Windows にインストールします: http://www.microsoft.com/web/downloads/platform.aspx

それほど時間もスペースも必要とせず、シバン全体をセットアップして実行するだけです。Pig スクリプトにパラメーターを取得させることはできません。HBase はありませんが、HDFS、Pig、Hive を取得できます。次のようにすれば、ローカル クラスター全体を稼働させることもできます

于 2013-04-24T18:55:31.643 に答える
1

あなたと同じように、私は現在、単一の JVM で小さなデータセットを使用して Pig Latin を学習するために、cygwin を使用して Windows PC で機能する Pig インストールを取得しようとしています。大したことではないと思っていたかもしれませんが、痛みはほとんど耐えられません. 私は Windows のバックグラウンドを持っており、UNIX の部分は私にとって急な学習曲線です。pig-withouthadoop jar には hadoop が含まれていないため、hadoop を使用するにはマシンに既にインストールされている必要があります。pig.jar には pig 独自のバージョンの 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 の場合の cygwin パスの変換。次に CLASSPATH= cygpath -p -w "$CLASSPATH" PIG_HOME= cygpath -d "£PIG_HOME" PIG_LOG_DIR= cygpath -d "$PIG_LOG_DIR" fi

Cygpath は、UNIX スタイルのファイル パスを Windows スタイルのファイル パスに、またはその逆に変換する cygwin ユーティリティです。エラーメッセージ:「cygpath:空のパスを変換できません」はここから来ているに違いないと思います。CLASSPATH、PIG_HOME、および PIG_LOG_DIR が空でないことを確認してください。たとえば、スクリプトに独自の echo コマンドを配置してください。

私のマシンとインストールでは、ここでエラーが生成されましたが、あなたのものとは異なります。-w と -d を -m に置き換えると、cygpath で C:/Program Files/Java... 構文変換が使用されるようになりました。しかし、別の問題が発生するので、それについては私自身の質問に譲ります。

于 2013-04-16T16:04:40.780 に答える
0

Windows 7 で PigUnit を実行するには、Cygwin をインストールしません。Konstantin Kudryavtsev に感謝します。私は彼の FixHadoopOnWindows.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>
于 2015-08-27T04:46:44.523 に答える
0

このメモ[1]によると、Cygwin を使用して Windows 7 で Hadoop ネイティブ ライブラリを直接使用することはできません。

Hadoop ネイティブ ライブラリは、*nix プラットフォームのみでサポートされています。残念ながら、Cygwin では動作しないことが知られています [...]

[2]からのアドバイスに従ってコメントアウトした hadoop-config.shcygpath: can't convert empty pathの行まで、エラー メッセージをたどりました。JAVA_LIBRARY_PATH=cygpath -w "$JAVA_LIBRARY_PATH"

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 では動作しないことが知られています。したがって、私見、PigはCygwinをそのまま使用して実行することはできません。

于 2013-04-17T09:41:20.810 に答える