Hadoop выбрасывает java.lang.VerifyError после экспорта файла jar - PullRequest
5 голосов
/ 14 января 2011

Я изменяю карту hadoop - уменьшите работу, которая в настоящее время компилируется и работает без моих изменений.

Как часть работы, теперь я буду подключаться к S3 для доставки файла.

Я разработал (очень простой) класс s3Connector, протестировал и запустил его в Eclipse, затем пошел, чтобы подключить это к моей работе сокращения. Чтобы запустить задание в hadoop, я должен экспортировать проект в виде файла jar, а затем вызвать его из hadoop. Кажется, что файл jar компилируется и экспортируется без проблем из eclipse, но когда я запускаю его в hadoop, я получаю исключение java.lang.VerifyError.

java.lang.VerifyError: (class: com/extrabux/services/S3Connector, method: 
connectToS3 signature: ()V) Incompatible argument to function

В некоторых других публикациях упоминается, что могут быть конфликтующие зависимости версий jar, но в моем пути сборки eclipse я добавил все последние файлы jar для указанных библиотек и поместил их в верхнюю часть порядка путей сборки. 1008 *

Это настолько просто, насколько я могу выделить это:

import org.jets3t.service.impl.rest.httpclient.RestS3Service;
import org.jets3t.service.security.AWSCredentials;

public class S3Connector {

protected RestS3Service s3Service;
protected AWSCredentials awsCredentials;


public S3Connector()
{
    this.awsCredentials= new AWSCredentials("my secret 1", "my secret 2");
}


public void connectToS3() throws Exception
{
    this.s3Service = new RestS3Service(this.awsCredentials);
}  

}

Даже тот простой класс умрет .. То же сообщение. Как только я закомментирую учетные данные AWS в конструкторе и RestS3Service, проблема исчезнет. По сути, я думаю, что это какая-то проблема с экспортом библиотеки из затмения, но я не знаю, как ее найти.

1 Ответ

4 голосов
/ 14 января 2011

понял это. Была старая версия jets3t jar, которая была в hadoop lib dir

Сценарий командной строки hadoop зацикливается на всех jar-файлах в lib dir и физически добавляет их в путь к классу в последней команде exec 'командной строки, которую он создает. Этот classpath командной строки jar 0.6.0 переопределял хороший jar 0.8.0, который я экспортировал в свой файл jar. Так как в версии 0.6.0 не было указанного конструктора для RestS3Service, возникла ошибка java.lang.VerifyError. После удаления библиотеки 0.6.0 из hadoop все было хорошо.

...