Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id C8A1B200B8C for ; Mon, 12 Sep 2016 17:03:36 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id C7214160AB8; Mon, 12 Sep 2016 15:03:36 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id EF5A6160AB2 for ; Mon, 12 Sep 2016 17:03:35 +0200 (CEST) Received: (qmail 24736 invoked by uid 500); 12 Sep 2016 15:03:35 -0000 Mailing-List: contact user-help@accumulo.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: user@accumulo.apache.org Delivered-To: mailing list user@accumulo.apache.org Received: (qmail 24726 invoked by uid 99); 12 Sep 2016 15:03:35 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd2-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 12 Sep 2016 15:03:35 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd2-us-west.apache.org (ASF Mail Server at spamd2-us-west.apache.org) with ESMTP id A6F121A616B for ; Mon, 12 Sep 2016 15:03:34 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd2-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -4.991 X-Spam-Level: X-Spam-Status: No, score=-4.991 tagged_above=-999 required=6.31 tests=[RCVD_IN_DNSWL_HI=-5, SPF_PASS=-0.001, T_ANY_PILL_PRICE=0.01] autolearn=disabled Received: from mx2-lw-us.apache.org ([10.40.0.8]) by localhost (spamd2-us-west.apache.org [10.40.0.9]) (amavisd-new, port 10024) with ESMTP id tIb47oFnRXVa for ; Mon, 12 Sep 2016 15:03:31 +0000 (UTC) Received: from dfw-mailout2.raytheon.com (dfw-mailout2.raytheon.com [199.46.199.208]) by mx2-lw-us.apache.org (ASF Mail Server at mx2-lw-us.apache.org) with ESMTPS id 1495C5FC26 for ; Mon, 12 Sep 2016 15:03:31 +0000 (UTC) Received: from ca-mailout10.rtnmail.ray.com (ca-mailout10.rtnmail.ray.com [147.25.146.12]) by dfw-mailout2.raytheon.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id u8CF3N7h028006 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Mon, 12 Sep 2016 15:03:23 GMT Received: from smtp.bbn.com ([128.33.0.80]) by ca-mailout10.rtnmail.ray.com (8.15.0.59/8.15.0.59) with ESMTPS id u8CF3Mv5015086 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NOT) for ; Mon, 12 Sep 2016 15:03:22 GMT Received: from dhcp33-29-9.bbn.com ([128.33.29.9]:57346 helo=DBLUM14LAP) by smtp.bbn.com with esmtps (TLSv1:AES256-SHA:256) (Exim 4.77 (FreeBSD)) (envelope-from ) id 1bjSlW-0001P1-0Y for user@accumulo.apache.org; Mon, 12 Sep 2016 11:03:22 -0400 From: "Dan Blum" To: References: <393687421.762328.1472044939599.JavaMail.zimbra@scai.fraunhofer.de> <2089159696.944715.1472627172729.JavaMail.zimbra@scai.fraunhofer.de> <57D482A8.7030507@gmail.com> <57D6C28C.3080407@gmail.com> In-Reply-To: <57D6C28C.3080407@gmail.com> Subject: RE: Accumulo Seek performance Date: Mon, 12 Sep 2016 11:03:21 -0400 Message-ID: <002701d20d06$cdc2b460$69481d20$@bbn.com> MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Mailer: Microsoft Outlook 14.0 Thread-Index: AQIlIuo0j2+zD7gLjYr6NRarIEkSXQHl6CQMAa79TgcC3wenAAI4G/qlAn4UP6mfdnZ7gA== Content-Language: en-us X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2016-09-12_06:,, signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 suspectscore=1 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1609020000 definitions=main-1609120229 archived-at: Mon, 12 Sep 2016 15:03:37 -0000 I am not sure - my recollection is that the 1.6.x code capped the number = of threads requested at 1 per tablet (covered by the requested ranges), = not 1 per tablet server. -----Original Message----- From: Josh Elser [mailto:josh.elser@gmail.com]=20 Sent: Monday, September 12, 2016 10:58 AM To: user@accumulo.apache.org Subject: Re: Accumulo Seek performance Good call. I kind of forgot about BatchScanner threads and trying to=20 factor those in :). I guess doing one thread in the BatchScanners would=20 be more accurate. Although, I only had one TServer, so I don't *think* there would be any=20 difference. I don't believe we have concurrent requests from one=20 BatchScanner to one TServer. Dylan Hutchison wrote: > Nice setup Josh. Thank you for putting together the tests. A few > questions: > > The serial scanner implementation uses 6 threads: one for each thread = in > the thread pool. > The batch scanner implementation uses 60 threads: 10 for each thread = in > the thread pool, since the BatchScanner was configured with 10 threads > and there are 10 (9?) tablets. > > Isn't 60 threads of communication naturally inefficient? I wonder if = we > would see the same performance if we set each BatchScanner to use 1 or = 2 > threads. > > Maybe this would motivate a /MultiTableBatchScanner/, which maintains = a > fixed number of threads across any number of concurrent scans, = possibly > to the same table. > > > On Sat, Sep 10, 2016 at 3:01 PM, Josh Elser > wrote: > > Sven, et al: > > So, it would appear that I have been able to reproduce this one > (better late than never, I guess...). tl;dr Serially using = Scanners > to do point lookups instead of a BatchScanner is ~20x faster. This > sounds like a pretty serious performance issue to me. > > Here's a general outline for what I did. > > * Accumulo 1.8.0 > * Created a table with 1M rows, each row with 10 columns using = YCSB > (workloada) > * Split the table into 9 tablets > * Computed the set of all rows in the table > > For a number of iterations: > * Shuffle this set of rows > * Choose the first N rows > * Construct an equivalent set of Ranges from the set of Rows, > choosing a random column (0-9) > * Partition the N rows into X collections > * Submit X tasks to query one partition of the N rows (to a thread > pool with X fixed threads) > > I have two implementations of these tasks. One, where all ranges = in > a partition are executed via one BatchWriter. A second where each > range is executed in serial using a Scanner. The numbers speak for > themselves. > > ** BatchScanners ** > 2016-09-10 17:51:38,811 [joshelser.YcsbBatchScanner] INFO : = Shuffled > all rows > 2016-09-10 17:51:38,843 [joshelser.YcsbBatchScanner] INFO : All > ranges calculated: 3000 ranges found > 2016-09-10 17:51:38,846 [joshelser.YcsbBatchScanner] INFO : > Executing 6 range partitions using a pool of 6 threads > 2016-09-10 17:52:19,025 [joshelser.YcsbBatchScanner] INFO : = Queries > executed in 40178 ms > 2016-09-10 17:52:19,025 [joshelser.YcsbBatchScanner] INFO : > Executing 6 range partitions using a pool of 6 threads > 2016-09-10 17:53:01,321 [joshelser.YcsbBatchScanner] INFO : = Queries > executed in 42296 ms > 2016-09-10 17:53:01,321 [joshelser.YcsbBatchScanner] INFO : > Executing 6 range partitions using a pool of 6 threads > 2016-09-10 17:53:47,414 [joshelser.YcsbBatchScanner] INFO : = Queries > executed in 46094 ms > 2016-09-10 17:53:47,415 [joshelser.YcsbBatchScanner] INFO : > Executing 6 range partitions using a pool of 6 threads > 2016-09-10 17:54:35,118 [joshelser.YcsbBatchScanner] INFO : = Queries > executed in 47704 ms > 2016-09-10 17:54:35,119 [joshelser.YcsbBatchScanner] INFO : > Executing 6 range partitions using a pool of 6 threads > 2016-09-10 17:55:24,339 [joshelser.YcsbBatchScanner] INFO : = Queries > executed in 49221 ms > > ** Scanners ** > 2016-09-10 17:57:23,867 [joshelser.YcsbBatchScanner] INFO : = Shuffled > all rows > 2016-09-10 17:57:23,898 [joshelser.YcsbBatchScanner] INFO : All > ranges calculated: 3000 ranges found > 2016-09-10 17:57:23,903 [joshelser.YcsbBatchScanner] INFO : > Executing 6 range partitions using a pool of 6 threads > 2016-09-10 17:57:26,738 [joshelser.YcsbBatchScanner] INFO : = Queries > executed in 2833 ms > 2016-09-10 17:57:26,738 [joshelser.YcsbBatchScanner] INFO : > Executing 6 range partitions using a pool of 6 threads > 2016-09-10 17:57:29,275 [joshelser.YcsbBatchScanner] INFO : = Queries > executed in 2536 ms > 2016-09-10 17:57:29,275 [joshelser.YcsbBatchScanner] INFO : > Executing 6 range partitions using a pool of 6 threads > 2016-09-10 17:57:31,425 [joshelser.YcsbBatchScanner] INFO : = Queries > executed in 2150 ms > 2016-09-10 17:57:31,425 [joshelser.YcsbBatchScanner] INFO : > Executing 6 range partitions using a pool of 6 threads > 2016-09-10 17:57:33,487 [joshelser.YcsbBatchScanner] INFO : = Queries > executed in 2061 ms > 2016-09-10 17:57:33,487 [joshelser.YcsbBatchScanner] INFO : > Executing 6 range partitions using a pool of 6 threads > 2016-09-10 17:57:35,628 [joshelser.YcsbBatchScanner] INFO : = Queries > executed in 2140 ms > > Query code is available > https://github.com/joshelser/accumulo-range-binning > > > > Sven Hodapp wrote: > > Hi Keith, > > I've tried it with 1, 2 or 10 threads. Unfortunately there = where > no amazing differences. > Maybe it's a problem with the table structure? For example it > may happen that one row id (e.g. a sentence) has several > thousand column families. Can this affect the seek = performance? > > So for my initial example it has about 3000 row ids to seek, > which will return about 500k entries. If I filter for specific > column families (e.g. a document without annotations) it will > return about 5k entries, but the seek time will only be = halved. > Are there to much column families to seek it fast? > > Thanks! > > Regards, > Sven > >