Параллельные запросы Apache phoenix завершаются ошибкой с исключением

Мы пытаемся выполнить ряд операций, таких как SELECT -> сохранить ключ строки в коллекцию -> затем разделить коллекцию на каждый рабочий поток -> Каждый поток снова создал соединение с использованием phoenix jdbc -> выполнить SELECT, затем в зависимости от результата UPSERT в другой стол феникс.

Я использую ExecutorService с фиксированным пулом потоков из 4. Я вижу исключения, как показано ниже.

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

Но если я использую размер пула 2 или меньше, он работает нормально. Мне было интересно, есть ли свойство на стороне клиента, которое можно изменить?


person hopeIsTheonlyWeapon    schedule 09.12.2016    source источник
comment
Это можно закрыть. Это исправляет добавление значения для phoenix.spool.directory в hbase-site.xml.   -  person hopeIsTheonlyWeapon    schedule 16.12.2016


Ответы (2)


В моем случае я решил это, используя приведенную ниже зависимость в pom.xml.

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

Просто чтобы сообщить вам, у меня есть версия Hbase: 1.1, а phoenix - 4.7.

person Indrajeet Gour    schedule 15.08.2017

Это исправляет phoenix.spool.directory в hbase-site.xml. Спасибо

person hopeIsTheonlyWeapon    schedule 16.12.2016