Java で pig スクリプト全体に対して Explain コマンドを実行する方法を見つけようとしています。私は PigServer を使用していましたが、スクリプト全体ではなく、単一のクエリ (エイリアス) について説明することしか提供していません。次のような方法はありますか:
$ pig -x local -e 'explain -script Temp1/TPC_test.pig -out explain-out9.txt'
しかし、私のJavaコードから?
Java で pig スクリプト全体に対して Explain コマンドを実行する方法を見つけようとしています。私は PigServer を使用していましたが、スクリプト全体ではなく、単一のクエリ (エイリアス) について説明することしか提供していません。次のような方法はありますか:
$ pig -x local -e 'explain -script Temp1/TPC_test.pig -out explain-out9.txt'
しかし、私のJavaコードから?
この目的で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を回避するには、次のランタイム依存関係が必要であることがわかりました。
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);
お役に立てれば
もちろんイサキの甲羅も使えます!(私はいつもこれを忘れます。)
私たちのサイトでは、次のような豚の呼び出しコマンドを準備するランチャー スクリプトを使用しています。
$ pig -p param1=foo -p param2=bar script.pig
explain -script
grunt シェルで使用できます。
pig
explain
次のようになります。
$ pig
grunt> explain -param param1=foo -param param2=bar script.pig