So I did some debugging and found the code responsible for this *.tmp files 
being created.
https://github.com/hortonworks/phoenix-release/blob/HDP-2.4.0.0-tag/phoenix-core/src/main/java/org/apache/phoenix/iterate/MappedByteBufferQueue.java#L304
--org.apache.phoenix.iterate.MappedByteBufferQueue$MappedByteBufferSegmentQueue
--
private void flush(T entry) throws IOException {  Queue<T> inMemQueue = 
getInMemoryQueue();  int resultSize = sizeOf(entry);  maxResultSize = 
Math.max(maxResultSize, resultSize);  totalResultSize = hasMaxQueueSize ? 
maxResultSize * inMemQueue.size() : (totalResultSize + resultSize);  if 
(totalResultSize >= thresholdBytes) {    this.file = 
File.createTempFile(UUID.randomUUID().toString(), null);    RandomAccessFile af 
= new RandomAccessFile(file, "rw");    FileChannel fc = af.getChannel();    int 
writeIndex = 0;    mappingSize = Math.min(Math.max(maxResultSize, 
DEFAULT_MAPPING_SIZE), totalResultSize);    MappedByteBuffer writeBuffer = 
fc.map(MapMode.READ_WRITE, writeIndex, mappingSize);
--

Is any fix or work-around, so that these temp files don't exhaust my free disk 
space?

      From: 
 To: "user@phoenix.apache.org" <user@phoenix.apache.org>;
 Sent: Tuesday, 19 April 2016, 12:00
 Subject: Re: Getting swamped with Phoenix *.tmp files on SELECT.
   
Would it be possible for you to upgrade to the latest version of Phoenix (4.7)? 
It is likely that this bug has been fixed in the latest release. One of the 
possibly related JIRA that was fixed in 4.7 is PHOENIX-2556. Although, Maryanne 
would be the best person to comment on this. 
Maryanne, would you mind taking a look?
On Mon, Apr 18, 2016 at 1:43 PM, <marks1900-pos...@yahoo.com.au> wrote:

I have narrowed this issue down to select statement below.  When I have 
iterated through the query results of this select statement, I do ensure that 
the JDBC close statements on my ResultSet, Statement and Connection are called.

For now, I am go with the suggested work-around and implement something like 
tmpwatch as a Java scheduled service.

Also, I think I found someone else who seems to be having this style of issue 
in Phoenix:  https://issues.apache.org/jira/browse/PHOENIX-1395

--
String sql =  "SELECT TR.ID"    + "  ,TR.CLIENT_ID"    + "  ,TR.BRAND_ID"    + 
"  ,TR.SITE_ID"    + "  ,TR.EMAIL"    + "  ,COUNT(TS2.ID) + 
MAX(TR.repeatBrandShortVisit) AS repeatBrandShortVisit"    + "  ,SUM(CASE WHEN 
TS2.SESSION_TYPE = 1 THEN 1 ELSE 0 END) + MAX(TR.repeatBrandLongVisit) AS 
repeatBrandLongVisit"    + "  ,SUM(CASE WHEN TS2.SITE_ID = TR.SITE_ID THEN 1 
ELSE 0 END) + MAX(TR.repeatSiteShortVisit) AS repeatSiteShortVisit"    + "  
,SUM(CASE WHEN TS2.SITE_ID = TR.SITE_ID AND TS2.SESSION_TYPE = 1 THEN 1 ELSE 0 
END) + MAX(TR.repeatSiteLongVisit) AS repeatSiteLongVisit"    + "  FROM ("    + 
"  SELECT TSE.ID"    + "      ,TSE.CLIENT_ID"    + "      ,TSE.BRAND_ID"    + " 
     ,TSE.SITE_ID"    + "      ,TSE.EMAIL"    + "      ,COUNT(TS1.ID) AS 
repeatBrandShortVisit"    + "      ,SUM(CASE WHEN TS1.SESSION_TYPE = 1 THEN 1 
ELSE 0 END) AS repeatBrandLongVisit"    + "      ,SUM(CASE WHEN TS1.SITE_ID = 
TSE.SITE_ID THEN 1 ELSE 0 END) AS repeatSiteShortVisit"    + "      ,SUM(CASE 
WHEN TS1.SITE_ID = TSE.SITE_ID AND TS1.SESSION_TYPE = 1 THEN 1 ELSE 0 END) AS 
repeatSiteLongVisit"    + "  FROM ("    + "      SELECT ID"    + "          
,CLIENT_ID"    + "          ,BRAND_ID"    + "          ,SITE_ID"    + "         
 ,EMAIL"    + "      FROM user.SESSION_EXPIRATION "    + "      WHERE 
NEXT_CHECK <= CURRENT_TIME()"    + "      LIMIT " + batchSize    + "      ) AS 
TSE"    + "  LEFT OUTER JOIN user.SESSION TS1"    + "      ON TS1.CLIENT_ID = 
TSE.CLIENT_ID"    + "      AND TS1.BRAND_ID = TSE.BRAND_ID"    + "  GROUP BY 
TSE.ID"    + "      ,TSE.CLIENT_ID"    + "      ,TSE.BRAND_ID"    + "      
,TSE.SITE_ID"    + "      ,TSE.EMAIL"    + "  ) AS TR"    + "  LEFT OUTER JOIN 
user.SESSION TS2"    + "      ON TS2.EMAIL = TR.EMAIL"    + "      AND 
TS2.BRAND_ID = TR.BRAND_ID"    + "  GROUP BY TR.ID"    + "  ,TR.CLIENT_ID"    + 
"  ,TR.BRAND_ID"    + "  ,TR.SITE_ID"    + "  ,TR.EMAIL";

--

      From: Samarth Jain <sama...@apache.org>
Cc: "user@phoenix.apache.org" <user@phoenix.apache.org>
 Sent: Monday, 18 April 2016, 15:39
 Subject: Re: Getting swamped with Phoenix *.tmp files on SELECT.
   
Marks,
FWIW, we had a problem with tmp files left over in case of failures - 
https://issues.apache.org/jira/browse/PHOENIX-1448. But this has been fixed 
since 4.2.1 release. To help us, can you post a sample query where you are 
seeing tmp files left over? Are you sure the application is cleanly closing, in 
a try-finally block, all the JDBC statements, result sets and phoenix 
connections? 
On Mon, Apr 18, 2016 at 8:54 AM, <Mark> wrote:

Currently I am running out of disk space as a direct result of these spool temp 
files (350GB +), any ideas on how to address this?  These .tmp files never seem 
to be cleaned up after each query.  Is there any work-around?

      From: Samarth Jain <samarth.j...@gmail.com>
 To: "user@phoenix.apache.org" <user@phoenix.apache.org> 
Sent: Friday, 15 April 2016, 17:00
 Subject: Re: Getting swamped with Phoenix *.tmp files on SELECT.
   
FWIW, with phoenix 4.7, we no longer need to spool results on the client. 
Instead we rely on pacing scanners as and when needed. To utitlize the feature 
though, you would need to make sure that you are using HBase versions that are 
at least as new as:
HBase 0.98.17 for HBase 0.98HBase 1.0.3 for HBase 1.0HBase 1.1.3 for HBase 1.1 
and beyond 

On Fri, Apr 15, 2016 at 1:51 PM, Alok Singh <a...@cloudability.com> wrote:

We ran into something similar, here is the ticket 
https://issues.apache.org/jira/browse/PHOENIX-2685The work around that 
mitigated this issue for us was to lower the value of 
phoenix.query.spoolThresholdBytes to 10 MB. It is counter intuitive, but, due 
to the way the spooling iterator interacts with global memory manager, it works.
Alok

Alok
a...@cloudability.com
On Fri, Apr 15, 2016 at 1:42 PM, <Mark> wrote:

I am using an Ambari HDP distribution of the Phoenix client 
(/usr/hdp/2.3.4.0-3485/phoenix/phoenix-4.4.0.2.3.4.0-3485-client.jar), and to 
close database connections I am using the standard Java JDBC try-with-resources 
process  
(http://www.mastertheboss.com/jboss-server/jboss-datasource/using-try-with-resources-to-close-database-connections
 , 
https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html).

      From: Samarth Jain
Sent: Friday, 15 April 2016, 16:03
 Subject: Re: Getting swamped with Phoenix *.tmp files on SELECT.
  
What version of phoenix are you using? Is the application properly closing 
statements and result sets?

On Friday, April 15, 2016, wrote:

I am running into an issue where a huge number temporary files are being 
created in my C:\Users\myuser\AppData\Local\Temp folder, they are around 20MB 
big and never get cleaned up.  These *.tmp files grew to around 200GB before I 
stopped the server.
Example file names:
7a0967de-9dff-432b-bcfe-de30bc630add5176202498513378657.tmp
813e40e1-afa9-4847-919c-7c55f95f8a475501154042645376476.tmp
1329da43-561d-4e68-9120-56bd650a6ac98781585316402092121.tmp

Currently, I have my Phoenix Client jar deployed to Wildfly 10 as described 
here:  https://docs.jboss.org/author/display/TEIID/Phoenix+Data+Sources
These *.tmp files only appear when I run SELECT queries.
Any help would be appreciated.


   





   



   



  

Reply via email to