Return-Path: X-Original-To: apmail-hive-user-archive@www.apache.org Delivered-To: apmail-hive-user-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id E2BB310B5F for ; Fri, 28 Aug 2015 07:54:08 +0000 (UTC) Received: (qmail 42085 invoked by uid 500); 28 Aug 2015 07:54:07 -0000 Delivered-To: apmail-hive-user-archive@hive.apache.org Received: (qmail 42017 invoked by uid 500); 28 Aug 2015 07:54:07 -0000 Mailing-List: contact user-help@hive.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: user@hive.apache.org Delivered-To: mailing list user@hive.apache.org Received: (qmail 42006 invoked by uid 99); 28 Aug 2015 07:54:07 -0000 Received: from Unknown (HELO spamd1-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 28 Aug 2015 07:54:07 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd1-us-west.apache.org (ASF Mail Server at spamd1-us-west.apache.org) with ESMTP id 9E912EEFCC for ; Fri, 28 Aug 2015 07:54:06 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd1-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 1.713 X-Spam-Level: * X-Spam-Status: No, score=1.713 tagged_above=-999 required=6.31 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, HTML_FONT_LOW_CONTRAST=0.001, HTML_MESSAGE=3, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-1.427, SPF_PASS=-0.001, T_KAM_HTML_FONT_INVALID=0.01] autolearn=disabled Authentication-Results: spamd1-us-west.apache.org (amavisd-new); dkim=pass (1024-bit key) header.d=163.com Received: from mx1-us-west.apache.org ([10.40.0.8]) by localhost (spamd1-us-west.apache.org [10.40.0.7]) (amavisd-new, port 10024) with ESMTP id mROXByRFufYs for ; Fri, 28 Aug 2015 07:54:03 +0000 (UTC) Received: from m12-18.163.com (m12-18.163.com [220.181.12.18]) by mx1-us-west.apache.org (ASF Mail Server at mx1-us-west.apache.org) with ESMTP id BE42420647 for ; Fri, 28 Aug 2015 07:54:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=Date:From:Subject:Mime-Version:Message-ID; bh=gN0ky KpxsQ4JdaN8w2ONK0atMi30dYaEGsSOudZS/VU=; b=LI+bLc6sbf9fjVRvceMrs M3cw/KNybBwwvKYMzXo5cg7wxVs9q4hk0PH+jVgsBfnxV3V3yH4B5A6KulX99XIX ql5I/1lUJHZMT5+5OBt+d09VPXoDVafE5sjPntxYUYETK5qN6Ko6B3TDbIvjeLXb 7vCd+sFdvxw2Zbo2YYAujo= Received: from NHSH1MNB72514 (unknown [203.110.175.179]) by smtp14 (Coremail) with SMTP id EsCowEBJckeOE+BV9YEsAw--.27936S2; Fri, 28 Aug 2015 15:53:52 +0800 (CST) Date: Fri, 28 Aug 2015 15:53:52 +0800 From: "r7raul1984@163.com" To: user Subject: Re: Re: sql mapjoin very slow References: , <2015082813032067249616@163.com> X-Priority: 3 X-Has-Attach: no X-Mailer: Foxmail 7, 2, 5, 136[cn] Mime-Version: 1.0 Message-ID: <2015082815535080732321@163.com> Content-Type: multipart/related; boundary="----=_001_NextPart866105206163_=----" X-CM-TRANSID: EsCowEBJckeOE+BV9YEsAw--.27936S2 X-Coremail-Antispam: 1Uf129KBjvJXoW7Kw4xCr47KrWUuw13KF18AFb_yoW8Cr1kpF W3Jr9xZF95Xa4xGw4kt3W7WrW0gryxJa42qw47Gw48ta4rCFyUZ3Zrta1F9FW2gFyUtw43 trZ0qFyIv345uaDanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07jUKsUUUUUU= X-Originating-IP: [203.110.175.179] X-CM-SenderInfo: 3uxut3borzmki6rwjhhfrp/1tbiVBBkzlUL4hPM+AAAs1 This is a multi-part message in MIME format. ------=_001_NextPart866105206163_=---- Content-Type: multipart/alternative; boundary="----=_002_NextPart151376475586_=----" ------=_002_NextPart151376475586_=---- Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 SSBmb3VuZCBhIG1ldGhvZCBpbiBIYXNoTWFwV3JhcHBlciBjbGFzcyAuICBJIHRoaW5rIGhpdmUg d2lsbCB1c2Ugc3RhdGlzdGljcyAgdG8gYWRqdXN0IHRocmVzaG9sZCBhdXRvbWF0aWNhbGx5Lg0K cHVibGljIHN0YXRpYyBpbnQgY2FsY3VsYXRlVGFibGVTaXplKCANCmZsb2F0IGtleUNvdW50QWRq LCBpbnQgdGhyZXNob2xkLCBmbG9hdCBsb2FkRmFjdG9yLCBsb25nIGtleUNvdW50KSB7IA0KaWYg KGtleUNvdW50ID49IDAgJiYga2V5Q291bnRBZGogIT0gMCkgeyANCi8vIFdlIGhhdmUgc3RhdGlz dGljcyBmb3IgdGhlIHRhYmxlLiBTaXplIGFwcHJvcHJpYXRlbHkuIA0KdGhyZXNob2xkID0gKGlu dClNYXRoLmNlaWwoa2V5Q291bnQgLyAoa2V5Q291bnRBZGogKiBsb2FkRmFjdG9yKSk7IA0KfSAN CkxPRy5pbmZvKCJLZXkgY291bnQgZnJvbSBzdGF0aXN0aWNzIGlzICIgKyBrZXlDb3VudCArICI7 IHNldHRpbmcgbWFwIHNpemUgdG8gIiArIHRocmVzaG9sZCk7IA0KcmV0dXJuIHRocmVzaG9sZDsg DQp9DQpJIGhhdmUgYSBxdWVzdGlvbi4gSSB1c2UgaGl2ZSAxLjEuMCAsc28gaGl2ZS5zdGF0cy5k YmNsYXNzIGRlZmF1bHQgdmFsdWUgaXMgZnMuIE1lYW4gc3RvcmUgc3RhdGlzdGljcyBpbiBsb2Nh bCBmaWxlc3lzdGVtLiAgQW55IG9uZSBjYW4gdGVsbCB3aGF0IGlzIHRoZSAgZmlsZSBwYXRoIHRv IHN0b3JlIHN0YXRpc3RpY3MgPw0KDQoNCg0KcjdyYXVsMTk4NEAxNjMuY29tDQogDQpGcm9tOiBy N3JhdWwxOTg0QDE2My5jb20NCkRhdGU6IDIwMTUtMDgtMjggMTM6MDMNClRvOiB1c2VyDQpTdWJq ZWN0OiBSZTogUmU6IHNxbCBtYXBqb2luIHZlcnkgc2xvdw0KSSBpbmNyZWFzZSBoaXZlLmhhc2h0 YWJsZS5pbml0aWFsQ2FwYWNpdHkgdG8gMTAwMDAwMCBhbmQgZGVjcmVhc2UgaGl2ZS5oYXNodGFi bGUubG9hZGZhY3RvciB0byAwLjUgIC4gIFRoZSBxdWVyeSBydW4gZmFzdGVyLg0KDQoNCg0Kcjdy YXVsMTk4NEAxNjMuY29tDQogDQpGcm9tOiBTZXJnZXkgU2hlbHVraGluDQpEYXRlOiAyMDE1LTA4 LTI4IDA5OjU2DQpUbzogdXNlcg0KU3ViamVjdDogUmU6IHNxbCBtYXBqb2luIHZlcnkgc2xvdw0K SXMgdGhlIHNtYWxsLXNpZGUgdGFibGUgbGFyZ2UsIGRvZXMgaXQgaGF2ZSBhIGxvdCBvZiByb3dz IGZvciB0aGUgc2FtZSBrZXlzLCBvciBkb2VzIGl0IGhhdmUgYSBsb3Qgb2Ygc2tldz8NCkFyZSB0 aGVyZSBsb3RzIG9mIG1pc3NlcyAod2hlcmUgdGhlcmXigJlkIGJlIG5vIHZhbHVlIGluIHRoZSBz bWFsbCB0YWJsZSBmb3IgdGhlIGxhcmdlIHRhYmxlIHZhbHVlKT8NCg0KSWYgeW91IGhhdmUgZW5v dWdoIG1lbW9yeSB5b3UgY2FuIHRyeSBpbmNyZWFzaW5nIGluaXRpYWwgc2l6ZSBhbmQgZGVjcmVh c2luZyBsb2FkIGZhY3Rvci4gQWx0aG91Z2ggd2l0aG91dCBsb3ctbGV2ZWwgZGVidWdnaW5nIGl0 4oCZcyBoYXJkIHRvIHRlbGwgaWYgdGhlIGlzc3VlIGlzIG5vdCBvYnZpb3VzIChJLmUgdGhlIGFi b3ZlKS4NCklmIHRoZXJl4oCZcyBubyBvYnZpb3VzIHByb2JsZW0geW91IG1pZ2h0IGNvbnNpZGVy IG5vdCB1c2luZyBtYXAgam9pbi4NCg0KDQpGcm9tOiAicjdyYXVsMTk4NEAxNjMuY29tIiA8cjdy YXVsMTk4NEAxNjMuY29tPg0KUmVwbHktVG86IHVzZXIgPHVzZXJAaGl2ZS5hcGFjaGUub3JnPg0K RGF0ZTogVGh1cnNkYXksIEF1Z3VzdCAyNywgMjAxNSBhdCAxODo1MQ0KVG86IHVzZXIgPHVzZXJA aGl2ZS5hcGFjaGUub3JnPg0KU3ViamVjdDogUmU6IFJlOiBzcWwgbWFwam9pbiB2ZXJ5IHNsb3cN Cg0KSSB1c2UgTVIuIA0KTXkgbWFwam9pbiBjb25maWcgYXMgc2hvd2VkIGluIGZvbGxvdyBwaWN0 dXJlOg0KDQoNCg0KcjdyYXVsMTk4NEAxNjMuY29tDQogDQpGcm9tOiBTZXJnZXkgU2hlbHVraGlu DQpEYXRlOiAyMDE1LTA4LTI4IDA5OjIxDQpUbzogdXNlcg0KU3ViamVjdDogUmU6IHNxbCBtYXBq b2luIHZlcnkgc2xvdw0KQXJlIHlvdSB1c2luZyBNUiBhbmQgVGV6PyBZb3UgY291bGQgdHJ5IG9w dGltaXplZCBoYXNoIHRhYmxlIGluIGNhc2Ugb2YgVGV6LCBhbHRob3VnaCBpdOKAmXMgc3VwcG9z ZWQgdG8gaW1wcm92ZSBtZW1vcnksIG5vdCBuZWNlc3NhcmlseSBwZXJmLg0KDQpDYW4geW91IGFs c28gc2hhcmUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBxdWVyeSBhbmQgZGF0YT8gSXQgaXMgc3Vy cHJpc2luZyB0byBzZWUgc28gbXVjaCB0aW1lIGZvciBIYXNoTWFwLmdldC4NCg0KRnJvbTogInI3 cmF1bDE5ODRAMTYzLmNvbSIgPHI3cmF1bDE5ODRAMTYzLmNvbT4NClJlcGx5LVRvOiB1c2VyIDx1 c2VyQGhpdmUuYXBhY2hlLm9yZz4NCkRhdGU6IFRodXJzZGF5LCBBdWd1c3QgMjcsIDIwMTUgYXQg MTg6MDMNClRvOiB1c2VyIDx1c2VyQGhpdmUuYXBhY2hlLm9yZz4NClN1YmplY3Q6IHNxbCBtYXBq b2luIHZlcnkgc2xvdw0KDQoNCldoZW4gSSBlbmFibGUgbWFwam9pbiAsSSBzZWUgTWFwam9pbiB0 YXNrIHJ1biB2ZXJ5IHNsb3cuIE15IGVudnJpb21lbnQgaXMgaGFkb29wIDIuMy4wIGhpdmUgMS4x LjAuDQoNCk15IGF0dGFjaCBpcyAgb25lIG1hcCBoaXZlIGxvZyBhbmQgdGhpcyBtYXAncyB4cHJv ZiBsb2cuDQoNCkluIG1hcCB4cHJvZiBsb2cgLEkgc2VlIA0KQ29tcGlsZWQgKyBuYXRpdmUgTWV0 aG9kIA0KOTIuMyUgNjQzNTI3ICsgMCBqYXZhLnV0aWwuSGFzaE1hcC5nZXQgDQoyLjglIDE5ODU2 ICsgMCBqYXZhLnV0aWwuSGFzaE1hcC5wdXQgDQoxLjIlIDg2MjMgKyAwIG9yZy5hcGFjaGUuaGFk b29wLmhpdmUucWwuZXhlYy5wZXJzaXN0ZW5jZS5IYXNoTWFwV3JhcHBlciRHZXRBZGFwdG9yLnNl dEZyb21Sb3cgDQowLjElIDk1MyArIDAgb3JnLmFwYWNoZS5oYWRvb3AuaGl2ZS5xbC5leGVjLkV4 cHJOb2RlQ29sdW1uRXZhbHVhdG9yLl9ldmFsdWF0ZSANCjAuMSUgNTc2ICsgMCBvcmcuYXBhY2hl LmhhZG9vcC5oaXZlLnNlcmRlMi5vYmplY3RpbnNwZWN0b3IuT2JqZWN0SW5zcGVjdG9yVXRpbHMu Y29weVRvU3RhbmRhcmRPYmplY3QNCg0KDQoNCnI3cmF1bDE5ODRAMTYzLmNvbQ0K ------=_002_NextPart151376475586_=---- Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable =0A
= I found a method in=  HashMapWrapper class .  I think hive will= use statistics  to adjust <= span style=3D"font-size: 10.5pt; line-height: 1.5; background-color: windo= w;">threshold automatically.
<= /span>public static in= t calculateTableSize(=0A
float keyCountAdj, int threshold, float = loadFactor, long keyCount) {=0A
if (keyCount >=3D 0 && k= eyCountAdj !=3D 0) {=0A
// We have statistics for the table. Size= appropriately.=0A
threshold =3D (int)Math.ceil(keyCount / (keyCo= untAdj * loadFactor));=0A
}=0A
LOG.info("Key count from stat= istics is " + keyCount + "; setting map size to " + threshold);=0A
= return threshold;=0A
}
=0A
I have a question. I use hive 1.1.0 ,so hive.stats.dbclass default = value is fs. Mean store statistics in local filesystem.  Any one can tell what is the  file path to= store statistics = ?


=0A
r7raul1984@163.com
= =0A
 
From: <= a href=3D"mailto:r7raul1984@163.com">r7raul1984@163.com
D= ate: 2015-08-28 13:03
To: user
Subject: Re: Re= : sql mapjoin very slow
=0A
I increase hive.hashtable.initialCapacity to 1000000 and de= crease hive.hashtable.loadfactor to 0.5  .  The query run faster= .
=0A


=0A
r7raul1984@163.com<= /div>
=0A
 
=
Date: 2015-08-28 09:56
To: user
<= b>Subject: Re: sql mapjoin very slow
=0A
Is the small-side tab= le large, does it have a lot of rows for the same keys, or does it have a = lot of skew?
=0A
Are there lots of= misses (where there=E2=80=99d be no value in the small table for the larg= e table value)?
=0A

=0A
= =0A
If you have enough memory you can try increasing = initial size and decreasing load factor. Although without low-level debugg= ing it=E2=80=99s hard to tell if the issue is not obvious (I.e the above).=
=0A
If there=E2=80=99s no obvious proble= m you might consider not using map join.
=0A

=0A
=0A

=0A=0A=0A
=0AFrom: "r7raul1984@163.co= m" <r7raul1984@163.com>= ;
=0AReply-To: user <user@hive.apache.org>
=0ADate: Thursday, August 27, 2015 at 18:51=
=0ATo: user <user@hive.apache.org>
=0ASubject: Re: Re: sql mapjoin very slow
=0A=
=0A

=0A
=0A
=0A
=0A
I use MR.&= nbsp;
=0A
My mapjoin config as showed in follow picture:
=0A=
=0A
=0A

=0A=
=0A
=0A
=0A=0A
=0A
=0A
&= nbsp;
=0A
=0A
=0A=0A
D= ate: 2015-08-28 09:21
=0A
To: user
=0A
Subject:&nbs= p;Re: sql mapjoin very slow
=0A
=0A
=0A
=0A
=0A
Are you using MR and Tez? You could tr= y optimized hash table in case of Tez, although it=E2=80=99s supposed to i= mprove memory, not necessarily perf.
=0A

=0A
=0A
Can= you also share characteristics of the query and data? It is surprising to= see so much time for HashMap.get.
=0A

=0A
=0A=0A
=0AFrom: "r7raul1984@163.com" <r7raul1984@163.com>
=0AReply-To: user <user@h= ive.apache.org>
=0ADate: Thursday, August 27, 2015 at 18:03
=0ATo: user <user@hive.apa= che.org>
=0ASubject: sql= mapjoin very slow
=0A
=0A

=0A
=0A
=0A
=0A
=0A
=0A
When I enable mapjoin ,I see Mapjoin t= ask run very slow. My envrioment is hadoop 2.3.0 hive 1.1.0.
=0A
=
=0A
=0A
My attach is  one map hive log and this map's xp= rof log.
=0A

=0A
=0A
In map xprof log ,I see =0A
Compiled += native Method
=0A92.3% 643527 + 0 java.util.HashMap.get
=0A2.8% 1= 9856 + 0 java.util.HashMap.put
=0A1.2% 8623 + 0 org.apache.hadoop.hive= .ql.exec.persistence.HashMapWrapper$GetAdaptor.setFromRow=0A
=0A0.1% 95= 3 + 0 org.apache.hadoop.hive.ql.exec.ExprNodeColumnEvaluator._evaluate =0A0.1% 576 + 0 org.apache.hadoop.hive.serde2.objectinspector.ObjectInspe= ctorUtils.copyToStandardObject
=0A

=0A
=0A
=0A
=0A=0A
=0A
=0A
=0A
=0A
=0A=0A
=0A
=0A
=0A
=0A
=0A ------=_002_NextPart151376475586_=------ ------=_001_NextPart866105206163_=---- Content-Type: image/png; name="m`{u~q}_fv9m(08-(08-28-15-48-59).png" Content-Transfer-Encoding: base64 Content-ID: <_Foxmail.1@fc8fdd99-c32a-61d6-2d6d-06e990b5a482> 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 rkJggg== ------=_001_NextPart866105206163_=---- Content-Type: image/png; name="2gxee{aun}hj(08-(08-28-15-48-59).png" Content-Transfer-Encoding: base64 Content-ID: <_Foxmail.1@dc2474ea-3f79-4654-d985-f29b19ae8a3e> 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 szrJXgSAVSq7Fx5C+MP77z28/MTh7XvhwlYIf3oYwm9//sYbP//86SefuB/C2SuXz//q1mF47PZH 4cI3JTisWOm98LOXLz1989ZvwsXPbt995upLIYQQ7h/u/Xrv8JP7dz/+p8/Ck7O/fXsuAscpH5hP cYQ/fvWFF54//e6bb//yk7/++vkzp8Njl7/98gsXolZXrj69d/vg8cPw7F9uLaNcYEDxx9maDH/v 1sPPE/zDn/3fd/5wcffq7jPPP/3xO/97L9njYXjYfPHZw8/C6RBC30UAWJnMQvoXEiGEcDqcDmHr +W+cv/Xubz4N5y9ffOzWO+8efhpCuP/h22/+7c8+bHbevnT+o5u3Hj57VYLDymW/ebMbz16+9PTH v/51s4oewieHHz/886tf2/2Li098/Ku93/5bYDfOPnb6wUfvH/4p/On+P/76w+bTMb0XAWBVimfh /+ri87t7/+edD6986xsv/qcHP/np/3zjYQiPP/3Vb3774r822H72qX/4+LwEhwnM8UtlZy9fOn/z 5ukmwcP53f9w8a2f//iNX4THn776tat/9otPPg7hy23jp77+wlf//0//7n+8EZ689NVnn7wfQghh q+8iAKzIvwBJRorcN5v2JQAAAABJRU5ErkJggg== ------=_001_NextPart866105206163_=------