#refer: http://kylin.apache.org/docs20/howto/howto_optimize_build.html
1.使用和hive相同的partition cloumn
關(guān)閉自動(dòng)合并設(shè)置
<property>
<name>hive.merge.mapfiles</name>
<value>false</value>
<description>Disable Hive's auto merge</description>
</property>
2.重新分布中間表
作用: 防止不均勻霎匈;
默認(rèn)是100W一個(gè)文件,你可以通過(guò)conf/kylin.properties镊绪,
kylin.job.mapreduce.mapper.input.rows=500000這個(gè)進(jìn)行配置,
在構(gòu)建cube的時(shí)候有一個(gè)配置叫做shard by這個(gè)可以設(shè)置,這個(gè)用于高基數(shù)的維度有很大作用,可以避免數(shù)據(jù)的重新分布也就是減少了shuffle 這個(gè)起碼可以減少40%的build時(shí)間顶别。
3.Extract Fact Table Distinct Columns
在這個(gè)階段 kylin會(huì)使用mr來(lái)獲取不同的維度的value,以供下一步進(jìn)行編碼 生成字典仓技,
如果發(fā)現(xiàn)mapper工作的非常慢,這顯示是你的cube太復(fù)雜了脱衙,請(qǐng)進(jìn)行剪枝蹭睡,
如果發(fā)現(xiàn)reducer發(fā)生了oom,這顯示你的cubiod發(fā)生了膨脹(剪枝).或者是你的yarn 內(nèi)存設(shè)置碧浊。
4.Build Dimension Dictionary
從上一步,獲取到了各個(gè)維度的distinct values.kylin將會(huì)在內(nèi)存中生成字典.通常情況下會(huì)很快。
但是如果出現(xiàn)高基數(shù)的維度隘击,也就是值非常多侍芝,然后kylin會(huì)報(bào)錯(cuò),如:Too high cardinality is not suitable for dictionary埋同。這時(shí)候你就得考慮一下在建cube的時(shí)候州叠,使用別的方式進(jìn)行編碼rowkey,比如int之類(lèi)的凶赁。
5.Build Base Cuboid
這一步如果你發(fā)現(xiàn)你的reducer 個(gè)數(shù)過(guò)于少咧栗,
則可以通過(guò)kylin.job.mapreduce.default.reduce.input.mb=200這個(gè)進(jìn)行設(shè)置。
6.Build Cube
這個(gè)階段需要很多的內(nèi)存 默認(rèn)是3G 這個(gè)你可以通過(guò)配置文件conf/kylin_job_conf_inmem.xml進(jìn)行配置<property>
<name>mapreduce.map.memory.mb</name>
<value>6144</value>
<description></description>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx5632m</value>
<description></description>
</property>
7.Convert Cuboid Data to HFile
默認(rèn)是一個(gè)region大小5G虱肄,如果你觀察到reducer的個(gè)數(shù)太少了致板,
你可以通過(guò)配置文件conf/kylin.properties進(jìn)行配置。
kylin.hbase.region.cut=2
kylin.hbase.hfile.size.gb=1
#