从 PigLatin 调用 API

Calling API from PigLatin

完全是 PigLatin 的新手,但希望从 MetOffice DataPoint 中提取数据 API 例如:

http://datapoint.metoffice.gov.uk/public/data/val/wxfcs/all/xml/350509?res=3hourly&key=abc123.....

...进入 Hadoop。

我的问题是"Can this be undertaken using PigLatin (from within Pig View, in Ambari)"?

我一直在寻找如何将 GET 请求格式化为代码,但没有成功。

我是不是找错人了?我是否应该寻求在 Hadoop 框架内使用不同的服务来完成此任务?

从 map-reduce 作业内部调用外部服务是非常糟糕的主意。原因是当 运行ning 在集群上时,您的作业可扩展性很强,而外部系统可能不是这样。像 YARN 这样的现代资源管理器让这种情况变得更糟,当你用请求淹没外部系统时,你在集群上的任务将大部分时间处于睡眠状态,等待服务器的回复。资源管理器将看到 CPU 没有被任务使用,并将更多的任务安排到 运行,这将向外部系统发出更多请求,使请求淹没更多。我见过普通的 100 台机器集群每秒发出 10 万个请求。

您真正想要做的是以某种方式从 Web 服务获取大量数据,或者设置一个系统,其中包含一个队列和少数受控数量的工作人员,这些工作人员将以设定的速率从外部系统中提取数据。

至于你最初的问题,我认为 PigLatin 不提供这样的服务,但它可以通过 Python 或 Java 的 UDF 轻松完成。使用 Python 您可以使用优秀的 requests 库,这将使您的 UDF 代码约为 6 行。 Java UDF 会更冗长一点,但按照 Java 标准来说没什么可怕的。

"Can this be undertaken using PigLatin (from within Pig View, in Ambari)"?

不,默认情况下 Pig 从 HDFS 存储加载,除非您编写自己的加载程序。

我和@Vlad 有相同的观点,这不是一个好主意,您还有许多其他组件用于数据摄取,但这不是 Pig 的用例!