El nodo de datos de Hadoop no puede comenzar a generar org.apache.hadoop.hdfs.server.common.Storage: no se puede bloquear el almacenamiento

Tengo algunos problemas al intentar iniciar un nodo de datos en Hadoop, desde el registro puedo ver que el nodo de datos se inicia dos veces (sigue un registro parcial):

2012-05-22 16:25:00,369 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: STARTUP_MSG: 
/************************************************************
STARTUP_MSG: Starting DataNode
STARTUP_MSG:   host = master/192.168.0.1
STARTUP_MSG:   args = []
STARTUP_MSG:   version = 1.0.1
STARTUP_MSG:   build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.0 -r 1243785; compiled by 'hortonfo' on Tue Feb 14 08:15:38 UTC 2012
************************************************************/
2012-05-22 16:25:00,375 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: STARTUP_MSG: 
/************************************************************
STARTUP_MSG: Starting DataNode
STARTUP_MSG:   host = master/192.168.0.1
STARTUP_MSG:   args = []
STARTUP_MSG:   version = 1.0.1
STARTUP_MSG:   build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.0 -r 1243785; compiled by 'hortonfo' on Tue Feb 14 08:15:38 UTC 2012
************************************************************/
2012-05-22 16:25:00,490 INFO org.apache.hadoop.metrics2.impl.MetricsConfig: loaded properties from hadoop-metrics2.properties
2012-05-22 16:25:00,500 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source MetricsSystem,sub=Stats registered.
2012-05-22 16:25:00,500 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Scheduled snapshot period at 10 second(s).
2012-05-22 16:25:00,500 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: DataNode metrics system started
2012-05-22 16:25:00,512 INFO org.apache.hadoop.metrics2.impl.MetricsConfig: loaded properties from hadoop-metrics2.properties
2012-05-22 16:25:00,523 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source MetricsSystem,sub=Stats registered.
2012-05-22 16:25:00,523 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Scheduled snapshot period at 10 second(s).
2012-05-22 16:25:00,524 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: DataNode metrics system started
2012-05-22 16:25:00,722 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source ugi registered.
2012-05-22 16:25:00,724 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source ugi registered.
2012-05-22 16:25:00,727 WARN org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Source name ugi already exists!
2012-05-22 16:25:00,729 WARN org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Source name ugi already exists!
2012-05-22 16:20:15,894 INFO org.apache.hadoop.hdfs.server.common.Storage: Cannot lock storage /app/hadoop/tmp/dfs/data. The directory is already locked.
2012-05-22 16:20:16,008 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Cannot lock storage /app/hadoop/tmp/dfs/data. The directory is already locked.
        at org.apache.hadoop.hdfs.server.common.Storage$StorageDirectory.lock(Storage.java:602)
        at org.apache.hadoop.hdfs.server.common.Storage$StorageDirectory.analyzeStorage(Storage.java:455)
        at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:111)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:385)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:299)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:1582)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1521)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1539)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:1665)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:1682)

he buscado en internet y he encontrado esta pregunta, pero no sobrescribí nada usando conf/hdfs-site.xml, que se muestra a continuación, por lo que Hadoop debería usar valores predeterminados que (como se describe aquí) no puede causar ningún bloqueo fallido. Este es mi conf/hdfs-site.xml:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
  <property>
    <name>dfs.replication</name>
    <value>2</value>
    <description>Default block replication.
    The actual number of replications can be specified when the file is created.
    The default is used if replication is not specified in create time.
    </description>
  </property>
</configuration>

Este es mi conf/core-site.xml:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/app/hadoop/tmp</value>
    <description>A base for other temporary directories.</description>
  </property>

  <property>
    <name>fs.default.name</name>
    <value>hdfs://master:54310</value>
    <description>The name of the default file system.  A URI whose
    scheme and authority determine the FileSystem implementation.  The
    uri's scheme determines the config property (fs.SCHEME.impl) naming
    the FileSystem implementation class.  The uri's authority is used to
    determine the host, port, etc. for a filesystem.</description>
  </property>
</configuration>

Este es el contenido de hadoop/conf/slaves:

master
slave

preguntado el 22 de mayo de 12 a las 16:05

¿Puede confirmar que el usuario con el que se ejecuta Hadoop tiene permiso de escritura para el /app/hadoop/tmp/dfs/data carpeta, y que esta carpeta existe -

Sí, el usuario es propietario de /app/hadoop/tmp/dfs/data, tiene permisos de escritura y esa carpeta existe. -

ok, ¿un archivo llamado in_use.lock ya existe en esa carpeta? -

No, no lo hace. Volviendo a intentar empezar con start-dfs.sh ahora tira java.io.IOException: Incompatible namespaceIDs in /app/hadoop/tmp/dfs/data que soy (con suerte) capaz de resolver usando michael-noll.com/tutorials/…"... También noté que cuando el nodo de datos colapsó, se inició dos veces en 200 ms. Si es necesario, publicaré el registro completo. -

ejecutar bien dos instancias una al lado de la otra daría como resultado el mensaje de error de bloqueo:

5 Respuestas

  • detener el nodo de datos
  • elimine el archivo in_use.lock del directorio de datos dfs
  • ubicación e inicio de nodo de datos

debería funcionar bien

Respondido 07 ago 13, 20:08

También agregue las siguientes 2 propiedades en su archivo hdfs-site.xml.

<property>
        <name>dfs.name.dir</name>
        <value>/some_path</value>
    </property>

    <property>
        <name>dfs.data.dir</name>
        <value>/some_path</value>
    </property>

su ubicación predeterminada es /tmp... debido a esto, pierde datos en cada reinicio.

Respondido el 22 de enero de 13 a las 03:01

Estaba enfrentando un problema similar, pero leí una publicación que decía que dfs.name.dir y dfs.data.dir deberían ser diferentes entre sí. Tenía los dos para ser iguales, y cambiar estos valores para que fueran diferentes entre sí solucionó mi problema.

Respondido 02 Feb 13, 19:02

Tuve el mismo problema y configuré umask en 0022 en el shell, donde estaba ejecutando las pruebas, me solucionó el problema.

Respondido el 17 de junio de 13 a las 16:06

sudo rm -r /tmp/hadoop-[YourNameHere]/dfs/data/

Y reiniciar dfs.

Respondido 25 Jul 16, 01:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.