2016-12-09 5 views
0

Wir versuchen eine Reihe von Operationen wie SELECT -> Zeilenschlüssel in eine Sammlung speichern -> dann die Sammlung in jeden Worker-Thread aufteilen -> Jeder Thread erstellt Verbindung mit Phoenix jdbc -> ausführen SELECT dann je nach Ergebnis UPSERT in eine andere Phoenix-Tabelle.Apache Phoenix gleichzeitige Abfragen Fehler mit Ausnahme

Ich benutze ExecutorService mit einem festen Thread-Pool von 4 Ich sehe Ausnahmen wie unten.

org.apache.phoenix.exception.PhoenixIOException: org.apache.phoenix.exception.PhoenixIOException: The system cannot find the path specified 
     at org.apache.phoenix.util.ServerUtil.parseServerException(ServerUtil.java:108) 
     at org.apache.phoenix.iterate.BaseResultIterators.getIterators(BaseResultIterators.java:538) 
     at org.apache.phoenix.iterate.ConcatResultIterator.getIterators(ConcatResultIterator.java:50) 
     at org.apache.phoenix.iterate.ConcatResultIterator.currentIterator(ConcatResultIterator.java:97) 
     at org.apache.phoenix.iterate.ConcatResultIterator.next(ConcatResultIterator.java:117) 
     at org.apache.phoenix.jdbc.PhoenixResultSet.next(PhoenixResultSet.java:764) 
     at com.vonage.test.PopulateStagingGWCDRWorker.run(MyCode.java:74) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
     at java.lang.Thread.run(Thread.java:745) 
Caused by: java.util.concurrent.ExecutionException: org.apache.phoenix.exception.PhoenixIOException: The system cannot find the path specified 
     at java.util.concurrent.FutureTask.report(FutureTask.java:122) 
     at java.util.concurrent.FutureTask.get(FutureTask.java:206) 
     at org.apache.phoenix.iterate.BaseResultIterators.getIterators(BaseResultIterators.java:534) 
     ... 8 more 
Caused by: org.apache.phoenix.exception.PhoenixIOException: The system cannot find the path specified 
     at org.apache.phoenix.util.ServerUtil.parseServerException(ServerUtil.java:108) 
     at org.apache.phoenix.iterate.SpoolingResultIterator.<init>(SpoolingResultIterator.java:122) 
     at org.apache.phoenix.iterate.SpoolingResultIterator.<init>(SpoolingResultIterator.java:73) 
     at org.apache.phoenix.iterate.SpoolingResultIterator$SpoolingResultIteratorFactory.newIterator(SpoolingResultIterator.java:67) 
     at org.apache.phoenix.iterate.ChunkedResultIterator.<init>(ChunkedResultIterator.java:92) 
     at org.apache.phoenix.iterate.ChunkedResultIterator$ChunkedResultIteratorFactory.newIterator(ChunkedResultIterator.java:72) 
     at org.apache.phoenix.iterate.ParallelIterators$1.call(ParallelIterators.java:92) 
     at org.apache.phoenix.iterate.ParallelIterators$1.call(ParallelIterators.java:83) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
     ... 3 more 
Caused by: java.io.IOException: The system cannot find the path specified 
     at java.io.WinNTFileSystem.createFileExclusively(Native Method) 
     at java.io.File.createTempFile(File.java:2024) 
     at org.apache.commons.io.output.DeferredFileOutputStream.thresholdReached(DeferredFileOutputStream.java:176) 
     at org.apache.phoenix.iterate.SpoolingResultIterator$1.thresholdReached(SpoolingResultIterator.java:98) 
     at org.apache.commons.io.output.ThresholdingOutputStream.checkThreshold(ThresholdingOutputStream.java:224) 
     at org.apache.commons.io.output.ThresholdingOutputStream.write(ThresholdingOutputStream.java:92) 
     at java.io.DataOutputStream.writeByte(DataOutputStream.java:153) 
     at org.apache.hadoop.io.WritableUtils.writeVLong(WritableUtils.java:273) 
     at org.apache.hadoop.io.WritableUtils.writeVInt(WritableUtils.java:253) 
     at org.apache.phoenix.util.TupleUtil.write(TupleUtil.java:146) 
     at org.apache.phoenix.iterate.SpoolingResultIterator.<init>(SpoolingResultIterator.java:107) 
     ... 10 more 
enter code here 

Aber wenn ich eine Poolgröße von 2 oder weniger verwende, funktioniert es gut. Ich habe mich gefragt, ob es eine Eigenschaft auf der Client-Seite gibt, die geändert werden kann?

+0

Dieses geschlossen werden kann. Das Hinzufügen des Werts für phoenix.spool.directory in der hbase-site.xml behebt dies. – hopeIsTheonlyWeapon

Antwort

1

ich meinem Fall habe ich gelöst dies durch unten Abhängigkeit in pom.xml mit

<dependency> 
      <groupId>org.apache.hbase</groupId> 
      <artifactId>hbase-protocol</artifactId> 
      <version>1.1.11</version> 
</dependency> 

Nur Sie zu aktualisieren Ich habe Hbase Version: 1.1 und Phoenix ist mit 4,7