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

时间:2015-12-24 08:22:25

标签: hadoop hive kylin

我正在使用kylin。它是一个数据仓库工具,它使用hadoop,hive和hbase。它随附样本数据,以便我们可以测试系统。我正在构建这个样本。这是一个多步骤的过程,许多步骤都是map-reduce作业。第二步是size这是一项MR工作。如果没有在hadoop日志中写任何内容,这项工作就会失败。深入挖掘后,我在const m = new Map(); m.set(0, "word1"); m.set(1023, "word2"); console.log(m.size); // 2

中找到了一个例外
Extract Fact Table Distinct Columns

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

我使用的是5节点集群,每个节点是8核和30GB。 NameNode正在一个节点上运行。 DataNode正在所有5个节点上运行。对于Hbase; HMaster和HQuorumPeer与NameNode在同一节点上运行,HRegionServer在所有节点上运行。 Hive和Kylin部署在主节点上。

版本信息:

logs/userlogs/application_1450941430146_0002/container_1450941430146_0002_01_000004/syslog

2 个答案:

答案 0 :(得分:1)

这里的问题是Kylin在所有Hadoop节点上假设相同的Hive jar。当某个节点丢失Hive jar(甚至在不同的位置)时,你会在HCatInputFormat上得到ClassNotFoundException。

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

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

或另一个(更干净的)解决方法是手动配置Kylin以提交Hive jar作为其他作业依赖项。见https://issues.apache.org/jira/browse/KYLIN-1021

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

答案 1 :(得分:0)

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

我认为应该创建kylin-job-1.1.1-incubating.jar以包含其所有依赖项。

相关问题