A inicialização do datanode do HDFS falha quando os discos estão cheios

2

Nosso cluster HDFS está apenas 90% cheio, mas alguns datanodes têm alguns discos que estão 100% cheios. Isso significa que quando reiniciamos em massa o cluster inteiro, alguns datanodes não conseguem iniciar com uma mensagem como esta:

2013-10-26 03:58:27,295 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Mkdirs failed to create /mnt/local/sda1/hadoop/dfsdata/blocksBeingWritten

Apenas três precisam falhar dessa forma antes de começarmos a sofrer uma perda real de dados.

Atualmente, trabalhamos diminuindo a quantidade de espaço reservado para o usuário root, mas acabamos perdendo. Também executamos o re-balancer constantemente, mas alguns discos ficam com 100% de qualquer maneira.

A alteração da configuração dfs.datanode.failed.volumes.tolerated não é a solução, pois o volume não falhou.

Alguma idéia?

    
por mbac 29.10.2013 / 15:53

4 respostas

1

De acordo com este parâmetro padrão do HDFS , o dfs.datanode.du.reserved é por volume. Portanto, se você definir 10 GB e o datanode tiver 4 volumes configurados para HDFS, ele reservará 40 GB para uso não DFS.

    
por 25.08.2015 / 06:59
1

Talvez você deva transferir dados de um volume para outro em um datanode manualmente:

3.12. Em um nó de dados individual, como você equilibra os blocos no disco?

Atualmente, o Hadoop não possui um método para fazer isso automaticamente. Para fazer isso manualmente:

  1. Desligue o DataNode envolvido
  2. Use o comando mv do UNIX para mover a réplica de bloco individual e meta-pares de um diretório para outro no host selecionado. Em versões que têm HDFS-6482 (Apache Hadoop 2.6.0 +) você também precisa para garantir que a estrutura de diretórios subdiretidos permaneça exatamente mesmo quando mover os blocos pelos discos. Por exemplo, se o réplica de bloco e seu meta par estavam sob /data/1/dfs/dn/current/BP-1788246909-172.23.1.202-1412278461680/current/finalized/subdir0/subdir1/, e você queria movê-lo para / data / 5 / disk, então ele deve ser movido na mesma estrutura de subdiretórios abaixo, ou seja, /data/5/dfs/dn/current/BP-1788246909-172.23.1.202-1412278461680/current/finalized/subdir0/subdir1/. Se isso não for mantido, o DN não poderá mais localizar as réplicas após o movimento.
  3. Reinicie o DataNode.

Fonte: link

    
por 15.01.2016 / 13:54
0

para o seu caso, equilibrar seus dados uniformemente sobre os datanodes do cluster pode ajudar a evitar que os discos fiquem cheios, mesmo se o cluster geral tiver espaço você pode forçar a execução hadoop oob balancer periodically.this irá embaralhar os blocos para que todos os datanodes consumam a mesma quantidade de espaço em disco

    hadoop balancer

você pode especificar o limite para este script no qual os blocos hdfs serão balanceados, o padrão é 10, você pode especificar um número menor se você acha que 10% não é suficiente, eu vejo você já usando 90% de espaço em hdfs, então você pode vá para 5

    hadoop balancer 5 

verifique estes link1 link2 também para mais sobre balanceador

    
por 19.11.2013 / 12:02
0

Eu acho que o que você realmente quer é definir dfs.datanode.du.reservado para algum valor diferente de zero, para que o datanode garanta que sempre haja muito espaço livre nos volumes HDFS do sistema.

Nota: dfs.datanode.du.reserved é para espaço livre no sistema inteiro , não por volume.

De acordo com HDFS-1564 , há discussão sobre como fazer uma opção por volume, mas não é previsto para qualquer versão particular ainda.

    
por 21.11.2013 / 19:48

Tags