尝试使用 JAVA 启动 Pig 脚本时出错

Posted

技术标签:

【中文标题】尝试使用 JAVA 启动 Pig 脚本时出错【英文标题】:Error while trying to launch Pig script with JAVA 【发布时间】:2013-05-23 08:53:30 【问题描述】:

我正在尝试从 JAVA 启动猪脚本。这是我的代码:

import java.io.IOException;
import java.util.Properties;
import org.apache.pig.ExecType;
import org.apache.pig.PigServer;
import org.apache.pig.backend.executionengine.ExecException;


public class pigCV 


public static void main(String args[])

    PigServer pigServer;
    try 

        Properties props = new Properties();
        props.setProperty("fs.default.name", "hdfs://hdfs://localhost:8022");
        props.setProperty("mapred.job.tracker", "localhost:8021");

        pigServer = new PigServer(ExecType.MAPREDUCE, props);

        pigServer.registerScript("Desktop/text_v3.pig");

     
    catch (ExecException e)    e.printStackTrace();  
    catch (IOException e)  e.printStackTrace(); 





但是会抛出一些异常:

2013-05-23 01:34:54,666 错误 [main] conf.Configuration(1151): 设置失败 setXIncludeAware(true) 用于解析器 org.apache.xerces.jaxp.DocumentBuilderFactoryImpl@1787038:java.lang.UnsupportedOperationException:此解析器不支持规范“null”版本“null” java.lang.UnsupportedOperationException:此解析器不支持规范“null”版本“null” 在 javax.xml.parsers.DocumentBuilderFactory.setXIncludeAware(DocumentBuilderFactory.java:590) 在 org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:1149) 在 org.apache.hadoop.conf.Configuration.loadResources(Configuration.java:1125) 在 org.apache.hadoop.conf.Configuration.getProps(Configuration.java:1064) 在 org.apache.hadoop.conf.Configuration.get(Configuration.java:424) 在 org.apache.hadoop.mapred.JobConf.checkAndWarnDeprecation(JobConf.java:1709) 在 org.apache.hadoop.mapred.JobConf.(JobConf.java:164) 在 org.apache.pig.backend.hadoop.executionengine.HExecutionEngine.init(HExecutionEngine.java:169) 在 org.apache.pig.backend.hadoop.executionengine.HExecutionEngine.init(HExecutionEngine.java:137) 在 org.apache.pig.impl.PigContext.connect(PigContext.java:200) 在 org.apache.pig.PigServer.(PigServer.java:169) 在 org.apache.pig.PigServer.(PigServer.java:158) 在 org.apache.pig.PigServer.(PigServer.java:154) 在 pigCV.main(pigCV.java:21)

你有什么想法可以帮助我吗?

谢谢。

【问题讨论】:

【参考方案1】:

您的类路径中可能有(n 个旧的)Xerces 实现。 尝试设置

-Djavax.xml.parsers.DocumentBuilderFactory=
   com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl

(在 Eclipse 中:VM 参数)或代码中:

System.setProperty("javax.xml.parsers.DocumentBuilderFactory",
  "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");

备注:fs.default.name 中可能有一个错字:不应该是 hdfs://localhost:8022 而不是 hdfs://hdfs://localhost:8022 吗?

【讨论】:

以上是关于尝试使用 JAVA 启动 Pig 脚本时出错的主要内容,如果未能解决你的问题,请参考以下文章

使用 hacatalog 在 tez 模式下运行 pig 脚本时出错

在 Java 中执行 PigServer 时出错

解析 PIG-XML 时出错

如何解决pig中的“解析时出错。无法实例化”?

使用 Elephant-bird-pig 中的 JsonLoader 时出错

使用 PIG 查询 Avro 数据时出错,Utf8 无法转换为 java.lang.String