gpt4 book ai didi

java - 无法从Hadoop MapReduce程序搜索Elasticsearch

转载 作者:行者123 更新时间:2023-12-02 21:30:02 24 4
gpt4 key购买 nike

我正在尝试通过Hadoop MapReduce程序在Elasticsearch上触发查询,但无法运行其jar。下面是错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/elasticsearch/common/transport/TransportAddress
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:270)
at org.apache.hadoop.util.RunJar.main(RunJar.java:153)
Caused by: java.lang.ClassNotFoundException: org.elasticsearch.common.transport.TransportAddress
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 3 more

以前,我已经加载了其他库,例如 common-configurations common-lang ,但是那时候我没有遇到问题。为了正确地工作,应该进行哪些更改。

我已经尝试构建普通应用程序并运行它以进行Elasticsearch。

在Hadoop的lib目录中添加了所有必需的库之后,我现在可以从main函数在Elasticsearch DB上进行搜索,但是当我尝试从map函数进行相同的搜索时,却出现了以下错误。
16/01/07 18:44:44 INFO mapred.JobClient: Task Id : attempt_201601011215_30692_m_000000_0, Status : FAILED
Error: java.lang.ClassNotFoundException: org.elasticsearch.client.Client
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at fragmentextractor.FragmentExtractor$FragmentExtractorMapper.is_clean(FragmentExtractor.java:163)
at fragmentextractor.FragmentExtractor$FragmentExtractorMapper.writeToContext(FragmentExtractor.java:216)
at fragmentextractor.FragmentExtractor$FragmentExtractorMapper.map(FragmentExtractor.java:282)
at fragmentextractor.FragmentExtractor$FragmentExtractorMapper.map(FragmentExtractor.java:68)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:145)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:364)
at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
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:1190)
at org.apache.hadoop.mapred.Child.main(Child.java:249)

据我所知,它能够在父进程中搜索和加载库,但是当克隆时,在子进程中找不到库。还有哪些其他地方可以保存库文件以使其成功?

最佳答案

终于得到了答案。以下是说明:

您需要提供-libjars选项以将hadoop jar命令作为

hadoop jar <MapReduce.jar> -libjars <jar_path1,jar_path2> argument1 argument2 ...

为了在Map Reduce程序部分中标识Jar,因为通过 ,libjars 选项提供时,Jar会提取这些Jar。

您可以在HADOOP的lib目录中复制所有必需的Jar,但是当您执行与外部Jar相关的操作时,它们将不可用。它们将在main()函数中可用。

关于java - 无法从Hadoop MapReduce程序搜索Elasticsearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34626821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com