1

我正在学习 Pig 作业,并希望使用 PigServer 通过 java 代码在远程集群上运行 pig 脚本。谁能指导我如何实现这一目标?提前致谢。

4

2 回答 2

3

上面的代码是否可以用于远程调用,即 Pig 安装在 cluster1 上,并且调用是从集群外部的应用程序服务器进行的?

于 2014-03-28T10:57:59.767 回答
2

您必须使用PigServer该类连接到您的集群、注册您的 Pig 查询并获得结果。您可以选择通过在磁盘上传递文件名来运行脚本,也可以直接编写 Pig 脚本行并将其作为 Java 字符串传递。

从文件名传递 Pig 脚本:

PigServer pig = new PigServer(ExecType.MAPREDUCE);
pig.registerScript("/path/to/test.pig");

要将 Pig 程序作为字符串传递:

PigServer pig = new PigServer(ExecType.MAPREDUCE);
pig.registerQuery("A = LOAD 'something' USING PigLoader();");

例如,您可以通过以下方式取回结果:

Iterator<Tuple> i = pig.openIterator("A");
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
while (i.hasNext()) {
    Integer val = DataType.toInteger(i.next().get(0));
    map.put(val, val);            
}

请注意,您需要在类路径中有一些属性,fs.default.name或者mapred.job.tracker您可以将它们添加到PigServer构造函数中。

于 2013-01-24T19:44:19.160 回答