[ https://issues.apache.org/jira/browse/HIVE-22477?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16972713#comment-16972713 ]
Hive QA commented on HIVE-22477: -------------------------------- | (x) *{color:red}-1 overall{color}* | \\ \\ || Vote || Subsystem || Runtime || Comment || || || || || {color:brown} Prechecks {color} || | {color:green}+1{color} | {color:green} @author {color} | {color:green} 0m 0s{color} | {color:green} The patch does not contain any @author tags. {color} | || || || || {color:brown} master Compile Tests {color} || | {color:blue}0{color} | {color:blue} mvndep {color} | {color:blue} 1m 59s{color} | {color:blue} Maven dependency ordering for branch {color} | | {color:green}+1{color} | {color:green} mvninstall {color} | {color:green} 8m 22s{color} | {color:green} master passed {color} | | {color:green}+1{color} | {color:green} compile {color} | {color:green} 0m 40s{color} | {color:green} master passed {color} | | {color:green}+1{color} | {color:green} checkstyle {color} | {color:green} 0m 25s{color} | {color:green} master passed {color} | | {color:blue}0{color} | {color:blue} findbugs {color} | {color:blue} 0m 37s{color} | {color:blue} common in master has 65 extant Findbugs warnings. {color} | | {color:red}-1{color} | {color:red} findbugs {color} | {color:red} 3m 17s{color} | {color:red} branch/itests/hive-jmh cannot run convertXmlToText from findbugs {color} | | {color:green}+1{color} | {color:green} javadoc {color} | {color:green} 0m 28s{color} | {color:green} master passed {color} | || || || || {color:brown} Patch Compile Tests {color} || | {color:blue}0{color} | {color:blue} mvndep {color} | {color:blue} 0m 30s{color} | {color:blue} Maven dependency ordering for patch {color} | | {color:green}+1{color} | {color:green} mvninstall {color} | {color:green} 1m 2s{color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} compile {color} | {color:green} 0m 40s{color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} javac {color} | {color:green} 0m 40s{color} | {color:green} the patch passed {color} | | {color:red}-1{color} | {color:red} checkstyle {color} | {color:red} 0m 11s{color} | {color:red} itests/hive-jmh: The patch generated 1 new + 0 unchanged - 0 fixed = 1 total (was 0) {color} | | {color:green}+1{color} | {color:green} whitespace {color} | {color:green} 0m 0s{color} | {color:green} The patch has no whitespace issues. {color} | | {color:red}-1{color} | {color:red} findbugs {color} | {color:red} 3m 28s{color} | {color:red} patch/itests/hive-jmh cannot run convertXmlToText from findbugs {color} | | {color:green}+1{color} | {color:green} javadoc {color} | {color:green} 0m 28s{color} | {color:green} the patch passed {color} | || || || || {color:brown} Other Tests {color} || | {color:green}+1{color} | {color:green} asflicense {color} | {color:green} 0m 15s{color} | {color:green} The patch does not generate ASF License warnings. {color} | | {color:black}{color} | {color:black} {color} | {color:black} 23m 56s{color} | {color:black} {color} | \\ \\ || Subsystem || Report/Notes || | Optional Tests | asflicense javac javadoc findbugs checkstyle compile | | uname | Linux hiveptest-server-upstream 3.16.0-4-amd64 #1 SMP Debian 3.16.43-2+deb8u5 (2017-09-19) x86_64 GNU/Linux | | Build tool | maven | | Personality | /data/hiveptest/working/yetus_PreCommit-HIVE-Build-19385/dev-support/hive-personality.sh | | git revision | master / 9678ca1 | | Default Java | 1.8.0_111 | | findbugs | v3.0.1 | | findbugs | http://104.198.109.242/logs//PreCommit-HIVE-Build-19385/yetus/branch-findbugs-itests_hive-jmh.txt | | checkstyle | http://104.198.109.242/logs//PreCommit-HIVE-Build-19385/yetus/diff-checkstyle-itests_hive-jmh.txt | | findbugs | http://104.198.109.242/logs//PreCommit-HIVE-Build-19385/yetus/patch-findbugs-itests_hive-jmh.txt | | modules | C: common itests/hive-jmh U: . | | Console output | http://104.198.109.242/logs//PreCommit-HIVE-Build-19385/yetus.txt | | Powered by | Apache Yetus http://yetus.apache.org | This message was automatically generated. > Avro logical type timestamp conversion is slow > ---------------------------------------------- > > Key: HIVE-22477 > URL: https://issues.apache.org/jira/browse/HIVE-22477 > Project: Hive > Issue Type: Improvement > Affects Versions: 3.1.0 > Environment: Hive 3.1.0 > Reporter: Sanjar Akhmedov > Priority: Major > Labels: Performance > Attachments: HIVE-22477.1.patch, HIVE-22477.2.patch, flamegraph.svg > > > We have an avro backed table with hundreds of billions timestamps. Simple > {{SELECT COUNT(*) FROM t}} query takes many hours to complete in version > 3.1.0 versus tens of minutes in version 1.2.1. > Looking at the attached flamegraph of one of the yarn containers, hive is > spending most of the time throwing exceptions during avro timestamp > conversion. > It is generally good idea to avoid throwing exceptions in performance > critical sections, as exception creation is an expensive operation, and > potentially repeating for many rows/values in a query can have drastic > performance implications. > Afaics there is no reason to convert numeric timestamp to a string and enter > very lenient > {{org.apache.hadoop.hive.common.type.TimestampTZUtil#parse(java.lang.String, > java.time.ZoneId)}} to do timezone conversion. > This patch changes the conversion of {{Date}} and {{Timestamp}} to > {{TimestampTZ}} such that it doesn't invoke {{parse}}. > JMH timings before: > {code:java} > Benchmark Mode Cnt Score Error > Units > TimestampTZUtilBench.convertDate avgt 2 10091.990 > ns/op > TimestampTZUtilBench.convertTimestamp avgt 2 10657.596 > ns/op > {code} > JMH timings after: > {code:java} > Benchmark Mode Cnt Score Error Units > TimestampTZUtilBench.convertDate avgt 2 48.371 ns/op > TimestampTZUtilBench.convertTimestamp avgt 2 51.170 ns/op > {code} > JMH stack profile before: > {code:java} > Secondary result > "org.apache.hive.benchmark.common.TimestampTZUtilBench.convertDate:·stack": > Stack profiler: > ....[Thread state > distributions].................................................................... > 100.0% RUNNABLE > ....[Thread state: > RUNNABLE]........................................................................ > 97.4% 97.4% java.lang.Throwable.fillInStackTrace > 1.6% 1.6% java.time.format.DateTimeFormatter.parse > 0.2% 0.2% java.time.ZoneId.from > 0.1% 0.1% java.util.HashMap.hash > 0.1% 0.1% java.lang.Number.<init> > 0.1% 0.1% > java.time.format.DateTimeFormatterBuilder$CompositePrinterParser.format > 0.1% 0.1% java.lang.StringBuilder.append > 0.1% 0.1% java.util.HashMap.putVal > 0.1% 0.1% java.lang.String.valueOf > 0.1% 0.1% java.util.regex.Pattern$BmpCharProperty.match > 0.2% 0.2% <other> > ... > Secondary result > "org.apache.hive.benchmark.common.TimestampTZUtilBench.convertTimestamp:·stack": > Stack profiler: > ....[Thread state > distributions].................................................................... > 100.0% RUNNABLE > ....[Thread state: > RUNNABLE]........................................................................ > 96.5% 96.5% java.lang.Throwable.fillInStackTrace > 1.0% 1.0% java.time.format.DateTimeFormatter.parse > 0.6% 0.6% org.apache.hadoop.hive.common.type.TimestampTZUtil.parse > 0.4% 0.4% java.time.ZoneId.from > 0.2% 0.2% > java.time.format.DateTimeFormatterBuilder$CompositePrinterParser.format > 0.2% 0.2% java.time.format.Parsed.resolveFields > 0.2% 0.2% java.lang.String.valueOf > 0.1% 0.1% java.lang.StringBuilder.append > 0.1% 0.1% java.util.HashMap.hash > 0.1% 0.1% java.time.format.DateTimeParseContext.toResolved > 0.6% 0.6% <other> > {code} > JMH stack profile after: > {code:java} > Secondary result > "org.apache.hive.benchmark.common.TimestampTZUtilBench.convertDate:·stack": > Stack profiler: > ....[Thread state > distributions].................................................................... > 100.0% RUNNABLE > ....[Thread state: > RUNNABLE]........................................................................ > 91.6% 91.6% java.time.ZonedDateTime.ofInstant > 8.0% 8.0% > org.apache.hive.benchmark.common.generated.TimestampTZUtilBench_convertDate_jmhTest.convertDate_avgt_jmhStub > 0.1% 0.1% java.time.zone.ZoneRules.<init> > 0.1% 0.1% java.time.LocalDateTime.ofEpochSecond > 0.1% 0.1% org.apache.hadoop.hive.common.type.TimestampTZUtil.convert > 0.1% 0.1% java.time.LocalDate.ofEpochDay > 0.1% 0.1% java.time.ZonedDateTime.create > ... > Secondary result > "org.apache.hive.benchmark.common.TimestampTZUtilBench.convertTimestamp:·stack": > Stack profiler: > ....[Thread state > distributions].................................................................... > 100.0% RUNNABLE > ....[Thread state: > RUNNABLE]........................................................................ > 90.7% 90.7% java.time.ZonedDateTime.ofInstant > 9.0% 9.0% > org.apache.hive.benchmark.common.generated.TimestampTZUtilBench_convertTimestamp_jmhTest.convertTimestamp_avgt_jmhStub > 0.1% 0.1% java.time.zone.ZoneRules.<init> > 0.1% 0.1% > org.apache.hive.benchmark.common.generated.TimestampTZUtilBench_convertTimestamp_jmhTest.convertTimestamp_AverageTime > 0.1% 0.1% java.time.LocalDateTime.ofEpochSecond > 0.1% 0.1% java.time.LocalDate.ofEpochDay > 0.1% 0.1% java.time.ZonedDateTime.create > {code} -- This message was sent by Atlassian Jira (v8.3.4#803005)