Ошибка с примером KafkaHDFS: java.lang.NoSuchMethodError

У меня возникли проблемы с опробованием примера приема данных Kafka-HDFS.

Я пробовал версии 0.10.0 и 0.14.0. Для версии 0.10.0 я использую готовый дистрибутив, а для версии 0.14.0 я сам сделал сборку, следуя инструкциям в файле README (одна проблема, с которой я столкнулся здесь, заключалась в том, что scala-библиотека, загруженная gradle, не была один из перечисленных в зависимостях, и мне пришлось вручную загрузить scala-library-2.11.8 и поместить его в каталог lib/).

Я использовал сервер hadoop версии 2.3.0 (с псевдораспределенной установкой одного узла) и 3.2.1. Одна проблема, с которой я столкнулся с версией 2.3.0, которую я использую в качестве кластера, заключается в том, что загруженная версия со страницы apache hadoop построена против java < 1.8 в 32-битном режиме, тогда как библиотеки gobblin требуют java >= 1.8, а затем я получаю некоторые странные ошибки, касающиеся защиты стека и т. д.

Тем не менее, я предпочитаю использовать hadoop 3.2.1 для моей псевдораспределенной установки с одним узлом. Итак, я пошел попробовать это. Используя готовый дистрибутив для 0.10.0 (gobblin-distribution-0.10.0.tar.gz), следую инструкциям здесь: https://github.com/apache/incubator-gobblin/blob/gobblin_0.10.0/gobblin-docs/case-studies/Kafka-HDFS-Ingestion.md

затем я выполняю:

bin/gobblin-mapreduce.sh --conf ~/Gobblin/ap       ps/KafkaHDFSIngestionMapReduce/job_conf_dir/job.pull

И я получил эту ошибку в журнале gobblin-current.log:

2020-02-18 10:42:18 UTC ERROR [main] gobblin.runtime.AbstractJobLauncher  442 - Failed to launch and run job job_GobblinKafkaQuickStart_1582022486716: java.lang.NoSuchMethodError: org.apache.hadoop.yarn.api.records.URL.fromPath(Lorg/apache/hadoop/fs/Path;)Lorg/apache/hadoop/yarn/api/records/URL;
java.lang.NoSuchMethodError: org.apache.hadoop.yarn.api.records.URL.fromPath(Lorg/apache/hadoop/fs/Path;)Lorg/apache/hadoop/yarn/api/records/URL;
    at org.apache.hadoop.mapred.YARNRunner.setupLocalResources(YARNRunner.java:393)
    at org.apache.hadoop.mapred.YARNRunner.createApplicationSubmissionContext(YARNRunner.java:573)
    at org.apache.hadoop.mapred.YARNRunner.submitJob(YARNRunner.java:325)
    at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:432)
    at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1285)
    at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1282)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:422)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1548)
    at org.apache.hadoop.mapreduce.Job.submit(Job.java:1282)
    at gobblin.runtime.mapreduce.MRJobLauncher.runWorkUnits(MRJobLauncher.java:230)
    at gobblin.runtime.AbstractJobLauncher.runWorkUnitStream(AbstractJobLauncher.java:570)
    at gobblin.runtime.AbstractJobLauncher.launchJob(AbstractJobLauncher.java:417)
    at gobblin.runtime.mapreduce.CliMRJobLauncher.launchJob(CliMRJobLauncher.java:89)
    at gobblin.runtime.mapreduce.CliMRJobLauncher.run(CliMRJobLauncher.java:66)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84)
    at gobblin.runtime.mapreduce.CliMRJobLauncher.main(CliMRJobLauncher.java:111)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:212)

Одна вещь, которую я пытался, - это изменить bin/gobblin-mapreduce.sh и добавить в LIBJARS, которые передаются как -libjars в hadoop jar все банки в папке lib/, чтобы задания использовали версии 2.3.0, предоставленные там (т.е. hadoop-yarn-api-2.3.0 для класса URL из ошибки выше). После этого изменения я все еще получаю ту же ошибку.

Примечания: 1. HADOOP_HOME и HADOOP_BIN_DIR устанавливаются только перед вызовом bin/gobblin-mapreduce.sh, который указывает на мою установку hadoop 3.2.1.

Есть ли у вас предложения по решению этой проблемы? Если использование hadoop версии 3.2.1 для настройки кластера невозможно, какую версию 2.X я могу использовать (для этого не потребуется готовить полную среду разработки только для создания 64-разрядной сборки java 1.8:))???

В качестве альтернативы, кто-нибудь из вас успешно пробовал пример на странице, и не могли бы вы перечислить используемые версии?

Спасибо за ваше время и помощь!

1 ответ

Похоже, у вас смешанные версии зависимостей hadoop. Org.apache.hadoop.yarn.api.records.URL исходит из 2+, а YARNRunner - из 3+.

В чем ошибка при использовании 0.14.0?

Другие вопросы по тегам