2012-06-13 13 views
7

estoy un poco atascado reparar una mesa defectuoso (en hbase 0.92.1-cdh4.0.0, Hadoop 2.0.0-cdh4.0.0)reparación de tablas HBase (región sin asignar en transición)

Hay una región en transición que no termina:

Region State 
bf2025f4bc154914b5942af4e72ea063 counter_traces,1329773878.35_766a0b4df75e4381a686fbc07db9e333,1339425291230.bf2025f4bc154914b5942af4e72ea063. state=OFFLINE, ts=Tue Jun 12 11:43:53 CEST 2012 (0s ago), server=null 

Cuando corro sudo -u hbase hbase hbck -repair, me sale esto:

Number of empty REGIONINFO_QUALIFIER rows in .META.: 0 
ERROR: Region { meta => counter_traces,1329773878.35_766a0b4df75e4381a686fbc07db9e333,1339425291230.bf2025f4bc154914b5942af4e72ea063., hdfs => hdfs://hbase001:8020/hbase/counter_traces/bf2025f4bc154914b5942af4e72ea063, deployed => } not deployed on any region server. 
Trying to fix unassigned region... 
12/06/12 11:44:40 INFO util.HBaseFsckRepair: Region still in transition, waiting for it to become assigned: {NAME => 'counter_traces,1329773878.35_766a0b4df75e4381a686fbc07db9e333,1339425291230.bf2025f4bc154914b5942af4e72ea063.', STARTKEY => '1329773878.35_766a0b4df75e4381a686fbc07db9e333', ENDKEY => '1329793347.58_163865765c0a11e184ab003048f0e77e', ENCODED => bf2025f4bc154914b5942af4e72ea063,} 

y que sólo bucles.

Si no hago el -repair, me sale esto:

Number of empty REGIONINFO_QUALIFIER rows in .META.: 0 
ERROR: Region { meta => counter_traces,1329773878.35_766a0b4df75e4381a686fbc07db9e333,1339425291230.bf2025f4bc154914b5942af4e72ea063., hdfs => hdfs://hbase001:8020/hbase/counter_traces/bf2025f4bc154914b5942af4e72ea063, deployed => } not deployed on any region server. 
ERROR: Region { meta => counter_traces,1329816776.95_95b5561f3c1e496598421359a19ac665,1339425297099.ee1fd808d954c9adc9ed95ec2f29d119., hdfs => hdfs://hbase001:8020/hbase/counter_traces/ee1fd808d954c9adc9ed95ec2f29d119, deployed => } not deployed on any region server. 
12/06/12 11:45:59 DEBUG util.HBaseFsck: There are 134 region info entries 
ERROR: There is a hole in the region chain between 1329773878.35_766a0b4df75e4381a686fbc07db9e333 and 1329793347.58_163865765c0a11e184ab003048f0e77e. You need to create a new .regioninfo and region dir in hdfs to plug the hole. 
ERROR: There is a hole in the region chain between 1329816776.95_95b5561f3c1e496598421359a19ac665 and 1329847231.75_b3c50776778b43e088dd7ed865e11331. You need to create a new .regioninfo and region dir in hdfs to plug the hole. 
ERROR: Found inconsistency in table counter_traces 

me he encontrado -repair un par de veces antes, y me ayudó. Pero esta vez, ya no.

Ok, así que esto indica hacer una intervención manual para solucionar esto. ¿Puede alguien señalarme en la dirección correcta sobre cómo hacer esto? Una receta, página web, ejemplo, cualquier cosa ayudará.

Gracias, Mario

Respuesta

12

Mario,

Así que una de las razones por las que una región se queda atascado en la transición es debido a que, cuando se está moviendo a través de regionservers, es asignado en la regionserver fuente, pero es nunca asignado a otro servidor de regiones. Una solución que siempre funciona para mí es mediante la asignación de la fuerza desde el shell hbase por: -

assign regionName 
+0

Eso me llevó en la dirección correcta. El assing directo no funcionó, pero al menos encontré un código que me ayudó a llenar el vacío en la cadena de la región. – Mario

+0

¿Podría compartir el código? Tengo un problema similar y me gustaría solucionarlo. –

+0

Lo siento, debería haber publicado en aquel entonces. No creo que ya tenga eso. – Mario

0

Si su versión HBase es suficientemente reciente también se podría tratar hbck -repairHoles en lugar de sólo repare. Eso hizo el truco para mí en un problema reciente de "arreglar el agujero".

1

Primero debe verificar si hay un archivo para esa región en particular en su HDF.

Si lo hay, debe quedarse con hbck -fixHdfsHoles -fixMeta solo hasta que se solucione. (podría tomar un par de intentos).

Si no existe dicho archivo para la región en transición (debe estar en/hbase/data ///), HBase considera que debe haber un archivo H válido para esa región en ese directorio y no podrá para arreglarlo con los comandos normales de reparación.

Usted debe hacer lo que está en una de las últimas respuesta aquí y crea un HFILE válida en sus hdfs:

http://comments.gmane.org/gmane.comp.java.hadoop.hbase.user/31308

0

Traté de hacer la asignación forzosa de las regiones, pero no funcionó para mi.Probé siguiente y funcionó:

Pasos:

  • mesa Desactivar de Shell hbase
  • Run hbck para fijar problmes usando los siguientes comandos

    sudo -u hbase hbase hbck -repair

  • Habilitar la tabla de hbase shell

0

En mi caso, olvido cambiar el propietario de los datos de la región que se copiaron de otro clúster.

entonces trato de hacer hbase hbck -repair pero llegar INFO util.HBaseFsckRepair: Region still in transition, waiting for it to become assigned continuación, aparecerá el error Unable to complete check or repair the region, failed to move out of transition within timeout 120000ms

encuentro hbase:meta ya tiene información región.

Mientras mesa de exploración, recibirá error como este

ERROR: No server address listed in hbase:meta for region X 

A continuación, intente hbase hbck -fixAssignments, pero todavía no como antes.

Entonces puedo comprobar los datos de la región de mesa y encuentro único grupo propio y de esta tabla son

drwxr-xr-x - hdfs hbase 

pero sí como esto

drwxr-xr-x - hbase hbase

Así problema fue resuelto después del cambio de cuenta y grupo otros. Ahora escaneará la tabla con éxito.

Cuestiones relacionadas