我在用凯林。它是一个数据仓库工具,它使用hadoop、hive和hbase。它随样本数据一起提供,以便我们可以测试系统。我在做这个样本。这是一个多步骤的过程,许多步骤都是映射减少作业。第二步是Extract Fact Table Distinct Columns,这是一个job先生。如果没有在hadoop日志中编写任何东西,这项工作就会失败。在深入挖掘之后,我发现了logs/userlogs/application_1450941430146_0002/container_1450941430146_0002_01_000004/syslog中的一个例外
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运行在所有节点上。母舰和麒麟被部署在主节点上。
版本信息:
Ubuntu 12.04 (64 bit)
Hadoop 2.7.1
Hbase 0.98.16
Hive 0.14.0
Kylin 1.1.1发布于 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
发布于 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,以包含它的所有依赖项。
https://stackoverflow.com/questions/34449561
复制相似问题