2012-07-13 14 views
12

Zapisuję zadanie mapreduce.Informacja jest tabelą w hbase.Błąd mapreducji Hbase

Po uruchomieniu zadanie, miał błędach:

org.apache.hadoop.hbase.client.ScannerTimeoutException: 88557ms upłynął od ostatniego wywołania, limit czasu jest aktualnie ustawiony na 60000 w org.apache.hadoop.hbase .client.HTable $ ClientScanner.next (HTable.java:1196) at org.apache.hadoop.hbase.mapreduce.TableRecordReaderImpl.nextKeyValue (TableRecordReaderImpl.java:133) at org.apache.hadoop.hbase.mapreduce.TableRecordReader.nextKeyValue (TableRecordReader.java:142) at org.apache.hadoop.mapred.MapTask $ NewTrackingRecordReader.nextKeyValue (MapTask.java:532) at org.apache.hadoop.mapreduce.MapContext.nextKeyValue (MapContext.java:67) at org. apache.hadoop.mapreduce.Mapper.run (Mapper.java:143) at org.apache.hadoop.mapred.MapTask.ru nNewMapper (MapTask.java:764) w org.apache.hadoop.mapred.MapTask.run (MapTask.java:370) na org.apache.hadoop.mapred.Child $ 4.run (Child.java:255) w java. security.AccessController.doPrivileged (Metoda macierzysta) at javax.security.auth.Subject.doAs (Subject.java: 396) at org.apache.hadoop.security.UserGroupInformation.doAs (UserGroupInformation.java:1083) at org.apache. hadoop.mapred.Child.main (Child.java:249) Spowodowane przez: org.apache.hadoop.hbase.UnknownScannerException: org.apache.hadoop.hbase.UnknownScannerException: Name: 1502530095384129314 at org.apache.hadoop.hbase.regionserver .HRegionServer.next (HRegionServer.java:1837) at sun.reflect.GeneratedMethodAccessor19.invoke (Nieznane źródło) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke (Metoda .java: 597) na org.apache.hadoop.hbase.ipc.HBaseRPC $ Server.call (HBaseRPC.java:570) na org.apache.hadoop.hbase.ipc.HBaseServer $ Handler.run (HBaseServer.java:1039) w sun.reflect.NativeCons tructorAccessorImpl.newInstance0 (Metoda macierzysta) at sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:27) na java.lang.reflect.Constructor.newInstance (Constructor. java: 513) at org.apache.hadoop.hbase.RemoteExceptionHandler.decodeRemoteException (RemoteExceptionHandler.java:96) at org.apache.hadoop.hbase.client.ScannerCallable.call (ScannerCallable.java:83) at org.apache.hadoop .hbase.client.ScannerCallable.call (ScannerCallable.java:38) at org.apache.hadoop.hbase.client.HConnectionManager $ HConnectionImplementation.getRegionServerWithRetries (HConnectionManager.java:1226) at org.apache.hadoop.hbase.client.HTable $ ClientScanner.next (HTable.java: 1187) ... 12 więcej

Czy możesz pomóc naprawię to.

Odpowiedz

9

Wystąpił wyjątek czasowy skanera. Aby uniknąć time-out Wyjątek Zwiększyć czas oczekiwania przez ustawienie właściwości w HBase-site.xml która będzie dostępna w 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

jako oficjalny HBase książki stanów:

You może potrzebować znaleźć miejsce pomiędzy małą liczbą wywołań RPC a pamięcią używaną na kliencie i serwerze. Ustawienie wyższego buforowania skanera poprawi wydajność skanowania w większości przypadków, ale ustawienie zbyt wysokiej może również przynieść niepożądane efekty: każde wywołanie funkcji next() będzie trwało dłużej podczas pobierania większej ilości danych i trzeba je przetransferować do klient, a po przekroczeniu maksymalnego sterty, proces klienta może uzyskać , może zakończyć się z wyjątkiem OutOfMemoryException. Gdy czas potrzebny na przeniesienie wierszy do klienta lub przetworzenie danych na kliencie przekroczy skonfigurowany próg dzierżawy skanera, użytkownik zakończy otrzymywanie błędu dzierżawy wygasłego w postaci wywoływanego wyjątku ScannerTimeoutException.

Lepiej byłoby nie omijać wyjątku przez powyższą konfigurację, ale ustawić buforowanie strony Mapy niżej, umożliwiając programistom przetwarzanie wymaganego obciążenia we wcześniej określonym przedziale czasu.

+1

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

+0

urywek pochodzi ** HBase ostatecznego przewodnika ** , 1. edycja 2011 strona 128. – botchniaque

2

Możesz użyć metody Skanuj obiekt, aby zmniejszyć liczbę wierszy pobieranych przez skaner naraz.

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

Większa wartość buforowania może powodować ScannerTimeoutException jako programu może zająć więcej czasu ze spożyciem/przetwarzania pobranych wierszy niż wartość limitu czasu.

Ale może spowolnić pracę, ponieważ skaner wysyła więcej żądań pobierania do serwera, więc należy dokładnie dostosować wartości caching i timeout zgodnie z potrzebami programu.

0

settting następujące nieruchomość w HBase-site.xml pracował dla mnie

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

To jest wyrzucane, jeśli czas między RPC od klienta do RegionServer przekracza limit czasu skanowania. na przykład

if (RPC_call_time > Scanner_timeout){ 

throw ScannerTimeoutException 

} 

wizyta my blogspot for details