Details
-
New Feature
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
v4.0.0-beta
-
None
Description
In KYLIN4, dictionaries are hashed into several buckets, column data are repartitioned to the same partition size as bucket size. Then, each encoding task is able to load a piece of dictionary bucket to accelerate the encoding step.
Recently we are troubled by this improvement when data skew happens. In some of our cases, the repartition step during encoding is even impossible to finish . Whereas this works fine in KYLIN3, for each Spark task will load all dictionary of a column and encode column values to int values. There is no need to do repartition step in KYLIN3.
We solve this by:
- sample from source data and detect skewed data
- build skewed data's dictionary
- customize an repartition function to scatter skewed data to random partitions
- do encoding with both skewed dictionary and dictionary loaded within each partition
After this improvement, some of our cube's build time reduced from 190min to 30min