2015-03-24 4 views
1

Я использую небольшую программу для записи данных в Accumulo.java.lang.NoClassDefFoundError: org/apache/accumulo/core/client/Instance

Программа работала при добавлении банок вручную. Но, когда строить с Maven, с той же версией, используемая в ручных бросках:

java.lang.NoClassDefFoundError: org/apache/accumulo/core/client/Instance.

Как бы решить это?

+0

Нужна дополнительная информация, разместите свой код и pom.xml –

ответ

0

Ваша работа будет запущена на всех узлах вашей сети MR. Вам понадобятся соответствующие банки на всех узлах, чтобы они работали.

Другой подход, как вы заметили, состоит в том, чтобы просто включить все в один uber jar, который содержит все, что вам нужно. Таким образом, когда ваша работа будет отправлена ​​на каждый узел, у вас будет все, что вам нужно. Один из способов сделать это с мавена является использование плагинов:

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.2.1</version> 
      <configuration> 
       <descriptors> 
        <descriptor>src/main/assembly/hadoop-job.xml</descriptor> 
       </descriptors> 
      </configuration> 
      <executions> 
       <execution> 
        <id>make-assembly</id> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

Внутри вашего Hadoop-job.xml вы можете иметь

<assembly> 
    <id>job</id> 
    <formats> 
    <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <dependencySets> 
    <dependencySet> 
     <unpack>false</unpack> 
     <scope>runtime</scope> 
     <outputDirectory>lib</outputDirectory> 
     <excludes> 
     <exclude>${groupId}:${artifactId}</exclude> 
     </excludes> 
    </dependencySet> 
    <dependencySet> 
     <outputDirectory></outputDirectory> 
     <unpack>true</unpack> 
     <includes> 
     <include>${groupId}:${artifactId}</include> 
     </includes> 
    </dependencySet> 
    </dependencySets> 
</assembly> 

Более подробную информацию об этом плагин можно найти на http://maven.apache.org/plugins/maven-assembly-plugin/

+0

Это работает хорошо. – srikanth

+0

Я пытаюсь включить файлы .sh вместе с .jar-файлом. Итак, я пробовал разные способы и закончил неудачу. Как бы я обернул файлы jar и shell в tar. – srikanth

+0

В зависимости от того, что вы пытаетесь сделать, вы можете посмотреть http://hadoop.apache.org/docs/stable/api/org/apache/hadoop/filecache/DistributedCache.html – FuriousGeorge

0

Вы должны загрузить accumulo-core.jar и добавить его в свой путь к классу.

+0

Привет, Йенс, его уже доступно в classpath/lib – srikanth

+0

@srikanth Как запустить свою программу и показать свой файл structrue, пожалуйста. И какую версию 'accumulo' вы используете? – Jens

+0

Я использую mapreduce для выполнения задания на вставку. Драйвер.java, Mapper.java, Connector.java (Singleton). Я использую накопитель-1.5.1. Я запускаю использование «hasoop jar name.jar package.classname args1 args2». Исключение выбрано в Mapper, в строке, где я инициирую вызов для singleton Connector.java – srikanth