2015-06-18 17 views
5

Sono in esecuzione Hbase 1.0.1/Hadoop 2.5.2. Sto cercando di eseguire una scansione su un tavolo, ma sto ricevendo timeout RPC.Timeout RPC client Hbase

ho cambiato il timeout HBase RPC per 2 minuti, che posso confermare frm l'interfaccia utente ...

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

... ma il mio cliente è ancora timeout dopo 60 ...

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 

Ho provato a cambiare la dimensione del blocco della cache, ma questo non sembra fare alcuna differenza.

C'è qualche altro timeout che mi manca. Ci sono molte righe nella tabella (milioni) anche se la scansione restituisce solo decine di migliaia ma il problema sembra essere solo con un insieme specifico di regioni.

+1

Ho lo stesso problema, ha u ottenere per risolverlo ? Grazie – Marco

+1

Ho rinunciato alla fine. Il volume di dati che stavamo scrivendo ha iniziato a superare il throughput della nostra piattaforma HBase. Poiché i dati degli eventi non elaborati erano di valore secondario rispetto ai contatori degli eventi, abbiamo deciso di interrompere la registrazione in HBase. Ora lo stiamo scrivendo in file di testo, in quanto i record JSON che possiamo ancora eseguire, riducono i lavori se necessario e lasciando HBase per dati più critici. – JohnnyD

risposta

4

Prova questa quando si crea il collegamento a lato client invece che in hbase-site.xml:

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

hbase.rpc.timeout è una proprietà lato client? – Rajat

+0

si. Non ho usato HBase nell'ultimo anno, ma puoi provarlo. –

+0

Sto usando Phoenix e questo problema proviene dal livello Phoenix. Qualche idea su come posso aggiungere questo a Phoenix –

0

Questo dovrebbe opere.

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

Quando il server riceve una richiesta RPC scansione, un termine viene calcolata pari a metà del più piccolo dei due valori: hbase.client.scanner.timeout.period e hbase.rpc.timeout (che sono entrambi predefiniti a 60000 millisecondi o un minuto). Questo è il motivo per cui dopo aver impostato 2 minuti la scansione è scaduta in 60 secondi.

Al raggiungimento del limite di tempo, il server restituisce i risultati accumulati fino a quel momento. Questo set di risultati potrebbe essere vuoto. Se il tuo modello di utilizzo include che le scansioni richiederanno più di un minuto, puoi aumentare questi valori.

per assicurarsi che il periodo di timeout, non è troppo breve, è possibile configurare hbase.cells.scanned.per.heartbeat.check ad un numero minimo di cellule che deve essere sottoposto a scansione prima che si verifichi un controllo timeout. Il valore predefinito è 10000. Un valore più piccolo fa sì che i controlli di timeout si verifichino più spesso.

link di seguito potrebbero essere utili per configurare timeout per HBase scansione:

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

Sulla base delle prime risposte. Ho configurato le proprietà hbase.client.scanner.timeout.period e hbase.rpc.timeout prima di aprire la connessione con il Cluster 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");