2

Java で pig スクリプト全体に対して Explain コマンドを実行する方法を見つけようとしています。私は PigServer を使用していましたが、スクリプト全体ではなく、単一のクエリ (エイリアス) について説明することしか提供していません。次のような方法はありますか:

$ pig -x local -e 'explain -script Temp1/TPC_test.pig -out explain-out9.txt'

しかし、私のJavaコードから?

4

3 に答える 3

5

この目的でPigRunnerを使用できます。
例えば:

import org.apache.pig.PigRunner;
import org.apache.pig.tools.pigstats.PigStats;

public class PigTest {

    public static void main(String[] args) throws Exception {

        args = new String [] {
                "-x", "local",
                "-e", "explain -script Temp1/TPC_test.pig -out explain-out9.txt"
        };

        PigStats stats = PigRunner.run(args, null);
        //print plan:
        //stats.getJobGraph().explain(System.out, "text", true);
    }

}

NoClassDefFoundErrorを回避するには、次のランタイム依存関係が必要であることがわかりました。

于 2013-02-18T19:50:52.263 に答える
0

org.apache.pig.PigServer を使用して、Java プログラムから pig スクリプトを実行できます。

PigServer pigServer = new PigServer(ExecType.MAPREDUCE);
pigServer.registerScript("scripts/test.pig");
Requires 'pig.properties' on classpath.

fs.default.name=hdfs://<namenode-hostname>:<port>
mapred.job.tracker=<jobtracker-hostname>:<port>
Or pass an instance of java.util.Properties to PigServer constructor.

Properties props = new Properties();
props.setProperty("fs.default.name", "hdfs://<namenode-hostname>:<port>");
props.setProperty("mapred.job.tracker", "<jobtracker-hostname>:<port>");
PigServer pigServer = new PigServer(ExecType.MAPREDUCE, props);

お役に立てれば

于 2013-02-18T14:57:41.350 に答える
0

もちろんイサキの甲羅も使えます!(私はいつもこれを忘れます。)

私たちのサイトでは、次のような豚の呼び出しコマンドを準備するランチャー スクリプトを使用しています。

$ pig -p param1=foo -p param2=bar script.pig

explain -scriptgrunt シェルで使用できます。

  • 呼び出すpig
  • スクリプト呼び出しをラップしますexplain

次のようになります。

$ pig
grunt> explain -param param1=foo -param param2=bar script.pig
于 2018-01-30T07:58:26.437 に答える