hadoop - Druid/Hadoop批处理索引/Map Reduce/YARN/无远程,仅本地

标签 hadoop indexing mapreduce yarn druid

解决

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

将其与文档所说的结合起来:在Druid的索引任务json中将“mapreduce.job.classloader”设置为“true”。

您将使其正常工作:)-使用Hadoop 2.7.3的Druid 0.9.2

*)不知道为什么,我可以看到Druid将其类路径中的所有jar都上传到了Hadoop(并且那里是validation.jar)。 JVM对自定义类加载器(?)加载javax。*库的方式可能有所限制

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

更新更新

我的错。我忘记将Dockerfile中的core-site.xml等复制到Druid安装中的正确位置。

我已经解决了,现在它把工作发送给了Hadoop。

enter image description here

但是,现在我遇到了另一个问题。作业执行失败。 java.lang.reflect.InvocationTargetException,位于io.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。但是那至少在堆栈跟踪(权限)中有更多的提示。我的情况不太清楚。有人遇到同样的问题吗?

!!!再次更新!!!

我认为我就是这种情况。一样: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 task 的另一个问题:java.net.URLClassLoader.findClass(java.netClassLoader.java:381)上的java.lang.ClassNotFoundException:javax.validation.Validator .lang.ClassLoader.loadClass(ClassLoader.java:424)....这整个类加载过程:(

因此,罪魁祸首是吉斯图书馆。 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”的机器上运行了2.7.2版的Hadoop集群(伪)。那hadoop和我的德鲁伊在单独的docker实例上运行。德鲁伊 docker 有--link到hadoop实例。

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

enter image description here

我还可以从日志中并通过检查HDFS来确认成功建立索引:

enter image description here

另外,从YARN UI中...我看不到任何作业正在提交。

enter image description here

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

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

(是的,它是fs.default.name,而不是fs.defaultFS ...,因为Druid扩展名仍使用2.3.0,而defaultFS直到2.4.x才知道)。稍微回避一下:我认为Druid中的类路径存在一个错误,它没有将hadoop依赖项添加到正在运行的工作程序的类路径列表中(我已经在通用的运行时属性中指定了默认坐标)。

enter image description here

好的,同样,在霸主runtime.properties中,我已将索引运行器类型指定为remote。 MiddleManager runtime.properties中的相同。我可以看到Druid拾取了那些配置。

enter image description here

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

enter image description here

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

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

我想念什么?

最佳答案

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

将其与文档所说的结合起来:在Druid的索引任务json中将“mapreduce.job.classloader”设置为“true”。

您将使其正常工作:)使用Hadoop 2.7.3的Druid 0.9.2

*)不知道为什么,我可以看到Druid将其类路径中的所有jar都上传到了Hadoop(并且那里是validation.jar)。 JVM对自定义类加载器(?)加载javax。*库的方式可能有所限制

关于hadoop - Druid/Hadoop批处理索引/Map Reduce/YARN/无远程,仅本地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41090033/

相关文章:

Clojure - 不使用 next 来索引序列

javascript - 顺序数组提取到 Javascript 中的单个数组

python - 通过Hadoop Streaming运行Python MapReduce脚本时获取 “ValueError: No Json object could be decoded”

有序组合算法

java - 如何读取和写入多个子文件夹?

hadoop - 一个包含 HDFS 和 MapReduce 的文件数据库

hadoop - webhdfs ://and hdfs://in terms of underlying protocol?之间有区别吗

hadoop - 在 Impala 中使用 Hive UDF 在 Impala 1.2.4 中给出错误结果

MySQL多列索引和OR语句

string - 有没有办法在 hadoop 中为字符串添加定界符?