Druid / Hadoop批处理索引/ Map Reduce / YARN / No remote,只是本地

时间:2016-12-11 19:12:57

标签: hadoop indexing mapreduce yarn druid

解决

原来我们需要将validation.jar放在hadoop / share / hadoop / common / lib /中(从https://mvnrepository.com/artifact/javax.validation/validation-api *下载)。

将其与文档所说的相结合:set" mapreduce.job.classloader"到"真"在你的德鲁伊索引任务json。

你会得到它的工作:) - 德鲁伊0.9.2与Hadoop 2.7.3

*)不知道为什么,我可以看到Druid将其类路径中的所有jar都上传到Hadoop(并且validation.jar就在那里)。也许JVM如何从自定义类加载器(?)

加载javax。*库有一个限制

以下内容是出于历史目的,以帮助搜索。

更新更新

我的坏。我忘记将我的Dockerfile中的core-site.xml等复制到德鲁伊安装中的正确位置。

我修正了,现在它将作业发送到hadoop。

enter image description here

然而,现在我遇到了另一个问题。执行失败。 java.lang.reflect.InvocationTargetException,at ato.druid.indexer.JobHelper.runJobs(JobHelper.java:369)〜[druid-indexing-hadoop-0.9.2.jar:0.9.2]。

enter image description here

与此处报道的类似:https://groups.google.com/forum/#!topic/druid-development/_JXvLbykD0E。但是那个至少在stacktrace(权限)中有更多提示。我的情况不太清楚。有人有同样的问题吗?

!!!再次更新!!!

我认为这就是我所拥有的。相同:https://groups.google.com/forum/#!topic/druid-user/4yDRoQZn8h8

我通过Hadoop的时间线服务器查看MR的日志来确认:

enter image description here

让我尝试修复它并在之后更新这篇文章。

更新:发现:https://groups.google.com/forum/#!topic/druid-user/U6zMkhm3WiU

更新:不。设置" mapreduce.job.classloader":" true"在map任务上给我另一个问题:java.lang.ClassNotFoundException:java.net.URLClassLoader.findClass(URLClassLoader.java:381)中的javax.validation.Validator,java.lang.ClassLoader.loadClass(ClassLoader.java:424) )....这整个装类的东西:(

所以,罪魁祸首是guice库。 Druid 0.9.2使用Guice 4.1.0,而Hadoop 2.7.3使用Guice 3.0.0 ...而mapreduce.job.classloader无效(它给出了另一个java类未找到的问题)。

现在该怎么办?将guice 4.1.0从Druid复制到Hadoop?

enter image description here

原帖

为什么Druid(0.9.2)没有将作业提交给资源管理器(并且在hadoop集群中运行作业)?有人可以指出我错过了哪些细节吗?

我在主机名设置为“hadoop'”的计算机上运行Hadoop集群(伪)版本2.7.2。那个hadoop和我的德鲁伊在不同的​​docker实例上运行。德鲁伊码头工具 - 与hadoop实例链接。

从日志中我可以看出它在本地执行MR(使用LocalJobRunner)。

enter image description here

我还可以从日志中确认索引成功,并检查HDFS:

enter image description here

另外,从YARN UI ...我没有看到任何工作被提交。

enter image description here

我已根据文档配置了所有内容。在我的德鲁伊的core-site.xml中,我有:

<property>
  <name>fs.default.name</name>
  <value>hdfs://hadoop:9000</value>
</property>

(是的,它是fs.default.name,而不是fs.defaultFS ......因为德鲁伊扩展仍然使用2.3.0,并且直到2.4.x才知道defaultFS)。 稍微走了一步:我认为德鲁伊有类路径的错误,它没有将hadoop依赖项添加到运行worker的classpath列表中(我已经知道了)公共运行时属性中指定的默认坐标。)

enter image description here

好吧,同样,在霸王运行时.properties我已经指定了远程的索引运行器类型。在middleManager runtime.properties中也是如此。我可以看到德鲁伊的那些配置。

enter image description here

此外,索引日志存储类型设置为HDFS,我可以确认文件存储在HDFS中。

enter image description here

因此,就深度存储而言,一切都很好。这只是Map-Reduce。未在群集中运行。有人也偶然发现同样的问题,线程没有解决。这里:https://groups.google.com/forum/#!topic/druid-user/vvX3VEGMTcw

我可以确认深度存储没有问题(输入文件是从我指定的HDFS路径中提取的,而且段也存储在HDFS中)。

我错过了什么?

2 个答案:

答案 0 :(得分:1)

原来我们需要将validation.jar放在hadoop / share / hadoop / common / lib /中(从https://mvnrepository.com/artifact/javax.validation/validation-api下载*)。

将其与文档所说的相结合:在你的德鲁伊索引任务json中将“mapreduce.job.classloader”设置为“true”。

你会得到它的工作:)德鲁伊0.9.2与Hadoop 2.7.3

*)不知道为什么,我可以看到Druid将其类路径中的所有jar都上传到Hadoop(并且validation.jar就在那里)。也许JVM如何从自定义类加载器(?)

加载javax。*库有一个限制

答案 1 :(得分:0)

正如德鲁伊docs所述,你需要复制hadoop conf文件core-site.xml,hdfs-site.xml,yarn-site.xml,mapred-site.xml。