在java中运行pig而不嵌入pig脚本

d4so4syb  于 2021-06-21  发布在  Pig
关注(0)|答案(3)|浏览(463)

我是新的Pig脚本,hadoop,hbase。这是我需要知道的。我想运行一个pig脚本,我不想在我的java程序中嵌入pig脚本,我想通过任何pig执行方法来运行它,传递必要的pig脚本和参数(可能是参数文件)。核心pig库或任何其他库是否提供了执行pig脚本的方法。我已经尝试过java运行时exec方法,我用空格分隔的字符串传递一些参数,所以我放弃了通过运行时exec方法调用pig grunt命令,因为这不是执行pig命令的正确方法。

bihw5rsg

bihw5rsg1#

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

0kjbasz62#

我不太明白你在问什么。您想知道如何从java程序运行pig脚本吗?
如果是这样,我们就用这个班 org.apache.pig.PigRunner 为了这个。

PigStats pigStats = PigRunner.run(args, null);

其javadoc声明:
帮助在java程序中运行pig脚本的实用工具。
然而,根据我的经验,pig并不是真的打算以这种方式使用(至少在版本0.8中是这样)。我们遇到了一些问题,比如文件流保持打开状态,临时文件没有被删除。

rseugnpd

rseugnpd3#

既然其他人通过在java中嵌入pig来很好地解释pig的执行,那么让我来补充一下如何在没有java的情况下运行参数化pig。
在这个场景中,您所需要的只是将pig代码行保存为pig文件 myFirstPigScript.pig .
接下来需要的是内部参数。好吧,这是你跑步的方法 myFirstPigScript.pig 有三个输入参数。

pig -p in1=file1.txt -p in2=file2.txt -p outdirectory=outdirectory myFirstPigScript.pig

你的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中

相关问题