2012-07-13 22 views
12

Escribo el trabajo mapreduce. La entrada es una tabla en hbase.Hbase mapreduce error

Cuando ejecución del trabajo, tenía error:

org.apache.hadoop.hbase.client.ScannerTimeoutException: 88557ms pasado desde la última invocación, tiempo de espera está establecido actualmente a 60.000 en org.apache.hadoop.hbase .client.HTable $ ClientScanner.next (HTable.java:1196) en org.apache.hadoop.hbase.mapreduce.TableRecordReaderImpl.nextKeyValue (TableRecordReaderImpl.java:133) en org.apache.hadoop.hbase.mapreduce.TableRecordReader.nextKeyValue (TableRecordReader.java:142) en org.apache.hadoop.mapred.MapTask $ NewTrackingRecordReader.nextKeyValue (MapTask.java:532) en org.apache.hadoop.mapreduce.MapContext.nextKeyValue (MapContext.java:67) en org. apache.hadoop.mapreduce.Mapper.run (Mapper.java:143) en org.apache.hadoop.mapred.MapTask.ru nNewMapper (MapTask.java:764) en org.apache.hadoop.mapred.MapTask.run (MapTask.java:370) en org.apache.hadoop.mapred.Child $ 4.run (Child.java:255) en java. security.AccessController.doPrivileged (Native Method) en javax.security.auth.Subject.doAs (Subject.java:396) en org.apache.hadoop.security.UserGroupInformation.doAs (UserGroupInformation.java:1083) en org.apache. hadoop.mapred.Child.main (Child.java:249) Causado por: org.apache.hadoop.hbase.UnknownScannerException: org.apache.hadoop.hbase.UnknownScannerException: Nombre: 1502530095384129314 en org.apache.hadoop.hbase.regionserver .HRegionServer.next (HRegionServer.java:1837) at sun.reflect.GeneratedMethodAccessor19.invoke (Fuente desconocida) en sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) en java.lang.reflect.Method.invoke (Método .java: 597) en org.apache.hadoop.hbase.ipc.HBaseRPC $ Server.call (HBaseRPC.java:570) en org.apache.hadoop.hbase.ipc.HBaseServer $ Handler.run (HBaseServer.java:1039) en sun.reflect.NativeCons tructorAccessorImpl.newInstance0 (Método nativo) en sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:39) en sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:27) en java.lang.reflect.Constructor.newInstance (Constructor. java: 513) en org.apache.hadoop.hbase.RemoteExceptionHandler.decodeRemoteException (RemoteExceptionHandler.java:96) en org.apache.hadoop.hbase.client.ScannerCallable.call (ScannerCallable.java:83) en org.apache.hadoop .hbase.client.ScannerCallable.call (ScannerCallable.java:38) en org.apache.hadoop.hbase.client.HConnectionManager $ HConnectionImplementation.getRegionServerWithRetries (HConnectionManager.java:1226) en org.apache.hadoop.hbase.client.HTable $ ClientScanner.next (HTable.java:1187) ... 12 más

¿Puede ayudarnos? yo lo arreglo

Respuesta

9

Excepción de tiempo de espera del escáner ha ocurrido. Para evitar la excepción de tiempo de espera Aumentar el tiempo de espera al establecer la propiedad en hbase-site.xml que estará disponible en hbase-> conf

<property> 
    <name>hbase.client.scanner.timeout.period</name> 
    <value>900000</value> <!-- 900 000, 15 minutes --> 
    </property> 
    <property> 
    <name>hbase.rpc.timeout</name> 
    <value>900000</value> <!-- 15 minutes --> 
    </property> 
9

Como los oficiales HBase libro dice:

Usted Es posible que necesite encontrar un punto óptimo entre un número bajo de RPC y la memoria utilizada en el cliente y el servidor. Configurar el almacenamiento en caché del escáner más alto mejorará el rendimiento del escaneo la mayor parte del tiempo, pero establecerlo demasiado alto también puede tener efectos adversos: cada llamada a siguiente() tardará más a medida que se obtengan más datos y es necesario transportarlos al cliente, y una vez que exceda el montón máximo que el proceso del cliente tiene disponible puede terminar con una OutOfMemoryException. Cuando el tiempo necesario para transferir las filas al cliente o procesar los datos de en el cliente excede el umbral de arrendamiento del escáner configurado, terminará recibiendo un error de expiración del arrendamiento, en forma de una excepción ScannerTimeoutException lanzada.

Por lo tanto, sería mejor no evitar la excepción de la configuración anterior, pero para establecer el almacenamiento en caché de su lado del mapa inferior, permitiendo a los correlacionadores procesar la carga requerida en el intervalo de tiempo preestablecido.

+1

https://books.google.fr/books?id=nUhiQxUXVpMC&pg=PA128&lpg=PA128#v=onepage&q&f=false – Fabien

+0

el fragmento es de HBase ** ** la guía definitiva , 1ª edición 2011 página 128. – botchniaque

2

Puede utilizar el método setCaching(int noOfRows) de Explorar objeto para reducir el número de filas recuperadas por el escáner a la vez.

Scan scan=new Scan(); 
scan.setCaching(400);//here 400 is just an example value 

valor almacenamiento en caché más grande puede causar ScannerTimeoutException como su programa puede tardar más tiempo en consumir/procesamiento de filas captadas que el valor de tiempo de espera.

Pero puede ralentizar su tarea también ya que el escáner realiza más solicitudes de recuperación al servidor, por lo que debe ajustar sus valores caching y timeout según las necesidades de su programa.

0

settting siguiente propiedad en hbase-site.xml trabajó para mí

<property> 
     <name>hbase.client.scanner.timeout.period</name> 
     <value>900000</value> 
    </property> 

Esto se produce si el tiempo entre llamadas RPC desde el cliente al RegionServer excede el tiempo de espera de exploración. p.ej.

if (RPC_call_time > Scanner_timeout){ 

throw ScannerTimeoutException 

} 

visita my blogspot for details