我是猪脚本,Hadoop,Hbase的新手。这是我需要知道的。我想运行一个猪脚本,我不想在我的java程序中嵌入pig脚本,并希望通过任何Pig Execution方法运行它,传递必要的pig脚本和参数(可能是参数文件)。核心猪库或任何其他库是否提供了执行pig脚本的方法。我已经尝试过使用java运行时exec方法,我使用空格分隔字符串传递一些参数,所以我通过运行时exec方法删除了调用pig grunt命令,因为它不是执行pig命令的正确方法。
答案 0 :(得分:8)
您可以使用org.apache.pig.PigServer从Java程序运行pig脚本。
PigServer pigServer = new PigServer(ExecType.MAPREDUCE);
pigServer.registerScript("scripts/test.pig");
在类路径上需要'pig.properties'。
fs.default.name=hdfs://<namenode-hostname>:<port>
mapred.job.tracker=<jobtracker-hostname>:<port>
或者将java.util.Properties的实例传递给PigServer构造函数。
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);
答案 1 :(得分:1)
我不确定我明白你在问什么。您想知道如何从Java程序运行Pig脚本吗?
如果是这样,我们会使用课程org.apache.pig.PigRunner
。
PigStats pigStats = PigRunner.run(args, null);
其Javadoc声明:
帮助在Java程序中运行PIG脚本的实用程序。
但是根据我的经验,Pig并不是真正意图以这种方式使用(至少在0.8版本中)。我们遇到了问题,例如保持打开的FileStream和未删除的临时文件。
答案 2 :(得分:1)
您可以尝试使用此链接,它提供了一个在java中嵌入pig脚本的非常好的示例。
答案 3 :(得分:0)
由于其他人已经通过在java中嵌入相同的内容来很好地解释了猪的执行,所以让我再补充一下如何在没有java的情况下运行参数化猪。
在这个场景中,您只需将您的猪行代码保存为猪文件,例如myFirstPigScript.pig
。
您需要的下一件事是内部参数。这里是使用三个输入参数运行myFirstPigScript.pig
的方法。
pig -p in1=file1.txt -p in2=file2.txt -p outdirectory=outdirectory myFirstPigScript.pig
您的猪脚本看起来像
A = load '$in1' USING PigStorage(',') AS (id_one:chararray,file1field1:chararray);
B = load '$in2' USING PigStorage(',') AS (id_two:chararray,file2field1:chararray);
C = join A by id_one, B by id_two;
store D into '$outdirectory' USING PigStorage(',') ;
示例输入文件将是一个双列csv文件
输出'part'文件将出现在outdirectory
中