Falha ao localizar o binário winutils no caminho binário hadoop

108

Estou recebendo o seguinte erro ao iniciar o namenode para a versão mais recente do hadoop-2.2. Não encontrei o arquivo exe winutils na pasta hadoop bin. Eu tentei os comandos abaixo

$ bin/hdfs namenode -format
$ sbin/yarn-daemon.sh start resourcemanager

ERROR [main] util.Shell (Shell.java:getWinUtilsPath(303)) - Failed to locate the winutils binary in the hadoop binary path
java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
    at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:278)
    at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:300)
    at org.apache.hadoop.util.Shell.<clinit>(Shell.java:293)
    at org.apache.hadoop.util.StringUtils.<clinit>(StringUtils.java:76)
    at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.main(ResourceManager.java:863)
user2925491
fonte
Tentando me livrar dessa mensagem de erro, configurei -Dhadoop.home.dir com um valor significativo. Agora estou recebendo algo como (caminho local substituído pelo nome da variável): Não foi possível localizar o executável $ {HADOOP_HOME} \ bin \ winutils.exe nos binários do Hadoop. E adivinhe: definir a variável não fez o binário aparecer. Além disso, a prioridade ERROR está errada, pois o aplicativo parece continuar. Na minha opinião, isso é um bug no Hadoop 2.2.0.
Hiran
Há um (como por hoje aberto) jira para este> issues.apache.org/jira/browse/HADOOP-10051
René Nyffenegger
1
Existe um HADOOP-11003 .
Remus Rusanu
1
Por favor, aceite a resposta dada por Prasad D. Ele forneceu arquivos prontos para serem usados; evitando assim esforços.
Kaushik Lele

Respostas:

96

Solução Simples: Baixe aqui e adicione ao$HADOOP_HOME/bin

( Fonte )

ATUALIZAÇÃO IMPORTANTE:

Para o hadoop-2.6.0, você pode baixar os binários do blog Titus Barik >> .

Eu não apenas precisei apontar HADOOP_HOMEpara o diretório extraído [path], mas também fornecer propriedade do sistema -Djava.library.path=[path]\binpara carregar libs nativas (dll).

Prasad D
fonte
Isso ajuda a iniciar o hdfs, mas quando tento colocar um arquivo de texto em hdfs, ocorre o erro Exception no thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsBy teArray (II [BI [BIILjava / lang / String; JZ) V
Kaushik Lele de
É parcialmente duplicado da minha resposta. Tanto o download quanto a fonte são links do meu blog, conforme mencionado na resposta.
Abhijit
1
Isso parece funcionar com o Hadoop 2.7.3 também. Ou haveria um problema? 1) faça o download na página acima. tar xfvz que fornece uma distribuição do Hadoop 2.6. Em seguida, copie bin \ winutlis.exe para o diretório 2.73 \ bin. Funciona instantaneamente. Até agora - pelo menos.
RichMeister
28

Se você enfrentar esse problema ao executar um aplicativo local autocontido com Spark (ou seja, depois de adicionar spark-assembly-xxx-hadoopx.xxjar ou a dependência Maven ao projeto), uma solução mais simples seria colocar winutils.exe (download a partir daqui ) em "C: \ winutil \ bin". Em seguida, você pode adicionar winutils.exe ao diretório inicial do hadoop adicionando a seguinte linha ao código:

System.setProperty("hadoop.home.dir", "c:\\\winutil\\\")

Fonte: Clique aqui

TrnKh
fonte
Para mim, foi o suficiente para colocar o material de winutils hadoop/bin/bin/. Então, basta copiar a binpasta winutils na pasta hadoop bin. ( HADOOP_HOMEé definido no env vars)
holzkohlengrill
+1 Há uma barra excessiva no caminho do diretório, então estou deixando isso aqui para mim:System.setProperty("hadoop.home.dir", "c:\\winutil\\")
emragins
27

Se pegarmos diretamente a distribuição binária do Apache Hadoop versão 2.2.0 e tentarmos executá-la no Microsoft Windows, encontraremos ERROR util.Shell: Falha ao localizar o binário winutils no caminho binário hadoop.

A distribuição binária da versão 2.2.0 do Apache Hadoop não contém alguns componentes nativos do Windows (como winutils.exe, hadoop.dll etc). Eles são necessários (não opcionais) para executar o Hadoop no Windows.

Portanto, você precisa criar uma distribuição binária nativa do Windows do hadoop a partir dos códigos-fonte seguindo o arquivo "BUILD.txt" localizado dentro da distribuição do hadoop. Você também pode seguir as postagens a seguir para obter um guia passo a passo com captura de tela

Crie, instale, configure e execute o Apache Hadoop 2.2.0 no sistema operacional Microsoft Windows

ERROR util.Shell: Falha ao localizar o binário winutils no caminho binário hadoop

Abhijit
fonte
2
Oi Abhijit. Você seguiu suas próprias instruções? Hadoop não é compatível com Windows. Na verdade, ele só é compatível com certas versões do Windows Server. Isso é muito ruim para Microsoft e HortonWorks.
javadba
2
Isso foi há mais de dois anos e era muito (muito!) Verdadeiro na época. Eu tinha verificado diretamente com os engenheiros da Hortonworks apenas duas semanas antes em uma conferência.
javadba
18

A instrução java.io.IOException: Não foi possível localizar o executável null \ bin \ winutils.exe

explica que o nulo é recebido ao expandir ou substituir uma variável de ambiente. Se você ver o código-fonte em Shell.Java em Common Package, você descobrirá que a variável HADOOP_HOME não está sendo definida e que você está recebendo null no lugar dela e, portanto, o erro.

Portanto, HADOOP_HOME precisa ser definido para isso corretamente ou a propriedade hadoop.home.dir variável.

Espero que isto ajude.

Obrigado, Kamleshwar.

Kamleshwar
fonte
1
Em qual arquivo de configuração precisamos definir a propriedade hadoop.home.dir (Ex. Hdfs-site.xml, core-site.xml)?
Tushar Sarde
4
System.setProperty ("hadoop.home.dir", "C: \\ winutil \\"); referência: stackoverflow.com/a/33610936/3110474
Himanshu Bhandari
Se você estiver usando o Windows, certifique-se de usar barras invertidas duplas ao escrever qualquer caminho como um valor.
rishirich
12

Winutils.exe é usado para executar os comandos shell do SPARK. Quando você precisa executar o Spark sem instalar o Hadoop, você precisa deste arquivo.

As etapas são as seguintes:

  1. Baixe o winutils.exe do seguinte local para hadoop 2.7.1 https://github.com/steveloughran/winutils/tree/master/hadoop-2.7.1/bin [NOTA: Se você estiver usando uma versão separada do hadoop, faça o download do winutils da pasta correspondente da versão do hadoop no GITHUB do local mencionado acima.]

  2. Agora, crie uma pasta 'winutils' na unidade C: \. Agora crie uma pasta 'bin' dentro da pasta 'winutils' e copie o winutils.exe para essa pasta. Portanto, a localização do winutils.exe será C: \ winutils \ bin \ winutils.exe

  3. Agora, abra a variável de ambiente e defina HADOOP_HOME = C: \ winutils [NOTA: não adicione \ bin em HADOOP_HOME e não há necessidade de definir HADOOP_HOME no caminho]

Seu problema deve ser resolvido !!

Anurag
fonte
11

Acabei de encontrar esse problema enquanto trabalhava com o Eclipse. No meu caso, baixei a versão correta do Hadoop (hadoop-2.5.0-cdh5.3.0.tgz), extraí o conteúdo e coloquei-o diretamente no meu drive C. Então eu fui para

Eclipse-> Configurações de depuração / execução -> Ambiente (guia) -> e adicionado

variável: HADOOP_HOME

Valor: C: \ hadoop-2.5.0-cdh5.3.0

Daniel Epstein
fonte
3

No Pyspark, para executar o aplicativo Spark local usando o Pycharm, use as linhas abaixo

os.environ['HADOOP_HOME'] = "C:\\winutils"
print os.environ['HADOOP_HOME']
Narsireddy
fonte
2

winutils.exe são necessários para que o hadoop execute comandos relacionados ao hadoop. faça o download do arquivo zip hadoop-common-2.2.0. winutils.exe pode ser encontrado na pasta bin. Extraia o arquivo zip e copie-o na pasta hadoop / bin local.

Mohan Raj
fonte
2

Eu estava enfrentando o mesmo problema. Remover o bin\do caminho HADOOP_HOME resolveu para mim. O caminho para a variável HADOOP_HOME deve ser semelhante a.

C:\dev\hadoop2.6\

Pode ser necessário reiniciar o sistema. No meu caso, reiniciar o IDE foi suficiente.

Asmat Ali
fonte
2

Configure a variável HADOOP_HOME no Windows para resolver o problema.

Você pode encontrar a resposta em org/apache/hadoop/hadoop-common/2.2.0/hadoop-common-2.2.0-sources.jar!/org/apache/hadoop/util/Shell.java:

IOException de

  public static final String getQualifiedBinPath(String executable) 
  throws IOException {
    // construct hadoop bin path to the specified executable
    String fullExeName = HADOOP_HOME_DIR + File.separator + "bin" 
      + File.separator + executable;
    File exeFile = new File(fullExeName);
    if (!exeFile.exists()) {
      throw new IOException("Could not locate executable " + fullExeName
        + " in the Hadoop binaries.");
    }
    return exeFile.getCanonicalPath();
  }

HADOOP_HOME_DIR de

// first check the Dflag hadoop.home.dir with JVM scope
String home = System.getProperty("hadoop.home.dir");
// fall back to the system/user-global env variable
if (home == null) {
  home = System.getenv("HADOOP_HOME");
}
Andy
fonte
2
  1. Baixe [winutils.exe]
    da URL:
    https://github.com/steveloughran/winutils/hadoop-version / bin
  2. Cole-o em HADOOP_HOME / bin
    Nota: Você deve definir as variáveis ​​ambientais:
    Variável de usuário:
    Variável : HADOOP_HOME
    Valor : Hadoop ou dir spark
Mostafa M.Shawky
fonte
1

Eu estava tendo o mesmo problema no Windows. Eu consertei por

  • Baixando hadoop-common-2.2.0-bin-master do link .
  • Crie uma variável de usuário HADOOP_HOME em Variável de ambiente e atribua o caminho do diretório hadoop-common bin como um valor.
  • Você pode verificar executando hadoop em cmd.
  • Reinicie o IDE e execute-o.
Dipak Shaw
fonte
1

Baixe a versão desejada da pasta hadoop (digamos que se você está instalando o Spark no Windows, então a versão do hadoop para a qual o Spark foi criado) neste link como zip.

Extraia o zip para o diretório desejado. Você precisa ter o diretório do formulário hadoop\bin(criar explicitamente essa hadoop\binestrutura de diretório, se desejar) bincontendo todos os arquivos contidos na binpasta do hadoop baixado. Ele conterá muitos arquivos, como hdfs.dll, hadoop.dll etc., além de winutil.exe.

Agora crie uma variável de ambiente HADOOP_HOME e defina-a como <path-to-hadoop-folder>\hadoop. Em seguida, adicione ;%HADOOP_HOME%\bin; à PATHvariável de ambiente.

Abra um "novo prompt de comando" e tente executar novamente o seu comando.

Mahesha999
fonte
isso funcionou para mim, e a alternativa com HADOOP_HOME apontando para o diretório bin (em vez de seu pai) não.
philwalk
0

Usei as versões "hbase-1.3.0" e "hadoop-2.7.3". Definir a variável de ambiente HADOOP_HOME e copiar o arquivo 'winutils.exe' na pasta HADOOP_HOME / bin resolve o problema em um sistema operacional Windows. Atenção para definir o ambiente HADOOP_HOME para a pasta de instalação do hadoop (a pasta / bin não é necessária para essas versões). Além disso, eu preferi usar a ferramenta de plataforma cruzada cygwin para definir a funcionalidade do sistema operacional do linux (tanto quanto possível) porque a equipe do Hbase recomenda env linux / unix.

Mahkras
fonte