Problema com-libjars em hadoop

Estou a tentar executar o trabalho de MapReduce no Hadoop, mas estou a enfrentar um erro e não tenho a certeza do que está a correr mal. Tenho de ir aos frascos da biblioteca, o que é exigido pelo meu carteiro.

estou a dizer o seguinte no terminal:

Hadoop@ubuntu:/usr/local/hadoop$ bin /hadoop jar/home/hadoop / vardtst.jar-libjar / home / hadoop / clui.jar-libjar / home/hadoop / model.jar gutenberg ou101

e estou a receber a seguinte excepção:

em java. net. URLClassLoader$1.run(URLClassLoader. java:202)

em java.seguranca.Controlador de acesso.doPrivileged (método nativo)

At java.net.URLClassLoader.findClass (URLClassLoader. java: 190)

em java.idioma.Carregador de classe.classe de carga(ClassLoader.java: 306)

em java.idioma.Carregador de classe.classe de carga(ClassLoader.java: 247)

em java.idioma.Classe.forName0 (método nativo)

em java.idioma.Classe.forName(Classe.java: 247)

em organizacao.Apache.hadoop.util.RunJar.main (RunJar.java: 149)

Por Favor, Ajudem-Me ..Obrigado.
Author: Shrish Bajpai, 2011-07-31

3 answers

Também vale a pena notar um ponto subtil mas importante: a forma de especificar Frascos adicionais para JVMs executando mapa distribuído reduz tarefas e para JVM executando cliente de trabalho é muito diferente.

  • -a libjars torna os frascos disponíveis apenas para JVMs a correr o mapa remoto e a reduzir a tarefa

  • Para tornar estes mesmos JAR disponíveis para o JVM cliente (o JVM que é criado quando executa o comando hadoop jar), é necessário definir o ambiente HADOOP_CLASSSPATH variável:

$ export LIBJARS=/path/jar1,/path/jar2
$ export HADOOP_CLASSPATH=/path/jar1:/path/jar2
$ hadoop jar my-example.jar com.example.MyTool -libjars ${LIBJARS} -mytoolopt value

Ver: http://grepalex.com/2013/02/25/hadoop-libjars/

Outra causa de comportamento incorreto-libjars pode estar na implementação e inicialização erradas da classe de trabalho personalizado.

  • classe de trabalho deve implementar interface de ferramentas
  • a instância de classe de configuração deve ser obtida chamando getConf () em vez de criar uma nova instância;

Ver: http://kickstarthadoop.blogspot.ca/2012/05/libjars-not-working-in-custom-mapreduce.html

 18
Author: Vladimir Kroz, 2013-11-06 03:12:12

Quando estiver a indicar os '- LIBJARS ' com o comando Hadoop jar. Primeiro certifique-se de editar a sua classe de condução como mostrado abaixo:

    public class myDriverClass extends Configured implements Tool {

      public static void main(String[] args) throws Exception {
         int res = ToolRunner.run(new Configuration(), new myDriverClass(), args);
         System.exit(res);
      }

      public int run(String[] args) throws Exception
      {

        // Configuration processed by ToolRunner 
        Configuration conf = getConf();
        Job job = new Job(conf, "My Job");

        ...
        ...

        return job.waitForCompletion(true) ? 0 : 1;
    }
}

Agora edite o seu comando "hadoop jar" como mostrado abaixo:

Hadoop jar Youraplication.jar [myDriverClass] args-libjar localização / para/jar / file
Agora vamos perceber o que acontece por baixo. Basicamente estamos lidando com os novos argumentos da linha de comando, implementando a Interface de Ferramenta . O ToolRunner é usado para executar classes implementando interface de Ferramenta. Ele funciona em conjunto com GenericOptionsParser para processar os argumentos genéricos da linha de comandos hadoop e modifica a configuração da ferramenta.

Dentro do nosso principal () estamos a chamar ToolRunner.executar (nova configuração (), nova classe myDriverClass (), args) - isto executa a ferramenta dada por Ferramenta.executar (texto[]), Depois de analisar com os argumentos genéricos indicados. Ele usa a configuração dada, ou constrói um se ele é nulo e, em seguida, define o Configuração da ferramenta com a versão modificada do conf.

Agora dentro do método de execução, quando chamamos getConf () temos a versão modificada da configuração. Então certifique-se que você tem a linha abaixo em seu código. Se você implementar tudo o resto e ainda fazer uso da configuração conf = nova configuração(), nada iria funcionar.

Conf de configuração = getConf ();

 4
Author: Isaiah4110, 2016-03-27 00:08:46
Eu encontrei a resposta, foi um erro de lançamento porque eu estava faltando no nome da classe" principal " no comando.

A forma correcta de executar é: hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop jar /home/hadoop/vardtst.jar VardTest-libjar/home/hadoop / clui.jar, / home/hadoop / model.jar gutenberg ou101

Em que VardTest é a classe que contém o método principal ().

Obrigado.
 3
Author: Shrish Bajpai, 2011-08-01 01:14:31