NoSuchMethodError при попытке запустить Gobblin в Dataproc
254 просмотра
1 ответ
Я пытаюсь запустить Gobblin на Google Dataproc, но я получаю эту ошибку NoSuchMethodError и не могу понять, как ее решить.
Waiting for job output...
...
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...
Caused by: java.lang.NoSuchMethodError: org.apache.commons.cli.Option.builder()Lorg/apache/commons/cli/Option$Builder;
at gobblin.runtime.cli.CliOption
...
Эта та же самая работа (содержание ниже) работает хорошо на моей локальной установке hadoop (на моем ноутбуке), но не на dataproc. Кто-нибудь когда-нибудь пытался запустить Gobblin на Dataproc?
Вот мой файл работы гоблина:
job.name=kafka2gcs
job.group=gkafka2gcs
job.description=Gobblin job to read messages from Kafka and save as is on GCS
job.lock.enabled=false
kafka.brokers=mykafka:9092
topic.whitelist=mytopic
bootstrap.with.offset=earliest
source.class=gobblin.source.extractor.extract.kafka.KafkaDeserializerSource
kafka.deserializer.type=BYTE_ARRAY
extract.namespace=nskafka2gcs
writer.builder.class=gobblin.writer.SimpleDataWriterBuilder
writer.destination.type=HDFS
mr.job.max.mappers=2
writer.output.format=txt
data.publisher.type=gobblin.publisher.BaseDataPublisher
metrics.enabled=false
fs.uri=file:///.
writer.fs.uri=${fs.uri}
mr.job.root.dir=gobblin
writer.output.dir=${mr.job.root.dir}/out
writer.staging.dir=${mr.job.root.dir}/stg
fs.gs.project.id=my-test-project
data.publisher.fs.uri=gs://my-bucket
state.store.fs.uri=${data.publisher.fs.uri}
data.publisher.final.dir=gobblin/pub
state.store.dir=gobblin/state
И вот команды, которые я выдаю для dataproc:
gcloud dataproc clusters create myspark \
--image-version 1.1 \
--master-machine-type n1-standard-4 \
--master-boot-disk-size 10 \
--num-workers 2 \
--worker-machine-type n1-standard-4 \
--worker-boot-disk-size 10
gcloud dataproc jobs submit hadoop --cluster=myspark \
--class gobblin.runtime.mapreduce.CliMRJobLauncher \
--jars /opt/gobblin-dist/lib/gobblin-runtime-0.10.0.jar,/opt/gobblin-dist/lib/gobblin-api-0.10.0.jar,/opt/gobblin-dist/lib/gobblin-avro-json-0.10.0.jar,/opt/gobblin-dist/lib/gobblin-codecs-0.10.0.jar,/opt/gobblin-dist/lib/gobblin-core-0.10.0.jar,/opt/gobblin-dist/lib/gobblin-core-base-0.10.0.jar,/opt/gobblin-dist/lib/gobblin-crypto-0.10.0.jar,/opt/gobblin-dist/lib/gobblin-crypto-provider-0.10.0.jar,/opt/gobblin-dist/lib/gobblin-data-management-0.10.0.jar,/opt/gobblin-dist/lib/gobblin-metastore-0.10.0.jar,/opt/gobblin-dist/lib/gobblin-metrics-0.10.0.jar,/opt/gobblin-dist/lib/gobblin-metrics-base-0.10.0.jar,/opt/gobblin-dist/lib/gobblin-metadata-0.10.0.jar,/opt/gobblin-dist/lib/gobblin-utility-0.10.0.jar,/opt/gobblin-dist/lib/avro-1.8.1.jar,/opt/gobblin-dist/lib/avro-mapred-1.8.1.jar,/opt/gobblin-dist/lib/commons-lang3-3.4.jar,/opt/gobblin-dist/lib/config-1.2.1.jar,/opt/gobblin-dist/lib/data-2.6.0.jar,/opt/gobblin-dist/lib/gson-2.6.2.jar,/opt/gobblin-dist/lib/guava-15.0.jar,/opt/gobblin-dist/lib/guava-retrying-2.0.0.jar,/opt/gobblin-dist/lib/joda-time-2.9.3.jar,/opt/gobblin-dist/lib/javassist-3.18.2-GA.jar,/opt/gobblin-dist/lib/kafka_2.11-0.8.2.2.jar,/opt/gobblin-dist/lib/kafka-clients-0.8.2.2.jar,/opt/gobblin-dist/lib/metrics-core-2.2.0.jar,/opt/gobblin-dist/lib/metrics-core-3.1.0.jar,/opt/gobblin-dist/lib/metrics-graphite-3.1.0.jar,/opt/gobblin-dist/lib/scala-library-2.11.8.jar,/opt/gobblin-dist/lib/influxdb-java-2.1.jar,/opt/gobblin-dist/lib/okhttp-2.4.0.jar,/opt/gobblin-dist/lib/okio-1.4.0.jar,/opt/gobblin-dist/lib/retrofit-1.9.0.jar,/opt/gobblin-dist/lib/reflections-0.9.10.jar \
--properties mapreduce.job.user.classpath.first=true \
-- -jobconfig gs://my-bucket/gobblin-kafka-gcs.job
Я уже пытался скопировать все библиотеки lib gobblins внутри /usr/lib/hadoop/lib
на всех машинах кластера dataproc, но это тоже не сработало.
Есть идеи?
gobblin 0.10.0
hadoop 2.7.3
dataproc image 1.1
Автор: Henrique G. Abreu
Источник
Размещён: 18.09.2019 08:29
Ответы (1)
2 плюса
Дистрибутив Hadoop, вероятно, пропускает свою версию «commons-cli» в ваш путь к классам, и конфликтует с той, с которой был скомпилирован Гобблин. Гоблин, похоже, зависит от commons-cli 1.3.1, а Hadoop 2.7.3 - от 1.2 .
Обычно, если эти зависимости исходят из вашего собственного приложения, вы используете что-то вроде плагина Maven . Если вы собираете Gobblin из исходного кода, вы можете увидеть, компилируется ли он с помощью commons-cli 1.2 или это жесткая зависимость.
Если commons-cli 1.3.1 полностью обратно совместим, вы можете попробовать удалить его
/usr/lib/hadoop/lib/commons-cli-1.2.jar
из своего кластера и добавить свои собственные загруженные файлы commons-cli-1.3.1.jar
.
Вопросы из категории :
- hadoop Потоковый многострочный ввод Hadoop
- hadoop Как преобразовать объект Hadoop Path в объект Java-файла
- hadoop Сортировка больших данных с помощью MapReduce / Hadoop
- hadoop Как запустить программу Hadoop?
- hadoop Задание кодека сжатия для INSERT OVERWRITE SELECT в Hive
- hadoop Создать таблицу в hbase
- google-cloud-dataproc Примеры Dataproc + BigQuery - есть ли в наличии?
- google-cloud-dataproc Гуава версия при использовании спарк-оболочки
- google-cloud-dataproc Pausing Dataproc cluster - Google Compute engine
- google-cloud-dataproc SparkR на Dataproc (Spark 1.5.x) не работает
- google-cloud-dataproc Мониторинг сеансов Spark-Shell или PySpark-Shell в кластере Dataproc
- google-cloud-dataproc Миграция Google Cloud Dataproc на Spark 1.6.0
- bigdata Вычисление и сохранение пространства в PostgreSQL
- bigdata Запрос Elasticsearch для возврата всех записей
- bigdata POC для Hadoop в режиме реального времени
- bigdata Как ускорить оценку GLM в r?
- bigdata Кромкие узлы в кластере
- bigdata Как создать большой файл данных Pandas из SQL-запроса без нехватки памяти?