首页 > 解决方案 > 面临在本地模式下运行 Pig 的问题,在 java udf 中失败

问题描述

我有一个 Pig UDF(用 Java 编写),它从 HDFS 中的 JSON 文件中读取数据并进行进一步计算。

下面是给出错误的代码行(代码段中的最后一行)。因为它无法连接到 HDFS 来查找文件。

Path path = new Path(filename);
FileSystem fs = FileSystem.get(new Configuration());
br = new BufferedReader(new InputStreamReader(fs.open(path)));

但是我的猪单位正在通过,这没有问题。

我想编写一个在本地和 mapreduce 两种执行模式下运行的通用代码。

标签: javaapache-pig

解决方案


我认为你需要调用这样的东西

FileSystem fs = path.getFileSystem(UDFContext.getUDFContext().getJobConf()); 

但是,如果您的 hdfs 具有任何类型的安全性,我希望这也会失败。Pig 本地模式纯粹用于本地,因此会跳过加载任何配置。 https://github.com/apache/pig/blob/a6c1a59eb42b600229bbe7f92b74363b515c1dfc/src/org/apache/pig/Main.java#L356-L358


推荐阅读