无法摆脱 java.lang.ClassNotFoundException: Class org.apache.hadoop.hive.ql.io.RCFileInputFormat

Can't get rid of java.lang.ClassNotFoundException: Class org.apache.hadoop.hive.ql.io.RCFileInputFormat

尝试运行 一个简单的 mapreduce 代码,从 RCFile 中读取数据。

我运行正在使用 hadoop 命令编写代码:

hadoop jar MRJobRCFile.jar MRJobRCFile <inputRCfile> <outputfile>  

尽管将 hive-exec jar 添加到 hadoop 类路径,但出现此错误。

export HADOOP_CLASSPATH=/opt/cmr/hadoopinstall/hive-0.10.0-cdh4.4.0/lib/hive-exec-0.10.0-cdh4.4.0.jar

我还能如何添加罐子?

尝试使用 verbose:class 检查 jvm 中加载的 jar:

[已从文件 org.apache.hadoop.hive.ql.io.RCFileInputFormat 加载:/opt/cmr/hadoopinstall/hive-0.10.0-cdh4.4.0/lib/hive-exec-0.10.0-cdh4.4.0.jar]

RCFileInputFormat 正在由 JVM 加载。

知道如何处理这个问题吗?错误:

java.lang.RuntimeException: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hadoop.hive.ql.io.RCFileInputFormat not found
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1649)
at org.apache.hadoop.mapred.JobConf.getInputFormat(JobConf.java:620)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:394)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:332)
at org.apache.hadoop.mapred.Child.run(Child.java:268)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1408)
at org.apache.hadoop.mapred.Child.main(Child.java:262)
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hadoop.hive.ql.io.RCFileInputFormat not found
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1617)
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java

通过将 hive-exec jar 添加到 HADOOP_CLASSPATH 和分布式缓存来解决。

将 jar 添加到分布式缓存是为了使它们可用于远程映射和减少任务 JVM。并添加 HADOOP_CLASSPATH 用于客户端 JVM(由 hadoop jar 命令创建)。