【发布时间】:2014-08-03 18:23:50
【问题描述】:
刚刚安装了 Pig 0.13,我正在尝试将它与 Hadoop 1.1.2 一起使用。 (Pig 文档指出 Pig 0.13 与 Hadoop 1.1.2 兼容)。根据 Pig 安装说明,我设置了 $PIG_CLASSPATH 指向定义 core-site.xml、hdfs-site.xml 和 mapred-site.xml 的 /etc/hadoop。 Hadoop 集群可以正常工作,并且适用于非 Pig 作业。根据下面的错误描述,我了解到 Pig 找不到它正在寻找的 JobContextImpl 类。
根据 Hadoop 1.1.2 API 文档,我不认为“task”是“mapreduce”包的子包。我尝试将 hadoop-core-1.1.2.jar 直接添加到 $PIG_CLASSPATH 那没有用。 (在查看了 hadoop-core-1.1.2.jar 的内容和 Hadoop 1.1.2 API 文档之后,我不相信 JobContextImpl 是在 Pig 试图从中加载它的包中定义的)。如何让 Pig 0.13 与 Hadoop 1.1.2 一起使用?
=======错误如下=======
14/08/03 14:01:05 INFO pig.ExecTypeProvider: Trying ExecType : LOCAL
14/08/03 14:01:05 INFO pig.ExecTypeProvider: Trying ExecType : MAPREDUCE
14/08/03 14:01:05 INFO pig.ExecTypeProvider: Picked MAPREDUCE as the ExecType
2014-08-03 14:01:05,959 [main] INFO org.apache.pig.Main - Apache Pig version 0.13.0 (r1606446) compiled Jun 29 2014, 02:27:58
2014-08-03 14:01:05,959 [main] INFO org.apache.pig.Main - Logging error messages to: /home/hadoop/pig-0.13.0/bin/pig_1407088865958.log
2014-08-03 14:01:06,112 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: hdfs://master.localdomain:8020/
2014-08-03 14:01:06,388 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to map-reduce job tracker at: master.localdomain:8021
2014-08-03 14:01:06,440 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 2998: Unhandled internal error. org/apache/hadoop/mapreduce/task/JobContextImpl
Details at logfile: /home/hadoop/pig-0.13.0/bin/pig_1407088865958.log
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class org.apache.pig.tools.pigstats.PigStatsUtil
at org.apache.pig.Main.run(Main.java:643)
at org.apache.pig.Main.main(Main.java:156)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.RunJar.main(RunJar.java:156)
===pig_1407088865958.log的内容===
猪栈跟踪
ERROR 2998: Unhandled internal error. org/apache/hadoop/mapreduce/task/JobContextImpl
java.lang.NoClassDefFoundError: org/apache/hadoop/mapreduce/task/JobContextImpl
at org.apache.pig.tools.pigstats.PigStatsUtil.<clinit>(PigStatsUtil.java:68)
at org.apache.pig.tools.grunt.Grunt.exec(Grunt.java:79)
at org.apache.pig.Main.run(Main.java:510)
at org.apache.pig.Main.main(Main.java:156)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.RunJar.main(RunJar.java:156)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.mapreduce.task.JobContextImpl
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 9 more
【问题讨论】:
-
你为 Hadoop 1.x 编译 pig 了吗?
-
下载了二进制文件和源代码。文档中没有任何地方声明需要重新编译。事实上,Pig 0.13.0 的网站声明它与 1.1.2 兼容。在我寻求帮助的过程中,我看到一些帖子说它需要用一个指示版本的参数重新编译。我看到的参数值是23,24。我不知道该参数如何映射到我使用的 1.1.2 的 hadoop 版本。我破解了 bin/pig 脚本以指向 hadoop-core-1.1.2.jar。该脚本需要设置 HADOOP_HOME(已弃用)。不想使用已弃用的变量。
-
这对你有用吗?对我来说,当我尝试手动指向 hadoop-core jar 时,它仍然失败。
-
有人找到解决方案了吗?我遇到了同样的错误。 Hadoop 已安装 1.2.1,pig 版本为 0.13.0
标签: hadoop apache-pig