2015-06-18 42 views
5

Używam Hbase 1.0.1/Hadoop 2.5.2. Próbuję uruchomić skanowanie na stole, ale otrzymuję limity czasu RPC.Klient Hbase RPC Timeout

Zmieniłem timeout HBase RPC do 2 minut, co mogę potwierdzić frm UI ...

<property> 
    <name>hbase.rpc.timeout</name> 
    <value>120000</value> 
    <source>hbase-site.xml</source> 
</property> 

... ale mój klient jest nadal taktowania się po 60s ...

Caused by: java.io.IOException: Call to xxxxxxx/172.16.5.13:16020 failed on local exception: org.apache.hadoop.hbase.ipc.CallTimeoutException: Call id=2968, waitTime=60001, operationTimeout=60000 expired. 
    at org.apache.hadoop.hbase.ipc.RpcClientImpl.wrapException(RpcClientImpl.java:1235) 
    at org.apache.hadoop.hbase.ipc.RpcClientImpl.call(RpcClientImpl.java:1203) 
    at org.apache.hadoop.hbase.ipc.AbstractRpcClient.callBlockingMethod(AbstractRpcClient.java:216) 
    at org.apache.hadoop.hbase.ipc.AbstractRpcClient$BlockingRpcChannelImplementation.callBlockingMethod(AbstractRpcClient.java:300) 
    at org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$BlockingStub.scan(ClientProtos.java:31751) 
    at org.apache.hadoop.hbase.client.ScannerCallable.call(ScannerCallable.java:199) 
    at org.apache.hadoop.hbase.client.ScannerCallable.call(ScannerCallable.java:62) 
    at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:126) 
    ... 6 more 
Caused by: org.apache.hadoop.hbase.ipc.CallTimeoutException: Call id=2968, waitTime=60001, operationTimeout=60000 expired. 
    at org.apache.hadoop.hbase.ipc.Call.checkAndSetTimeout(Call.java:70) 
    at org.apache.hadoop.hbase.ipc.RpcClientImpl.call(RpcClientImpl.java:1177) 
    ... 12 more 

Próbowałem zmienić rozmiar bloku pamięci podręcznej, ale nie wydaje się to żadnego znaczenia.

Czy jest jakiś inny czas, którego mi brakuje. Istnieje wiele wierszy w tabeli (miliony), chociaż skanowanie zwraca tylko dziesiątki tysięcy, ale problem wydaje się dotyczyć tylko określonego zestawu regionów.

+1

mam ten sam problem, czy u dostać go rozwiązać ? Dzięki – Marco

+1

Poddałem się w końcu. Ilość danych, które pisaliśmy zaczęła przekraczać przepustowość naszej platformy HBase. Ponieważ surowe dane o zdarzeniach miały wartość drugorzędną w porównaniu do naszych liczników zdarzeń, zdecydowaliśmy się zaprzestać rejestrowania w HBase. Teraz zapisujemy je w plikach tekstowych jako zapisy JSON, które wciąż możemy uruchomić, w razie potrzeby redukujemy zadania i zostawiamy HBase na bardziej krytyczne dane. – JohnnyD

Odpowiedz

4

Spróbuj podczas tworzenia połączenia w stronie klienta zamiast w hbase-site.xml:

conf.set("hbase.rpc.timeout", "1800000") 
+0

Czy hbase.rpc.timeout właściwość po stronie klienta? – Rajat

+0

tak. Nie korzystam z HBase w ostatnim roku, ale możesz go wypróbować. –

+0

Używam Phoenixa i ten problem pochodzi z warstwy Phoenix. Każdy pomysł, jak mogę to dodać w Phoenix –

0

To powinno się prace.

hbase org.apache.hadoop.hbase.mapreduce.Export -Dhbase.client.scanner.timeout.period=600000 tbname /path/to/hdfs 
1

Gdy serwer odbiera żądania skanowania RPC, termin jest obliczana za połowę mniejsza z dwóch wartości: hbase.client.scanner.timeout.period i hbase.rpc.timeout (które domyślnie wynoszą 60000 milisekund lub jedną minutę). Dlatego po ustawieniu 2 min skanowanie zostanie przekroczone w 60 sekund.

Po osiągnięciu limitu czasu serwer zwraca uzyskane do tego momentu wyniki. Ten zestaw wyników może być pusty. Jeśli wzorzec użycia obejmuje skanowanie trwa dłużej niż minutę, możesz zwiększyć te wartości.

Aby upewnić się, że limit czasu nie jest zbyt krótki, można skonfigurować hbase.cells.scanned.per.heartbeat.check do minimalnej liczby komórek, które muszą być skanowane zanim nastąpi sprawdzenie limitu czasu. Domyślna wartość to 10000. Mniejsza wartość powoduje częstsze występowanie przekroczeń limitu czasu.

poniższe linki mogą być pomocne, aby skonfigurować limity czasu dla HBase skanowania:

https://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.4.2/bk_installing_manually_book/content/best-practices-timeouts-phoenix.html

https://www.cloudera.com/documentation/enterprise/5-5-x/topics/admin_hbase_scanner_heartbeat.html#concept_xsl_dz1_jt

2

podstawie pierwszych odpowiedzi. I skonfigurowane właściwości hbase.client.scanner.timeout.period i hbase.rpc.timeout przed otworzyć połączenie z klastrem HBase:

import org.apache.hadoop.conf.Configuration; 
import org.apache.hadoop.hbase.HBaseConfiguration; 

Configuration conf = HBaseConfiguration.create(); 

conf.set("hbase.rpc.timeout", "1800000"); 
conf.set("hbase.client.scanner.timeout.period", "1800000");