清管器错误:未处理的内部错误找到接口org.apache.hadoop.mapreduce.taskattemptcontext,但应为类

k10s72fa  于 2021-06-04  发布在  Hadoop
关注(0)|答案(4)|浏览(322)

我刚刚升级了hortonworkshdp2.1上的pig0.12.0到0.13.0版本
当我试图在我的脚本中使用xmloader时,我得到了下面的错误,尽管我已经注册了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
holgip5t

holgip5t1#

甚至我在hadoop版本2.2.0中也遇到了同样的错误。解决方法是,我们必须使用gruntshell注册以下jar文件。
下面我要粘贴的路径将基于hadoop-2.2.0版本。请根据您的版本查找jar。
/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命令,我们必须将这些jar和piggybank一起注册。
现在运行pig脚本/命令,如果遇到任何问题,请还原。

ryoqjall

ryoqjall2#

有时你可能会遇到问题后安装Pig一样below:-

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。问题解决了。。。。
因为后来我发现不是Pig制造了问题,而是Hivehcatalog库。希望这能有所帮助。

e4yzc0pl

e4yzc0pl3#

更多细节,因为其他答案对我不适用:
git克隆Piggit镜像https://github.com/apache/pig
将cd放入克隆目录
如果您以前已经在这个目录中构建了pig,那么应该运行一个干净的

ant clean

为hadoop 2构建pig

ant -Dhadoopversion=23

cd放入储液罐

cd contrib/piggybank/java

同样,如果您以前构建过piggybank,请确保清除旧的构建文件

ant clean

为hadoop2构建piggybank(相同的命令,不同的目录)

ant -Dhadoopversion=23

如果不先构建pig,piggybank在编译时会抛出一堆“symbol not found”异常。另外,由于我之前为hadoop1构建了pig(意外),没有运行clean,所以我遇到了运行时错误。

46qrfjad

46qrfjad4#

注意,pig决定hadoop版本取决于您设置hadoop\u home->v1 hadoop\u prefix->v2的上下文变量
如果使用hadoop2,则需要重新编译piggybank(默认情况下是为hadoop1编译的)
转到pig/contrib/piggybank/java
$ant-dhadopversion=23个
然后将该jar复制到pig/lib/piggybank.jar上

相关问题