猪错误:未处理的内部错误。找到了接口 org.apache.hadoop.mapreduce.TaskAttemptContext,但是需要类
Posted
技术标签:
【中文标题】猪错误:未处理的内部错误。找到了接口 org.apache.hadoop.mapreduce.TaskAttemptContext,但是需要类【英文标题】:Pig Error: Unhandled internal error. Found interface org.apache.hadoop.mapreduce.TaskAttemptContext, but class was expected 【发布时间】:2014-08-11 06:05:50 【问题描述】:我刚刚在 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
【问题讨论】:
只检查注册的jar是否有接口和/或类。错误说 Pig 期待 Class,但它找到了一个接口。 【参考方案1】:请注意,pig 根据您设置的上下文变量决定 hadoop 版本 HADOOP_HOME -> v1 HADOOP_PREFIX -> v2
如果使用hadoop2,需要重新编译piggybank(默认为hadoop1编译)
-
转到 pig/contrib/piggybank/java
$ ant -Dhadoopversion=23
然后将该 jar 复制到 pig/lib/piggybank.jar 上
【讨论】:
这对我不起作用。我仍然遇到同样的错误。 +1 for HADOOP_HOME -> v1 HADOOP_PREFIX -> v2 我在 pig 文档和 pig bash 脚本中都没有看到【参考方案2】:更多细节,因为其他答案对我不起作用:
-
git克隆猪的git镜像https://github.com/apache/pig
cd 进入克隆目录
如果你过去已经在这个目录中构建了 pig,你应该运行一个 clean
ant clean
为 hadoop 2 构建猪
ant -Dhadoopversion=23
cd 到存钱罐里
cd contrib/piggybank/java
同样,如果您之前构建过 piggybank,请务必清除旧的构建文件
ant clean
为 hadoop 2 构建 piggybank(相同的命令,不同的目录)
ant -Dhadoopversion=23
如果你不先构建 pig,piggybank 会在编译时抛出一堆“找不到符号”异常。此外,由于我之前为 Hadoop 1 构建了 pig(不小心),没有运行 clean,我遇到了运行时错误。
【讨论】:
【参考方案3】:安装 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。问题就解决了……
因为后来我发现不是 Pig 造成了问题,而是 Hive-HCatalog 库。希望这可能会有所帮助。
【讨论】:
【参考方案4】:即使我在使用 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 命令,我们必须将这些 jar 与 piggybank 一起注册。
现在运行 pig 脚本/命令,如果遇到任何问题,请恢复。
【讨论】:
以上是关于猪错误:未处理的内部错误。找到了接口 org.apache.hadoop.mapreduce.TaskAttemptContext,但是需要类的主要内容,如果未能解决你的问题,请参考以下文章
Pig ERROR 2998:未处理的内部错误(错误名称 MY_CLASS_NAME)
致命错误:未找到接口“Psr\Container\ContainerInterface”
Pig 安装错误:错误 pig.Main:错误 2998:未处理的内部错误
内部处理程序中的 Gorilla Mux 路由器仅工作一次,然后给出 404 页面未找到
调用微信退款接口或发红包接口时出现System.Security.Cryptography.CryptographicException: 出现了内部错误 解决办法