mirror of
https://github.com/apache/impala.git
synced 2025-12-19 18:12:08 -05:00
IMPALA-9857: Batching of consecutive partition events
This patch improves the performance of events processor by batching together consecutive ALTER_PARTITION or INSERT events. Currently, without this patch, if the events stream consists of a lot of consecutive ALTER_PARTITION events which cannot be skipped, events processor will refresh partition from each event one by one. Similarly, in case of INSERT events in a partition events processor refresh one partition at a time. By batching together such consecutive ALTER_PARTITION or INSERT events, events processor needs to take lock on the table only once per batch and can refresh all the partitions from the events using multiple threads. For transactional (acid) tables, this provides even significant performance gain since currently we refresh the whole table in case of ALTER_PARTITION or INSERT partition events. By batching them together, events processor will refresh the table once per batch. The batch of eligible ALTER_PARTITION and INSERT events will be processed as ALTER_PARTITIONS and INSERT_PARTITIONS event respectively. Performance tests: In order to simulate bunch of ALTER_PARTITION and INSERT events, a simple test was performed by running the following query from hive: insert into store_sales_copy partition(ss_sold_date_sk) select * from store_sales; This query generates 1824 ALTER_PARTITION and 1824 INSERT events and time taken to process all the events generated was measured before and after the patch for external and ACID table. Table Type Before After ====================================================== External table 75 sec 25 sec ACID tables 313 sec 47 sec Additionally, the patch also fixes a minor bug in evaluateSelfEvent() method which should return false when serviceId does not match. Testing Done: 1. Added new tests which cover the batching logic of events. 2. Exhaustive tests. Change-Id: I5d27a68a64436d31731e9a219b1efd6fc842de73 Reviewed-on: http://gerrit.cloudera.org:8080/17848 Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com> Reviewed-by: Sourabh Goyal <sourabhg@cloudera.com> Reviewed-by: Zoltan Borok-Nagy <boroknagyz@cloudera.com>
This commit is contained in:
committed by
Vihang Karajgaonkar
parent
d2f866f9a1
commit
d8d44f3f14
@@ -87,12 +87,13 @@ class EventProcessorUtils(object):
|
||||
return dict(pairs)
|
||||
|
||||
@staticmethod
|
||||
def get_event_processor_metric(metric_key, default_val=None):
|
||||
"""Returns the event processor metric from the /events catalog debug page"""
|
||||
def get_int_metric(metric_key, default_val=None):
|
||||
"""Returns the int value of event processor metric from the /events catalogd debug
|
||||
page"""
|
||||
metrics = EventProcessorUtils.get_event_processor_metrics()
|
||||
if metric_key not in metrics:
|
||||
return default_val
|
||||
return metrics[metric_key]
|
||||
return int(default_val)
|
||||
return int(metrics[metric_key])
|
||||
|
||||
@staticmethod
|
||||
def get_last_synced_event_id():
|
||||
|
||||
Reference in New Issue
Block a user