Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中对整个脚本运行pig explain命令_Java_Apache Pig_Sql Execution Plan - Fatal编程技术网

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

在java中对整个脚本运行pig explain命令,java,apache-pig,sql-execution-plan,Java,Apache Pig,Sql Execution Plan,我试图找到在java中对整个pig脚本运行explain命令的方法。 我使用的是PigServer,但它只提供对单个查询(别名)的解释,而不是整个脚本。 有没有一种方法可以做到: $ pig -x local -e 'explain -script Temp1/TPC_test.pig -out explain-out9.txt' 但是从我的Java代码?可以使用org.apache.pig.PigServer从Java程序运行pig脚本: PigServer pigServer = new

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

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

但是从我的Java代码?

可以使用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);
PigServer-PigServer=新的PigServer(ExecType.MAPREDUCE);
registerScript(“scripts/test.pig”);
类路径上需要“pig.properties”。
fs.default.name=hdfs://:
mapred.job.tracker=:
或者将java.util.Properties的实例传递给PigServer构造函数。
Properties props=新属性();
props.setProperty(“fs.default.name”,“hdfs://:”;
setProperty(“mapred.job.tracker”,“:”);
PigServer PigServer=新的PigServer(ExecType.MAPREDUCE,props);
希望这有助于实现此目的。
例如:

我发现需要以下运行时依赖项来避免NoClassDefFoundError:


    • 当然,您也可以使用grunt外壳!(我总是忘记这件事。)

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

      $ pig -p param1=foo -p param2=bar script.pig
      
      您可以在grunt shell中使用
      explain-script

      • 调用
        pig
      • explain
      它看起来像:

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

      问题是我需要解释命令返回的执行计划。。。你知道如何在整个脚本中使用Java语言吗?太好了!我想这就行了!谢谢虽然我想从内部结构(字符串或其他)读取脚本,但我会设法处理。有没有办法使用PigRunner将输出消息转移到文件或自定义记录器?您可以重定向标准输出流,请参阅:如何将参数作为arg传递给PigRunner的run方法?我想给出一些变量值,通常在从命令行运行pig脚本时,我们会像-p paramname=paramvalue那样执行。
      $ pig
      grunt> explain -param param1=foo -param param2=bar script.pig