猪错误:未处理的内部错误。找到接口org.apache.hadoop.mapreduce.TaskAttemptContext,但是类是预期的

时间:2014-08-11 06:05:50

标签: hadoop apache-pig hortonworks-data-platform

我刚刚在Hortonworks HDP 2.1上升级了Pig 0.12.0到0.13.0版本

当我尝试在我的脚本中使用XMLLoader时,我收到以下错误,即使我已经注册了piggybank。

脚本:

 A = load 'EPAXMLDownload.xml' using org.apache.pig.piggybank.storage.XMLLoader('Document') as (x:chararray);

错误:

dump A
2014-08-10 23:08:56,494 [main] INFO  org.apache.hadoop.conf.Configuration.deprecation - io.bytes.per.checksum is deprecated. Instead, use dfs.bytes-per-checksum
2014-08-10 23:08:56,496 [main] INFO  org.apache.hadoop.conf.Configuration.deprecation - fs.default.name is deprecated. Instead, use fs.defaultFS
2014-08-10 23:08:56,651 [main] INFO  org.apache.pig.tools.pigstats.ScriptState - Pig features used in the script: UNKNOWN
2014-08-10 23:08:56,727 [main] INFO  org.apache.pig.newplan.logical.optimizer.LogicalPlanOptimizer - {RULES_ENABLED=[AddForEach, ColumnMapKeyPrune, GroupByConstParallelSetter, LimitOptimizer, LoadTypeCastInserter, MergeFilter, MergeForEach, PartitionFilterOptimizer, PushDownForEachFlatten, PushUpFilter, SplitFilter, StreamTypeCastInserter], RULES_DISABLED=[FilterLogicExpressionSimplifier]}
2014-08-10 23:08:57,191 [main] INFO  org.apache.hadoop.conf.Configuration.deprecation - io.bytes.per.checksum is deprecated. Instead, use dfs.bytes-per-checksum
2014-08-10 23:08:57,199 [main] INFO  org.apache.hadoop.conf.Configuration.deprecation - fs.default.name is deprecated. Instead, use fs.defaultFS
2014-08-10 23:08:57,214 [main] INFO  org.apache.hadoop.mapreduce.lib.input.FileInputFormat - Total input paths to process : 1
2014-08-10 23:08:57,223 [main] INFO  org.apache.pig.backend.hadoop.executionengine.util.MapRedUtil - Total input paths to process : 1
2014-08-10 23:08:57,247 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 2998: Unhandled internal error. Found interface org.apache.hadoop.mapreduce.TaskAttemptContext, but class was expected

4 个答案:

答案 0 :(得分:5)

请注意,pig根据您设置的上下文var决定hadoop版本 HADOOP_HOME - > V1 HADOOP_PREFIX - > V2

如果使用hadoop2,则需要重新编译piggybank(默认为hadoop1编译)

  1. 转到pig / contrib / piggybank / java
  2. $ ant -Dhadoopversion = 23
  3. 然后将那个jar复制到pig / lib / piggybank.jar

答案 1 :(得分:3)

更多细节,因为其他答案对我不起作用:

  1. Git克隆猪git镜https://github.com/apache/pig
  2. cd进入克隆目录
  3. 如果你已经在这个目录中建立了猪,你应该运行一个干净的

    ant clean
    
  4. 为hadoop 2建造猪

    ant -Dhadoopversion=23
    
  5. 进入皮球银行

    cd contrib/piggybank/java
    
  6. 再次,如果您之前构建了piggybank,请确保清除旧的构建文件

    ant clean
    
  7. 为hadoop 2构建piggybank(相同的命令,不同的目录)

    ant -Dhadoopversion=23
    
  8. 如果你不先建造猪,那么在编译时,皮卡会抛出一堆“未找到符号”的例外情况。另外,由于我以前为Hadoop 1(意外地)构建了pig,没有运行干净,我遇到了运行时错误。

答案 2 :(得分:1)

有时候在安装Pig之后可能会遇到问题,如下所示: -

java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.JobContext, but class was expected
 at org.apache.hcatalog.common.HCatUtil.checkJobContextIfRunningFromBackend(HCatUtil.java:88)
 at org.apache.hcatalog.pig.HCatLoader.setLocation(HCatLoader.java:162)
 at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.JobControlCompiler.getJob(JobControlCompiler.java:540)
 at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.JobControlCompiler.compile(JobControlCompiler.java:322)
 at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher.launchPig(MapReduceLauncher.java:199)
 at org.apache.pig.backend.hadoop.executionengine.HExecutionEngine.launchPig(HExecutionEngine.java:277)
 at org.apache.pig.PigServer.launchPlan(PigServer.java:1367)
 at org.apache.pig.PigServer.executeCompiledLogicalPlan(PigServer.java:1352)
 at org.apache.pig.PigServer.execute(PigServer.java:1341)

许多博客建议您通过执行命令重新编译Pig:

ant clean jar-all -Dhadoopversion=23

或通过执行以下步骤重新编译piggybank.jar

cd contrib/piggybank/java

ant clean

ant -Dhadoopversion=23

但这可能无法解决您的大问题。这里的实际原因与HCatalog有关。尝试更新!!就我而言,我使用的是Hive0.13和Pig.0.13。我正在使用Hive0.13提供的HCatalog。

然后我将Pig更新为0.15并使用单独的hive-hcatalog-0.13.0.2.1.1.0-385库jar。问题解决了......

因为后来我发现创造问题不是猪,而是Hive-HCatalog库。希望这可能有所帮助。

答案 3 :(得分:0)

即使我遇到与Hadoop 2.2.0版相同的错误。 解决方法是,我们必须使用grunt shell注册以下jar文件。

我将在下面粘贴的路径将根据hadoop-2.2.0版本。请根据您的版本找到罐子。

/hadoop-2.2.0/share/hadoop/mapreduce/ hadoop-mapreduce-client-core-2.2.0.jar

/hadoop-2.2.0/share/hadoop/common/hadoop-common-2.2.0.jar

使用REGISTER命令,我们必须将这些罐子与piggybank一起注册。

立即运行pig script /命令,如果遇到任何问题,请恢复。