在java中对整个脚本运行pig explain命令

kxkpmulp  于 2021-06-24  发布在  Pig
关注(0)|答案(3)|浏览(382)

我试图找到在java中对整个pig脚本运行explain命令的方法。我使用的是pigserver,但它只提供对单个查询(别名)的解释,而不是整个脚本。有没有办法做到:

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

但是从我的java代码?

r1wp621o

r1wp621o1#

您可以使用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);

希望这有帮助

iyfamqjs

iyfamqjs2#

当然你也可以用咕噜壳(我总是忘记这件事。)
在我们的网站上,我们使用了一个启动程序脚本,它准备了一个pig调用命令,如下所示:

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

你可以用 explain -script 在咕噜声中:
援引 pig 将脚本调用 Package 为 explain 它看起来像:

$ pig
grunt> explain -param param1=foo -param param2=bar script.pig
6pp0gazn

6pp0gazn3#

为此,您可以使用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:
Jackson制图器
antlr运行时
Guava

相关问题