我正在学习 Pig 作业,并希望使用 PigServer 通过 java 代码在远程集群上运行 pig 脚本。谁能指导我如何实现这一目标?提前致谢。
问问题
1199 次
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 回答