首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hadoop减少作业:未找到类org.apache.hive.hcatalog.mapreduce.HCatInputFormat

Hadoop减少作业:未找到类org.apache.hive.hcatalog.mapreduce.HCatInputFormat
EN

Stack Overflow用户
提问于 2015-12-24 08:22:24
回答 2查看 1.5K关注 0票数 0

我在用凯林。它是一个数据仓库工具,它使用hadoop、hive和hbase。它随样本数据一起提供,以便我们可以测试系统。我在做这个样本。这是一个多步骤的过程,许多步骤都是映射减少作业。第二步是Extract Fact Table Distinct Columns,这是一个job先生。如果没有在hadoop日志中编写任何东西,这项工作就会失败。在深入挖掘之后,我发现了logs/userlogs/application_1450941430146_0002/container_1450941430146_0002_01_000004/syslog中的一个例外

代码语言:javascript
复制
2015-12-24 07:31:03,034 WARN [main] org.apache.hadoop.mapred.YarnChild:
Exception running child : java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hive.hcatalog.mapreduce.HCatInputFormat not found
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2195)
    at org.apache.hadoop.mapreduce.task.JobContextImpl.getInputFormatClass(JobContextImpl.java:174)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:749)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)
    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:1657)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Caused by: java.lang.ClassNotFoundException: Class org.apache.hive.hcatalog.mapreduce.HCatInputFormat not found
    at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:2101)
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2193)
    ... 8 more

2015-12-24 07:31:03,037 INFO [main] org.apache.hadoop.mapred.Task: Runnning cleanup for the task

我的问题是,是否应该将mapper类的所有依赖关系jar复制到所有hadoop节点?如果我重新启动kylin服务器并恢复多维数据集构建作业,此作业就会成功。清理完所有内容后重新启动它时,会再次观察到此行为。

我使用5节点集群,每个节点是8核心和30 is。NameNode运行在一个节点上。DataNode在所有5个节点上运行。对于Hbase,HMaster和HQuorumPeer运行在同一个节点上,而NameNode和HRegionServer运行在所有节点上。母舰和麒麟被部署在主节点上。

版本信息:

代码语言:javascript
复制
Ubuntu 12.04 (64 bit)
Hadoop 2.7.1
Hbase  0.98.16
Hive   0.14.0
Kylin  1.1.1
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-03 01:18:28

这里的问题是,Kylin假设所有Hadoop节点上都有相同的Hive jars。当某个节点缺少Hive (甚至在不同的位置)时,您将得到ClassNotFoundException on HCatInputFormat。

顺便说一句,您应该能够从Yarn作业控制台获得明确的错误消息。这是个棘手的问题。

将Hive部署到所有集群节点肯定可以解决这个问题,就像您已经尝试过的那样。

或者另一个(更干净的)解决方法是手动配置Kylin,将Hive jars作为附加的作业依赖项提交。请参阅https://issues.apache.org/jira/browse/KYLIN-1021

最后,还有一个开放的JIRA建议Kylin默认提交Hive jars。请参阅https://issues.apache.org/jira/browse/KYLIN-1082

票数 1
EN

Stack Overflow用户

发布于 2016-01-04 11:37:23

力杨的建议是正确的。这是我的实验序列。Kylin提供了由kylin.job.jar属性在kylin.properties中指定的jar文件。因此,首先我创建了一个缺少依赖项的胖jar文件,在kylin.job.jar中设置该文件的路径,然后再次运行作业。丢失的舱位现在随约伯先生一起运来了。新添加的依赖项有一些依赖项,这些依赖项在所有节点上都不可用,因此作业再次失败。在下一次迭代中,我添加了那些缺失的依赖项,然后再试一次。同样的结果:新添加的依赖项有更多的依赖项,而这些依赖项并非在所有节点上都可用。最后,我提取了$HIVE_HOME/lib/hive-*.jar中可用的所有类,并创建了一个新的jar。这次起作用了。jar文件的大小超过20 of。由于每次运行多维数据集作业时都会使用这些jar文件,所以我将所有这些jar文件复制到$HADOOP_HOME/share/hadoop/common/hive-metastore-0.14.0.jar下的所有节点。

我认为应该创建kylin-作业-1.1.1-incubating.jar,以包含它的所有依赖项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34449561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档