2

我正在尝试找到在 java 中对整个 pig 脚本运行解释命令的方法。我使用的是 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

当然你也可以使用 grunt shell!(我总是忘记这一点。)

在我们的网站上,我们使用了一个启动器脚本,它准备了一个 pig 调用命令,如下所示:

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

您可以explain -script在 grunt shell 中使用:

  • 调用pig
  • explain

看起来像:

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