Atualmente, estou configurando o hadoop em um servidor executando o CentOs . Quando executo start-dfs.sh
ou stop-dfs.sh
, recebo o seguinte erro:
WARN util.NativeCodeLoader: Não foi possível carregar a biblioteca nativo-hadoop para sua plataforma ... usando classes builtin-java onde aplicável
Estou executando o Hadoop 2.2.0.
Fazer uma pesquisa on-line trouxe esse link: http://balanceandbreath.blogspot.ca/2013/01/utilnativecodeloader-unable-to-load.html
No entanto, o conteúdo do /native/
diretório no hadoop 2.x parece ser diferente, portanto não tenho certeza do que fazer.
Também adicionei essas duas variáveis de ambiente em hadoop-env.sh
:
exportar HADOOP_OPTS = "$ HADOOP_OPTS -Djava.library.path = / usr / local / hadoop / lib /"
exportar HADOOP_COMMON_LIB_NATIVE_DIR = "/ usr / local / hadoop / lib / native /"
Alguma ideia?
Respostas:
Suponho que você esteja executando o Hadoop no CentOS de 64 bits. O motivo pelo qual você viu esse aviso é que a biblioteca nativa do Hadoop
$HADOOP_HOME/lib/native/libhadoop.so.1.0.0
foi realmente compilada em 32 bits.Enfim, é apenas um aviso e não afetará as funcionalidades do Hadoop.
Aqui está o caminho, se você deseja eliminar esse aviso, faça o download do código-fonte do Hadoop e recompile
libhadoop.so.1.0.0
no sistema de 64 bits e substitua o de 32 bits.As etapas sobre como recompilar o código fonte estão incluídas aqui no Ubuntu:
Boa sorte.
fonte
hadoop-common-project/hadoop-common
ehadoop-hdfs-project/hadoop-hdfs
é suficiente.Basta acrescentar a palavra nativa ao seu
HADOOP_OPTS
:PS: Obrigado Searene
fonte
A resposta depende ... Acabei de instalar o Hadoop 2.6 do tarball no CentOS 6.6 de 64 bits. A instalação do Hadoop realmente veio com uma biblioteca nativa pré-construída de 64 bits. Para minha instalação, está aqui:
E eu sei que é de 64 bits:
Infelizmente, estupidamente ignorei a resposta ali mesmo, me encarando quando me concentrei em "Esta biblioteca é de 32 a 64 bits?":
Então, lição aprendida. Enfim, o resto pelo menos me levou a ser capaz de suprimir o aviso. Portanto, continuei e fiz tudo o que foi recomendado nas outras respostas para fornecer o caminho da biblioteca usando a variável de ambiente HADOOP_OPTS sem sucesso. Então eu olhei o código fonte. O módulo que gera o erro informa a dica ( util.NativeCodeLoader ):
Então, vamos aqui para ver o que ele faz:
http://grepcode.com/file/repo1.maven.org/maven2/com.ning/metrics.action/0.2.6/org/apache/hadoop/util/NativeCodeLoader.java/
Ah, existe algum log no nível de depuração - vamos ativar isso para ver se obtemos alguma ajuda adicional. Isso é feito adicionando a seguinte linha ao arquivo $ HADOOP_CONF_DIR / log4j.properties:
Em seguida, executei um comando que gera o aviso original, como stop-dfs.sh, e recebi o presente:
E a resposta é revelada neste trecho da mensagem de depuração (a mesma coisa que o comando ldd anterior 'tentou' me dizer:
Qual versão do GLIBC eu tenho? Aqui está um truque simples para descobrir:
Portanto, não consigo atualizar meu sistema operacional para 2.14. A única solução é criar as bibliotecas nativas a partir de fontes no meu sistema operacional ou suprimir o aviso e ignorá-lo por enquanto. Optei por apenas suprimir o aviso irritante por enquanto (mas planejo construir a partir de fontes no futuro) comprar usando as mesmas opções de log que usamos para obter a mensagem de depuração, exceto agora, basta torná-la no nível de ERRO.
Espero que isso ajude outras pessoas a ver que um grande benefício do software de código aberto é que você pode descobrir isso se seguir algumas etapas lógicas simples.
fonte
Eu tive o mesmo problema. É resolvido adicionando as seguintes linhas
.bashrc
:fonte
No meu caso, depois de criar o hadoop no meu SO mint de 64 bits do Linux, substituí a biblioteca nativa em
hadoop/lib
. Ainda o problema persiste. Então eu descobri o hadoop apontando parahadoop/lib
não ohadoop/lib/native
. Acabei de mudar todo o conteúdo da biblioteca nativa para o pai. E o aviso acabou.fonte
Isso também funcionaria:
fonte
Após uma pesquisa contínua, conforme sugerido por Koti, resolvi o problema.
Felicidades
fonte
Para aqueles no OSX com Hadoop instalados via Homebrew, siga estas etapas substituindo o caminho e a versão do Hadoop, quando apropriado
atualize o hadoop-env.sh com
fonte
fonte
@zhutoulala - FWIW seus links funcionaram para mim com o Hadoop 2.4.0, com uma exceção que eu tive que dizer ao maven para não construir os javadocs. Também usei o patch no primeiro link da 2.4.0 e funcionou bem. Aqui está o comando que eu tive que emitir
Depois de criar isso e mover as bibliotecas, não se esqueça de atualizar o hadoop-env.sh :)
Pensei que isso poderia ajudar alguém que se deparou com os mesmos obstáculos que eu
fonte
Mova seus arquivos de biblioteca nativa compilados para a
$HADOOP_HOME/lib
pasta.Em seguida, defina suas variáveis de ambiente editando o
.bashrc
arquivoVerifique se os arquivos da biblioteca nativa compilados estão na
$HADOOP_HOME/lib
pasta.deveria funcionar.
fonte
fonte
Esta linha aqui:
Da resposta da KunBetter, funcionou para mim. Basta anexá-lo ao arquivo .bashrc e recarregar o conteúdo .bashrc
fonte
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
e isso funcionou para mim.Esta linha aqui:
A resposta da KunBetter é onde está o dinheiro
fonte
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
eexport LD_LIBRARY_PATH=$HADOOP_HOME/lib/native:$LD_LIBRARY_PATH
Eu tive o mesmo problema com o JDK6, mudei o JDK para JDK8, o problema resolvido. Tente usar o JDK8 !!!
fonte
Além da resposta aceita pelo @zhutoulala, aqui está uma atualização para fazê-lo funcionar com a versão estável mais recente até a data (2.8) nas plataformas ARMHF (Raspberry Pi 3 modelo B). Primeiro, posso confirmar que você deve recompilar as bibliotecas nativas para o ARM de 64 bits; outras respostas aqui baseadas na configuração de algumas variáveis de ambiente não funcionarão. Conforme indicado na documentação do Hadoop, as bibliotecas nativas pré-criadas são de 32 bits.
As etapas de alto nível fornecidas no link fist ( http://www.ercoppa.org/posts/how-to-compile-apache-hadoop-on-ubuntu-linux.html ) estão corretas. Nesse URL, http://www.instructables.com/id/Native-Hadoop-260-Build-on-Pi/, você obtém mais detalhes específicos sobre o Raspberry Pi, mas não para o Hadoop versão 2.8.
Aqui estão minhas indicações para o Hadoop 2.8:
O método de correção de arquivos do CMake deve ser alterado. Além disso, os arquivos a serem corrigidos não são os mesmos. Infelizmente, não há patch aceito no JIRA específico para 2.8. Nesta URL ( https://issues.apache.org/jira/browse/HADOOP-9320 ), você deve copiar e colar o patch proposto por Andreas Muttscheller em seu nome:
Depois que a compilação for bem-sucedida:
E substitua o conteúdo do diretório lib / native da sua instalação do Hadoop pelo conteúdo deste arquivo. A mensagem de aviso ao executar o Hadoop deve desaparecer.
fonte
Para instalar o Hadoop, é muito mais fácil instalar a versão gratuita do Cloudera. Ele vem com uma interface gráfica agradável que simplifica a adição de nós, não há compilação ou preenchimento de dependências, ele vem com itens como colmeia, porco etc.
http://www.cloudera.com/content/support/en/downloads.html
As etapas são: 1) Download 2) Execute-o 3) Acesse a GUI da web (1.2.3.4:7180) 4) Adicione nós extras no GUI da web (NÃO instale o software cloudera em outros nós, ele faz tudo por você) 5) Na GUI da web, vá para Home, clique em Hue e Hue Web UI. Isso lhe dá acesso ao Hive, Pig, Sqoop etc.
fonte
Solução verificada de postagens anteriores:
1) Verifiquei se a
libhadoop.so.1.0.0
distribuição fornecida com a distribuição Hadoop foi compilada para a arquitetura da minha máquina, que é x86_64:2) Adicionado
-Djava.library.path=<path>
aHADOOP_OPT
emhadoop-env.sh
:Isso realmente fez o aviso irritante desaparecer.
fonte
Em primeiro lugar: você pode modificar a versão glibc. O CentOS fornece softwares seguros tradicionalmente, mas também significa que a versão é antiga, como glibc, protobuf ...
Você pode comparar a versão do glibc atual com o glibc necessário.
Segundo: se a versão do glibc atual for antiga, você poderá atualizar o glibc. DownLoad Glibc
Se a versão atual do glibc id estiver correta, você poderá anexar a palavra nativa ao seu HADOOP_OPTS
fonte
Não estou usando o CentOS. Aqui está o que eu tenho no Ubuntu 16.04.2, hadoop-2.7.3, jdk1.8.0_121. Execute start-dfs.sh ou stop-dfs.sh com sucesso sem erro:
Substitua / j01 / sys / jdk, / j01 / srv / hadoop pelo caminho da instalação
Também fiz o seguinte para uma instalação única no Ubuntu, que elimina a necessidade de inserir senhas várias vezes ao executar o start-dfs.sh:
Substituir usuário pelo seu nome de usuário
fonte
Basicamente, não é um erro, é um aviso no cluster Hadoop. Aqui apenas atualizamos as variáveis de ambiente.
fonte