[
https://issues.apache.org/jira/browse/TRAFODION-2199?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Suresh Subbiah resolved TRAFODION-2199.
---------------------------------------
Resolution: Fixed
> SELECT on Hive partitioned table causes timestamp mismatch error
> ----------------------------------------------------------------
>
> Key: TRAFODION-2199
> URL: https://issues.apache.org/jira/browse/TRAFODION-2199
> Project: Apache Trafodion
> Issue Type: Bug
> Components: sql-exe
> Affects Versions: 2.1-incubating
> Reporter: Suresh Subbiah
> Assignee: Suresh Subbiah
> Fix For: 2.1-incubating
>
>
> During execute of a select query that includes Hive partitioned tables, this
> error is occasinally seen.
> SQL>execute s;
>
> *** ERROR[8436] Mismatch detected between compiletime and runtime hive table
> definitions. [2016-08-28 22:58:14]
> *** WARNING[8597] Statement was automatically retried 1 time(s). Delay before
> each retry was 0 seconds. See next entry for the error that caused this
> retry. [2016-08-28 22:58:14]
> *** WARNING[8436] Mismatch detected between compiletime and runtime hive
> table definitions. [2016-08-28 22:58:14]
>
> Workarounds :
> cqd HIVE_DATA_MOD_CHECK 'OFF' ; will avoid the problem.
> Alternatively the setting described here (found by Sandhya) will also avoid
> the problem
> https://community.cloudera.com/t5/Batch-SQL-Apache-Hive/CDH-5-3-Hive-staging-directory-has-wrong-default-value/td-p/23585
> http://stackoverflow.com/questions/35176190/hive-queries-generating-mismanaged-staging-directories
> Hi Anoop, Sandhya
>
> In this case both modTSforDir_ and the directory timestamp we get at runtime
> are the same (1470914707).
> This happened because during compile we do go through all files and get the
> max timestamp of all files or directory as Anoop said. However this iteration
> through all files is based on a list of hive_sd_structs. These sd_structs are
> created by parsing a string we get from the java side. This string is similar
> to DESCRIBE EXTENDED <table-name> output, with additional info for each
> partition. Since this string does not contain information about non-partition
> directories like hive-staging, they are excluded from the compile time
> calculation. We need to do something similar at runtime. We cannot accept
> every directory returned by hdfsListDirectory() for a partitioned table as
> valid.
>
> As Eric and Sandhya said I will exclude directory names that include
> “.hive-staging”. I could also insist that the directory name have a “=” sign
> in it. This will be checked into Trafodion by tomorrow. I hope the cost of
> checking so many names/timestamps is not prohibitive. In this case we have
> about 2000 directory names to deal with. The directory names are rather long.
> I suppose in the worst case this is about a million comparisons which could
> add about a millisecond to execution time. Let me know if this is not a good
> idea.
>
> Thanks
> Suresh
>
>
>
>
> At compile time, we get the max time of all files that are part of a table.
> This timestamp is stored in modTSforDir_.
>
> At runtime, we look at the directory timestamp. If this table got
> created/moved
> into that directory and changed the timestamp, that will give a ts mismatch.
> This mismatch will not be fixed even with a recompile as the recompile will
> once again get the max of table files.
>
> Can we tell if the runtime directory timestamp was set to indicate the max of
> all files(hidden or actual) under that dir?
> anoop
>
>
> Looks like there are cases where this staging directory is left over after
> hive uses it internally for it’s own processing. So as Suresh says, this is
> something our code possibly needs to ignore . Seems a bit messy to ignore
> files with this name but if we don’t then we could run into this issue…
> Sandhya
>
>
> It appears that hive itself creates and uses these staging directories and I
> see some problems reported about this.
> Need to look more. It’s not something we directly create ..
>
> Sandhya
>
> If this file has a higher timestamp, then should that have changed the
> timestamp
> of the directory it is under? Or are there cases where it may not, and if
> there
> are, then how do we get to that situation?
>
> Is this file created during a hive insert or part of some hive query.
>
> anoop
>
>
> Specially given this is a hidden file, given it starts with .?
> May be logic should just filter hidden files?
> Eric
>
> Hi,
>
> Yes I agree with everyone that this is a bug. I debugged this and find that
> it might be related to a problem Sandhya told me about a few days ago.
>
> The directory for store_sales table has this timestamp
> ptr_ = 0x7f3c578edc48
> "hdfs://n01.trafodion.local:8020/user/hive/warehouse/tpcds.db/store_sales",
> offset_ = 139897143745608}}
> (gdb) p ((ComTdbOrcScan*)&tdb)->modTSforDir_
> $12 = 1470914707
>
> However this directory had 1820+ directories underneath it. One of them has a
> timestamp that is slightly higher
> Name = 0x74e2ce0
> "hdfs://n01.trafodion.local:8020/user/hive/warehouse/tpcds.db/store_sales/.hive-staging_hive_2016-08-11_19-25-06_941_7211319284354636719-1",
>
> mLastMod = 1470915220,
>
> Typical directories under store_sales directory have this type of name, with
> a literal for partition value. This staging directory seem to be something we
> should ignore. I wonder if we should do that based on name or some other
> criteria.
> /user/hive/warehouse/tpcds.db/store_sales/ss_sold_date_sk=2450816
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)