You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2019/08/08 14:10:46 UTC

svn commit: r1864708 - in /kylin/site: ./ docs30/howto/ images/Hive-Global-Dictionary/

Author: lidong
Date: Thu Aug  8 14:10:46 2019
New Revision: 1864708

URL: http://svn.apache.org/viewvc?rev=1864708&view=rev
Log:
Add detailed analysis for Hive Global Dictionary

Added:
    kylin/site/images/Hive-Global-Dictionary/
    kylin/site/images/Hive-Global-Dictionary/cube-level-config.png   (with props)
    kylin/site/images/Hive-Global-Dictionary/hive-global-dict-table.png   (with props)
    kylin/site/images/Hive-Global-Dictionary/set-hive-dict-column.png   (with props)
    kylin/site/images/Hive-Global-Dictionary/three-added-steps.png   (with props)
Modified:
    kylin/site/docs30/howto/howto_use_hive_mr_dict.html
    kylin/site/feed.xml

Modified: kylin/site/docs30/howto/howto_use_hive_mr_dict.html
URL: http://svn.apache.org/viewvc/kylin/site/docs30/howto/howto_use_hive_mr_dict.html?rev=1864708&r1=1864707&r2=1864708&view=diff
==============================================================================
--- kylin/site/docs30/howto/howto_use_hive_mr_dict.html (original)
+++ kylin/site/docs30/howto/howto_use_hive_mr_dict.html Thu Aug  8 14:10:46 2019
@@ -6357,31 +6357,219 @@ var _hmt = _hmt || [];
 							
 							
 							<article class="post-content" >	
-							<h3 id="global-dictionary">Global Dictionary</h3>
-<p>Count distinct measure is very important for many scenario, such as PageView statistics, Kylin support count distinct since 1.5.3 (http://kylin.apache.org/blog/2016/08/01/count-distinct-in-kylin/). <br />
-Apache Kylin implements precisely count distinct based on bitmap, and use global dictionary to encode string value into a Dict. <br />
-Currently we have to build global dictionary in single process/JVM, which may take a lot of time and memory for UHC. By in this feature(KYLIN-3841), we use Hive, a distributed SQL engine to build global dictionary.</p>
+							<h2 id="global-dictionary-in-hive">Global Dictionary in Hive</h2>
+<p>Count distinct(bitmap) measure is very important for many scenario, such as PageView statistics, and Kylin support count distinct since 1.5.3 .<br />
+Apache Kylin implements precisely count distinct measure based on bitmap, and use global dictionary to encode string value into integer. <br />
+Currently we have to build global dictionary in single process/JVM, which may take a lot of time and memory for UHC. By this feature(KYLIN-3841), we use Hive, a distributed SQL engine to build global dictionary.</p>
 
 <p>This will help to:<br />
-1. Reduce memory pressure of Kylin process, MapReduce will be used to build dict for Kylin<br />
-2. Make global dictionary reusable<br />
-3. Make global dictionary readable, you may use global dictionary outside Kylin, maybe useful in many scenario.</p>
-
-<p>And this feature will add three steps if enabled.<br />
-1. Global Dict Mr/Hive extract dict_val from Data<br />
-2. Global Dict Mr/Hive build dict_val<br />
-3. Global Dict Mr/Hive replace dict_val to Data</p>
-
-<h3 id="how-to-use">How to use</h3>
-<p>If you have a count distinct(bitmap) measure for a UHC. Says columns name are PV_ID and USER_ID, and table name is USER_ACTION, you may add cube-level configuration <code class="highlighter-rouge">kylin.dictionary.mr-hive.columns=USER_ACTION_PV_ID,USER_ACTION_USER_ID</code> to enable this feature.<br />
-You have to know that the value will be replaced into encoded integer in flat hive table, and this may cause failure of some query.</p>
+1. Reduce memory pressure of Kylin process, MapReduce(or other engine which hive used) will be used to build dict instead of Kylin process itself.<br />
+2. Make build base cuboid quicker, because string value has been encoded in previous step.<br />
+3. Make global dictionary reusable.<br />
+4. Make global dictionary readable and bijective, you may use global dictionary outside Kylin, this maybe useful in many scenario.</p>
+
+<h3 id="step-by-step-analysis">Step by step Analysis</h3>
+<p>This feature will add three additional steps in cube building if enabled, let us try to understand what Kylin do in these steps.</p>
+
+<ol>
+  <li>
+    <p>Global Dict Mr/Hive extract dict_val from Data</p>
+
+    <ul>
+      <li>Create a Hive table for store global dictionary if it is not exists, table name should be <em>CubeName_Suffix</em>. This table has two normal column and one partition column, two normal columns are <code class="highlighter-rouge">dict_key</code> and <code class="highlighter-rouge">dict_value</code>, which for origin value and encoded integer respectively.</li>
+      <li>Create a temporary table with “__group_by” as its suffix, which used to store distinct value for specific column. This table has one normal column and one partition column, normal column is <code class="highlighter-rouge">dict_key</code> which used to store origin value.</li>
+      <li>Insert distinct value into temporary table created above for each column by using a hive query “select cloA from flatTable group by cloA”.</li>
+    </ul>
+
+    <p>When this step finished, you should get a temporary table contains distinct values, each partition for specific Count_Distinct column.</p>
+  </li>
+  <li>
+    <p>Global Dict Mr/Hive build dict_val</p>
+
+    <ul>
+      <li>Find all fresh distinct value which never exists in any older segments by <em>LEFT JOIN</em> between global dictionary table and temporary table.</li>
+      <li>Append all fresh distinct value to the tail of global dictionary table by <em>UNION</em>. By the power of <code class="highlighter-rouge">row_number</code> function in Hive, added value will be encoded with integer in incremental way.</li>
+    </ul>
+
+    <p>When this step finished, all distinct value for all Count_Distinct column will be encoded correctly in global dictionary table.</p>
+  </li>
+  <li>
+    <p>Global Dict Mr/Hive replace dict_val to Data</p>
+
+    <ul>
+      <li>Using <em>LEFT JOIN</em> to replace original string value with encoded integer on flat table which used to build cuboid later.</li>
+    </ul>
+
+    <p>When this step finished, all string value which belong to Count_Distinct column will be updated with encoded integer in flat hive table.</p>
+  </li>
+</ol>
+
+<hr />
+
+<h2 id="how-to-use">How to use</h2>
+
+<p>If you have some count distinct(bitmap) measure, and data type of that column is String, you may need Hive Global Dictionary. Says columns name are PV_ID and USER_ID, and table name is USER_ACTION, you may add cube-level configuration <code class="highlighter-rouge">kylin.dictionary.mr-hive.columns=USER_ACTION_PV_ID,USER_ACTION_USER_ID</code> to enable this feature.</p>
+
+<p>Please don’t use hive global dictionary on integer type column, you have to know that the value will be replaced with encoded integer in flat hive table. If you have sum/max/min measure on the same column, you will get wrong result in these measures.</p>
+
+<p>And you should know this feature is conflicted with shrunken global dictionary(KYLIN-3491) because they fix the same thing in different way.</p>
 
 <h3 id="configuration">Configuration</h3>
+
+<ul>
+  <li><code class="highlighter-rouge">kylin.dictionary.mr-hive.columns</code> is used to specific which columns need to use Hive-MR dict, should be <em>TABLE1_COLUMN1,TABLE2_COLUMN2</em>. Better configured in cube level, default value is empty.</li>
+  <li><code class="highlighter-rouge">kylin.dictionary.mr-hive.database</code> is used to specific which database Hive-MR dict table located, default value is <em>default</em>.</li>
+  <li><code class="highlighter-rouge">kylin.hive.union.style</code> Sometime sql which used to build global dict table may have problem in union syntax, you may refer to Hive Doc for more detail. The default value is <em>UNION</em>, using lower version of Hive should change to <em>UNION ALL</em>.</li>
+  <li><code class="highlighter-rouge">kylin.dictionary.mr-hive.table.suffix</code> is used to specific suffix of global dict table, default value is <em>_global_dict</em>.</li>
+</ul>
+
+<hr />
+
+<h2 id="screenshot">Screenshot</h2>
+
+<h4 id="sql-in-new-added-step-add-countdistinctbitmap-measure">SQL in new added step Add count_distinct(bitmap) measure</h4>
+
+<p><img src="/images/Hive-Global-Dictionary/cube-level-config.png" alt="add_count_distinct_bitmap" /></p>
+
+<h4 id="sql-in-new-added-step-set-hive-dict-column-in-cube-level-config">SQL in new added step Set hive-dict-column in cube level config</h4>
+
+<p><img src="/images/Hive-Global-Dictionary/set-hive-dict-column.png" alt="set-hive-dict-column" /></p>
+
+<h4 id="sql-in-new-added-step-three-added-steps-of-cubing-job">SQL in new added step Three added steps of cubing job</h4>
+
+<p><img src="/images/Hive-Global-Dictionary/three-added-steps.png" alt="three-added-steps" /></p>
+
+<h4 id="sql-in-new-added-step-hive-global-dictionary-table">SQL in new added step Hive Global Dictionary Table</h4>
+
+<p><img src="/images/Hive-Global-Dictionary/hive-global-dict-table.png" alt="hive-global-dict-table" /></p>
+
+<h4 id="sql-in-new-added-step">SQL in new added step</h4>
+
+<ul>
+  <li>Global Dict Mr/Hive extract dict_val from Data</li>
+</ul>
+
+<div class="highlight"><pre><code class="language-groff" data-lang="groff">CREATE TABLE IF NOT EXISTS lacus.KYLIN_SALE_HIVE_DICT_HIVE_GLOBAL
+    ( dict_key STRING COMMENT '',
+    dict_val INT COMMENT ''
+    )
+    COMMENT ''
+    PARTITIONED BY (dict_column string)
+    STORED AS TEXTFILE;
+    DROP TABLE IF EXISTS kylin_intermediate_kylin_sale_hive_dict_921b0a15_d7cd_a2e6_6852_4ce44158f195__group_by;
+    CREATE TABLE IF NOT EXISTS kylin_intermediate_kylin_sale_hive_dict_921b0a15_d7cd_a2e6_6852_4ce44158f195__group_by
+    (
+     dict_key STRING COMMENT ''
+    )
+    COMMENT ''
+    PARTITIONED BY (dict_column string)
+    STORED AS SEQUENCEFILE
+    ;
+    INSERT OVERWRITE TABLE kylin_intermediate_kylin_sale_hive_dict_921b0a15_d7cd_a2e6_6852_4ce44158f195__group_by
+    PARTITION (dict_column = 'KYLIN_SALES_LSTG_FORMAT_NAME')
+    SELECT
+    KYLIN_SALES_LSTG_FORMAT_NAME
+    FROM kylin_intermediate_kylin_sale_hive_dict_921b0a15_d7cd_a2e6_6852_4ce44158f195
+    GROUP BY KYLIN_SALES_LSTG_FORMAT_NAME
+    ;
+    INSERT OVERWRITE TABLE kylin_intermediate_kylin_sale_hive_dict_921b0a15_d7cd_a2e6_6852_4ce44158f195__group_by
+    PARTITION (dict_column = 'KYLIN_SALES_OPS_REGION')
+    SELECT
+    KYLIN_SALES_OPS_REGION
+    FROM kylin_intermediate_kylin_sale_hive_dict_921b0a15_d7cd_a2e6_6852_4ce44158f195
+    GROUP BY KYLIN_SALES_OPS_REGION ;</code></pre></div>
+
+<ul>
+  <li>Global Dict Mr/Hive build dict_val</li>
+</ul>
+
+<div class="highlight"><pre><code class="language-groff" data-lang="groff">INSERT OVERWRITE TABLE lacus.KYLIN_SALE_HIVE_DICT_HIVE_GLOBAL
+    PARTITION (dict_column = 'KYLIN_SALES_OPS_REGION')
+    SELECT dict_key, dict_val FROM lacus.KYLIN_SALE_HIVE_DICT_HIVE_GLOBAL
+    WHERE dict_column = 'KYLIN_SALES_OPS_REGION'
+    UNION ALL
+    SELECT a.dict_key as dict_key, (row_number() over(order by a.dict_key asc)) + (0) as dict_val
+    FROM
+    (
+     SELECT dict_key FROM default.kylin_intermediate_kylin_sale_hive_dict_921b0a15_d7cd_a2e6_6852_4ce44158f195__group_by WHERE dict_column = 'KYLIN_SALES_OPS_REGION' AND dict_key is not null
+    ) a
+    LEFT JOIN
+    (
+    SELECT dict_key, dict_val FROM lacus.KYLIN_SALE_HIVE_DICT_HIVE_GLOBAL WHERE dict_column = 'KYLIN_SALES_OPS_REGION'
+    ) b
+    ON a.dict_key = b.dict_key
+    WHERE b.dict_val is null;
+
+    INSERT OVERWRITE TABLE lacus.KYLIN_SALE_HIVE_DICT_HIVE_GLOBAL
+    PARTITION (dict_column = 'KYLIN_SALES_LSTG_FORMAT_NAME')
+    SELECT dict_key, dict_val FROM lacus.KYLIN_SALE_HIVE_DICT_HIVE_GLOBAL
+    WHERE dict_column = 'KYLIN_SALES_LSTG_FORMAT_NAME'
+    UNION ALL
+    SELECT a.dict_key as dict_key, (row_number() over(order by a.dict_key asc)) + (0) as dict_val
+    FROM
+    (
+     SELECT dict_key FROM default.kylin_intermediate_kylin_sale_hive_dict_921b0a15_d7cd_a2e6_6852_4ce44158f195__group_by WHERE dict_column = 'KYLIN_SALES_LSTG_FORMAT_NAME' AND dict_key is not null
+    ) a
+    LEFT JOIN
+    (
+    SELECT dict_key, dict_val FROM lacus.KYLIN_SALE_HIVE_DICT_HIVE_GLOBAL WHERE dict_column = 'KYLIN_SALES_LSTG_FORMAT_NAME'
+    ) b
+    ON a.dict_key = b.dict_key
+    WHERE b.dict_val is null;</code></pre></div>
+
+<ul>
+  <li>Global Dict Mr/Hive replace dict_val to Data</li>
+</ul>
+
+<div class="highlight"><pre><code class="language-groff" data-lang="groff">INSERT OVERWRITE TABLE default.kylin_intermediate_kylin_sale_hive_dict_921b0a15_d7cd_a2e6_6852_4ce44158f195
+    SELECT
+    a.KYLIN_SALES_TRANS_ID
+    ,a.KYLIN_SALES_PART_DT
+    ,a.KYLIN_SALES_LEAF_CATEG_ID
+    ,a.KYLIN_SALES_LSTG_SITE_ID
+    ,a.KYLIN_SALES_SELLER_ID
+    ,a.KYLIN_SALES_BUYER_ID
+    ,a.BUYER_ACCOUNT_ACCOUNT_COUNTRY
+    ,a.SELLER_ACCOUNT_ACCOUNT_COUNTRY
+    ,a.KYLIN_SALES_PRICE
+    ,a.KYLIN_SALES_ITEM_COUNT
+    ,a.KYLIN_SALES_LSTG_FORMAT_NAME
+    ,b. dict_val
+    FROM default.kylin_intermediate_kylin_sale_hive_dict_921b0a15_d7cd_a2e6_6852_4ce44158f195 a
+    LEFT OUTER JOIN
+    (
+    SELECT dict_key, dict_val FROM lacus.KYLIN_SALE_HIVE_DICT_HIVE_GLOBAL WHERE dict_column = 'KYLIN_SALES_OPS_REGION'
+    ) b
+     ON a.KYLIN_SALES_OPS_REGION = b.dict_key;
+    INSERT OVERWRITE TABLE default.kylin_intermediate_kylin_sale_hive_dict_921b0a15_d7cd_a2e6_6852_4ce44158f195
+    SELECT
+    a.KYLIN_SALES_TRANS_ID
+    ,a.KYLIN_SALES_PART_DT
+    ,a.KYLIN_SALES_LEAF_CATEG_ID
+    ,a.KYLIN_SALES_LSTG_SITE_ID
+    ,a.KYLIN_SALES_SELLER_ID
+    ,a.KYLIN_SALES_BUYER_ID
+    ,a.BUYER_ACCOUNT_ACCOUNT_COUNTRY
+    ,a.SELLER_ACCOUNT_ACCOUNT_COUNTRY
+    ,a.KYLIN_SALES_PRICE
+    ,a.KYLIN_SALES_ITEM_COUNT
+    ,b. dict_val
+    ,a.KYLIN_SALES_OPS_REGION
+    FROM default.kylin_intermediate_kylin_sale_hive_dict_921b0a15_d7cd_a2e6_6852_4ce44158f195 a
+    LEFT OUTER JOIN
+    (
+    SELECT dict_key, dict_val FROM lacus.KYLIN_SALE_HIVE_DICT_HIVE_GLOBAL WHERE dict_column = 'KYLIN_SALES_LSTG_FORMAT_NAME'
+    ) b
+     ON a.KYLIN_SALES_LSTG_FORMAT_NAME = b.dict_key;</code></pre></div>
+
+<h3 id="reference-link">Reference Link</h3>
+
 <ul>
-  <li><code class="highlighter-rouge">kylin.dictionary.mr-hive.columns</code> is used to specific which columns need to be Hive-MR dict.</li>
-  <li><code class="highlighter-rouge">kylin.dictionary.mr-hive.database</code> is used to specific which database Hive-MR dict located.</li>
-  <li><code class="highlighter-rouge">kylin.hive.union.style</code> Sometime sql which used to build global dict table may have syntax problem. This should be fixed by specific this entry with <em>UNION ALL</em>.</li>
-  <li><code class="highlighter-rouge">kylin.dictionary.mr-hive.table.suffix</code> is used to specific suffix of global dict table.</li>
+  <li>https://issues.apache.org/jira/browse/KYLIN-3491</li>
+  <li>https://issues.apache.org/jira/browse/KYLIN-3841</li>
+  <li>https://issues.apache.org/jira/browse/KYLIN-3905</li>
+  <li>https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Union</li>
+  <li>http://kylin.apache.org/blog/2016/08/01/count-distinct-in-kylin/</li>
 </ul>
 
 							</article>

Modified: kylin/site/feed.xml
URL: http://svn.apache.org/viewvc/kylin/site/feed.xml?rev=1864708&r1=1864707&r2=1864708&view=diff
==============================================================================
--- kylin/site/feed.xml (original)
+++ kylin/site/feed.xml Thu Aug  8 14:10:46 2019
@@ -19,8 +19,8 @@
     <description>Apache Kylin Home</description>
     <link>http://kylin.apache.org/</link>
     <atom:link href="http://kylin.apache.org/feed.xml" rel="self" type="application/rss+xml"/>
-    <pubDate>Thu, 01 Aug 2019 06:52:56 -0700</pubDate>
-    <lastBuildDate>Thu, 01 Aug 2019 06:52:56 -0700</lastBuildDate>
+    <pubDate>Thu, 08 Aug 2019 06:59:20 -0700</pubDate>
+    <lastBuildDate>Thu, 08 Aug 2019 06:59:20 -0700</lastBuildDate>
     <generator>Jekyll v2.5.3</generator>
     
       <item>
@@ -1191,114 +1191,114 @@ Security: (depend on your security setti
       </item>
     
       <item>
-        <title>Apache Kylin v3.0.0-alpha 发布</title>
-        <description>&lt;p&gt;近日 Apache Kylin 社区很高兴地宣布,Apache Kylin v3.0.0-alpha 正式发布。&lt;/p&gt;
+        <title>Apache Kylin v3.0.0-alpha Release Announcement</title>
+        <description>&lt;p&gt;The Apache Kylin community is pleased to announce the release of Apache Kylin v3.0.0-alpha.&lt;/p&gt;
 
-&lt;p&gt;Apache Kylin 是一个开源的分布式分析引擎,旨在为极大数据集提供 SQL 接口和多维分析(OLAP)的能力。&lt;/p&gt;
+&lt;p&gt;Apache Kylin is an open source Distributed Analytics Engine designed to provide SQL interface and multi-dimensional analysis (OLAP) on Big Data supporting extremely large datasets.&lt;/p&gt;
 
-&lt;p&gt;这是 Kylin 下一代 v3.x 的第一个发布版本,用于早期预览,主要的功能是实时 (Real-time) OLAP。完整的改动列表请参见&lt;a href=&quot;/docs/release_notes.html&quot;&gt;release notes&lt;/a&gt;;这里挑一些主要改进做说明。&lt;/p&gt;
+&lt;p&gt;This is the first release of the new generation v3.x, the main feature introduced is the Real-time OLAP. All of the changes can be found in the &lt;a href=&quot;/docs/release_notes.html&quot;&gt;release notes&lt;/a&gt;. Here we just highlight the main features.&lt;/p&gt;
 
-&lt;h1 id=&quot;section&quot;&gt;重要新功能&lt;/h1&gt;
+&lt;h1 id=&quot;important-features&quot;&gt;Important features&lt;/h1&gt;
 
-&lt;h3 id=&quot;kylin-3654----olap&quot;&gt;KYLIN-3654 - 实时 OLAP&lt;/h3&gt;
-&lt;p&gt;随着引入新的 real-time receiver 和 coordinator 组件,Kylin 能够实现毫秒级别的数据准备延迟,数据源来自流式数据如 Apache Kafka。这意味着,从 v3.0 开始,Kylin 既能够支持历史批量数据的 OLAP,也支持对流式数据的准实时(Near real-time)以及完全实时(real-time)分析。用户可以使用一个 OLAP 平台来服务不同的使用场景。此方案已经在早期用户如 eBay 得到部署和验证。关于如何使用此功能,请参考&lt;a href=&quot;/docs30/tutorial/realtime_olap.html&quot;&gt;æ­¤æ•
 ™ç¨‹&lt;/a&gt;。&lt;/p&gt;
+&lt;h3 id=&quot;kylin-3654---real-time-olap&quot;&gt;KYLIN-3654 - Real-time OLAP&lt;/h3&gt;
+&lt;p&gt;With the newly introduced Kylin real-time receiver and coordinator components, Kylin can implement a millisecond-level data preparation delay for streaming data from sources like Apache Kafka. This means since v3.0 on,  Kylin can support sub-second level OLAP over historical batch data, near real-time streaming as well as real-time streaming. The user can use one OLAP platform to serve different scenarios. This solution has been deployed and verified in early adopters like eBay since 2018. For how to enable it, please refer to &lt;a href=&quot;/docs30/tutorial/realtime_olap.html&quot;&gt;this tutorial&lt;/a&gt;.&lt;/p&gt;
 
-&lt;h3 id=&quot;kylin-3795----apache-livy--spark-&quot;&gt;KYLIN-3795 - 通过 Apache Livy 递交 Spark 任务&lt;/h3&gt;
-&lt;p&gt;这个功能允许管理员为 Kylin 配置使用 Apache Livy (incubating) 来完成任务的递交。Spark 作业的提交通过 Livy 的 REST API 来提交,而无需在本地启动 Spark Driver 进程,从而方便对 Spark 资源的管理监控,同时也降低对 Kylin 任务进程所在节点的压力。&lt;/p&gt;
+&lt;h3 id=&quot;kylin-3795---submit-spark-jobs-via-apache-livy&quot;&gt;KYLIN-3795 - Submit Spark jobs via Apache Livy&lt;/h3&gt;
+&lt;p&gt;This feature allows the administrator to configure Kylin to integrate with Apache Livy (incubating) for Spark job submissions. The Spark job is submitted to the Livy Server through Livy’s REST API, instead of starting the Spark Driver process in local, which facilitates the management and monitoring of the Spark resources, and also releases the pressure of the nodes where the Kylin job server is running.&lt;/p&gt;
 
-&lt;h3 id=&quot;kylin-3820----curator-&quot;&gt;KYLIN-3820 - 基于 Curator 的任务节点分配和服务发现&lt;/h3&gt;
-&lt;p&gt;新增一种基于Apache Zookeeper 和 Curator作业调度器,可以自动发现 Kylin 节点,并自动分配一个节点来进行任务的管理以及故障恢复。有了这个功能后,管理员可以更加容易地部署和扩展 Kylin 节点,而不再需要在 &lt;code class=&quot;highlighter-rouge&quot;&gt;kylin.properties&lt;/code&gt; 中配置每个 Kylin 节点的地址并重启 Kylin 以使之生效。&lt;/p&gt;
+&lt;h3 id=&quot;kylin-3820---a-curator-based-job-scheduler&quot;&gt;KYLIN-3820 - A curator-based job scheduler&lt;/h3&gt;
+&lt;p&gt;A new job scheduler is added to automatically discover the Kylin nodes and do an automatic leader selection among them (only the leader will submit jobs). With this feature, you can easily deploy and scale out Kylin nodes without manually update the node address in &lt;code class=&quot;highlighter-rouge&quot;&gt;kylin.properties&lt;/code&gt; and restart Kylin to take effective.&lt;/p&gt;
 
-&lt;h1 id=&quot;section-1&quot;&gt;其它改进&lt;/h1&gt;
+&lt;h1 id=&quot;other-enhancements&quot;&gt;Other enhancements&lt;/h1&gt;
 
-&lt;h3 id=&quot;kylin-3716---fastthreadlocal--threadlocal&quot;&gt;KYLIN-3716 - FastThreadLocal 替换 ThreadLocal&lt;/h3&gt;
-&lt;p&gt;使用 Netty 中的 FastThreadLocal 替代 JDK 原生的 ThreadLocal,可以一定程度上提升 Kylin 在高并发下的性能。&lt;/p&gt;
+&lt;h3 id=&quot;kylin-3716---fastthreadlocal-replaces-threadlocal&quot;&gt;KYLIN-3716 - FastThreadLocal replaces ThreadLocal&lt;/h3&gt;
+&lt;p&gt;Using FastThreadLocal instead of ThreadLocal can improve Kylin’s overall performance to some extent.&lt;/p&gt;
 
 &lt;h3 id=&quot;kylin-3867---enable-jdbc-to-use-key-store--trust-store-for-https-connection&quot;&gt;KYLIN-3867 - Enable JDBC to use key store &amp;amp; trust store for https connection&lt;/h3&gt;
-&lt;p&gt;通过使用HTTPS,保护了JDBC使用的身份验证信息,使得Kylin更加安全&lt;/p&gt;
+&lt;p&gt;By using HTTPS, the authentication information used by JDBC is protected, making Kylin more secure.&lt;/p&gt;
 
 &lt;h3 id=&quot;kylin-3905---enable-shrunken-dictionary-default&quot;&gt;KYLIN-3905 - Enable shrunken dictionary default&lt;/h3&gt;
-&lt;p&gt;默认开启 shrunken dictionary,针对高基维进行精确去重的场景,可以显著减少构建用时。&lt;/p&gt;
+&lt;p&gt;By default, the shrunken dictionary is enabled, and the precise counting scene for high cardinal dimensions can significantly reduce the build time.&lt;/p&gt;
 
 &lt;h3 id=&quot;kylin-3839---storage-clean-up-after-the-refreshing-and-deleting-a-segment&quot;&gt;KYLIN-3839 - Storage clean up after the refreshing and deleting a segment&lt;/h3&gt;
-&lt;p&gt;更加及时地清除不必要的数据文件&lt;/p&gt;
+&lt;p&gt;Clear unnecessary data files in a timely manner&lt;/p&gt;
 
-&lt;p&gt;&lt;strong&gt;下载&lt;/strong&gt;&lt;/p&gt;
+&lt;p&gt;&lt;strong&gt;Download&lt;/strong&gt;&lt;/p&gt;
 
-&lt;p&gt;要下载Apache Kylin 源代码或二进制包,请访问&lt;a href=&quot;/download&quot;&gt;下载页面&lt;/a&gt; page.&lt;/p&gt;
+&lt;p&gt;To download Apache Kylin v3.0.0-alpha source code or binary package, visit the &lt;a href=&quot;http://kylin.apache.org/download&quot;&gt;download&lt;/a&gt; page.&lt;/p&gt;
 
-&lt;p&gt;&lt;strong&gt;升级&lt;/strong&gt;&lt;/p&gt;
+&lt;p&gt;&lt;strong&gt;Upgrade&lt;/strong&gt;&lt;/p&gt;
 
-&lt;p&gt;参考&lt;a href=&quot;/docs/howto/howto_upgrade.html&quot;&gt;升级指南&lt;/a&gt;.&lt;/p&gt;
+&lt;p&gt;Follow the &lt;a href=&quot;/docs/howto/howto_upgrade.html&quot;&gt;upgrade guide&lt;/a&gt;.&lt;/p&gt;
 
-&lt;p&gt;&lt;strong&gt;反馈&lt;/strong&gt;&lt;/p&gt;
+&lt;p&gt;&lt;strong&gt;Feedback&lt;/strong&gt;&lt;/p&gt;
 
-&lt;p&gt;如果您遇到问题或疑问,请发送邮件至 Apache Kylin dev 或 user 邮件列表:dev@kylin.apache.org,user@kylin.apache.org; 在发送之前,请确保您已通过发送电子邮件至 dev-subscribe@kylin.apache.org 或 user-subscribe@kylin.apache.org 订阅了邮件列表。&lt;/p&gt;
+&lt;p&gt;If you face issue or question, please send mail to Apache Kylin dev or user mailing list: dev@kylin.apache.org , user@kylin.apache.org; Before sending, please make sure you have subscribed the mailing list by dropping an email to dev-subscribe@kylin.apache.org or user-subscribe@kylin.apache.org.&lt;/p&gt;
 
-&lt;p&gt;&lt;em&gt;非常感谢所有贡献Apache Kylin的朋友!&lt;/em&gt;&lt;/p&gt;
+&lt;p&gt;&lt;em&gt;Great thanks to everyone who contributed!&lt;/em&gt;&lt;/p&gt;
 </description>
         <pubDate>Fri, 19 Apr 2019 13:00:00 -0700</pubDate>
-        <link>http://kylin.apache.org/cn_blog/2019/04/19/release-v3.0.0-alpha/</link>
-        <guid isPermaLink="true">http://kylin.apache.org/cn_blog/2019/04/19/release-v3.0.0-alpha/</guid>
+        <link>http://kylin.apache.org/blog/2019/04/19/release-v3.0.0-alpha/</link>
+        <guid isPermaLink="true">http://kylin.apache.org/blog/2019/04/19/release-v3.0.0-alpha/</guid>
         
         
-        <category>cn_blog</category>
+        <category>blog</category>
         
       </item>
     
       <item>
-        <title>Apache Kylin v3.0.0-alpha Release Announcement</title>
-        <description>&lt;p&gt;The Apache Kylin community is pleased to announce the release of Apache Kylin v3.0.0-alpha.&lt;/p&gt;
+        <title>Apache Kylin v3.0.0-alpha 发布</title>
+        <description>&lt;p&gt;近日 Apache Kylin 社区很高兴地宣布,Apache Kylin v3.0.0-alpha 正式发布。&lt;/p&gt;
 
-&lt;p&gt;Apache Kylin is an open source Distributed Analytics Engine designed to provide SQL interface and multi-dimensional analysis (OLAP) on Big Data supporting extremely large datasets.&lt;/p&gt;
+&lt;p&gt;Apache Kylin 是一个开源的分布式分析引擎,旨在为极大数据集提供 SQL 接口和多维分析(OLAP)的能力。&lt;/p&gt;
 
-&lt;p&gt;This is the first release of the new generation v3.x, the main feature introduced is the Real-time OLAP. All of the changes can be found in the &lt;a href=&quot;/docs/release_notes.html&quot;&gt;release notes&lt;/a&gt;. Here we just highlight the main features.&lt;/p&gt;
+&lt;p&gt;这是 Kylin 下一代 v3.x 的第一个发布版本,用于早期预览,主要的功能是实时 (Real-time) OLAP。完整的改动列表请参见&lt;a href=&quot;/docs/release_notes.html&quot;&gt;release notes&lt;/a&gt;;这里挑一些主要改进做说明。&lt;/p&gt;
 
-&lt;h1 id=&quot;important-features&quot;&gt;Important features&lt;/h1&gt;
+&lt;h1 id=&quot;section&quot;&gt;重要新功能&lt;/h1&gt;
 
-&lt;h3 id=&quot;kylin-3654---real-time-olap&quot;&gt;KYLIN-3654 - Real-time OLAP&lt;/h3&gt;
-&lt;p&gt;With the newly introduced Kylin real-time receiver and coordinator components, Kylin can implement a millisecond-level data preparation delay for streaming data from sources like Apache Kafka. This means since v3.0 on,  Kylin can support sub-second level OLAP over historical batch data, near real-time streaming as well as real-time streaming. The user can use one OLAP platform to serve different scenarios. This solution has been deployed and verified in early adopters like eBay since 2018. For how to enable it, please refer to &lt;a href=&quot;/docs30/tutorial/realtime_olap.html&quot;&gt;this tutorial&lt;/a&gt;.&lt;/p&gt;
+&lt;h3 id=&quot;kylin-3654----olap&quot;&gt;KYLIN-3654 - 实时 OLAP&lt;/h3&gt;
+&lt;p&gt;随着引入新的 real-time receiver 和 coordinator 组件,Kylin 能够实现毫秒级别的数据准备延迟,数据源来自流式数据如 Apache Kafka。这意味着,从 v3.0 开始,Kylin 既能够支持历史批量数据的 OLAP,也支持对流式数据的准实时(Near real-time)以及完全实时(real-time)分析。用户可以使用一个 OLAP 平台来服务不同的使用场景。此方案已经在早期用户如 eBay 得到部署和验证。关于如何使用此功能,请参考&lt;a href=&quot;/docs30/tutorial/realtime_olap.html&quot;&gt;æ­¤æ•
 ™ç¨‹&lt;/a&gt;。&lt;/p&gt;
 
-&lt;h3 id=&quot;kylin-3795---submit-spark-jobs-via-apache-livy&quot;&gt;KYLIN-3795 - Submit Spark jobs via Apache Livy&lt;/h3&gt;
-&lt;p&gt;This feature allows the administrator to configure Kylin to integrate with Apache Livy (incubating) for Spark job submissions. The Spark job is submitted to the Livy Server through Livy’s REST API, instead of starting the Spark Driver process in local, which facilitates the management and monitoring of the Spark resources, and also releases the pressure of the nodes where the Kylin job server is running.&lt;/p&gt;
+&lt;h3 id=&quot;kylin-3795----apache-livy--spark-&quot;&gt;KYLIN-3795 - 通过 Apache Livy 递交 Spark 任务&lt;/h3&gt;
+&lt;p&gt;这个功能允许管理员为 Kylin 配置使用 Apache Livy (incubating) 来完成任务的递交。Spark 作业的提交通过 Livy 的 REST API 来提交,而无需在本地启动 Spark Driver 进程,从而方便对 Spark 资源的管理监控,同时也降低对 Kylin 任务进程所在节点的压力。&lt;/p&gt;
 
-&lt;h3 id=&quot;kylin-3820---a-curator-based-job-scheduler&quot;&gt;KYLIN-3820 - A curator-based job scheduler&lt;/h3&gt;
-&lt;p&gt;A new job scheduler is added to automatically discover the Kylin nodes and do an automatic leader selection among them (only the leader will submit jobs). With this feature, you can easily deploy and scale out Kylin nodes without manually update the node address in &lt;code class=&quot;highlighter-rouge&quot;&gt;kylin.properties&lt;/code&gt; and restart Kylin to take effective.&lt;/p&gt;
+&lt;h3 id=&quot;kylin-3820----curator-&quot;&gt;KYLIN-3820 - 基于 Curator 的任务节点分配和服务发现&lt;/h3&gt;
+&lt;p&gt;新增一种基于Apache Zookeeper 和 Curator作业调度器,可以自动发现 Kylin 节点,并自动分配一个节点来进行任务的管理以及故障恢复。有了这个功能后,管理员可以更加容易地部署和扩展 Kylin 节点,而不再需要在 &lt;code class=&quot;highlighter-rouge&quot;&gt;kylin.properties&lt;/code&gt; 中配置每个 Kylin 节点的地址并重启 Kylin 以使之生效。&lt;/p&gt;
 
-&lt;h1 id=&quot;other-enhancements&quot;&gt;Other enhancements&lt;/h1&gt;
+&lt;h1 id=&quot;section-1&quot;&gt;其它改进&lt;/h1&gt;
 
-&lt;h3 id=&quot;kylin-3716---fastthreadlocal-replaces-threadlocal&quot;&gt;KYLIN-3716 - FastThreadLocal replaces ThreadLocal&lt;/h3&gt;
-&lt;p&gt;Using FastThreadLocal instead of ThreadLocal can improve Kylin’s overall performance to some extent.&lt;/p&gt;
+&lt;h3 id=&quot;kylin-3716---fastthreadlocal--threadlocal&quot;&gt;KYLIN-3716 - FastThreadLocal 替换 ThreadLocal&lt;/h3&gt;
+&lt;p&gt;使用 Netty 中的 FastThreadLocal 替代 JDK 原生的 ThreadLocal,可以一定程度上提升 Kylin 在高并发下的性能。&lt;/p&gt;
 
 &lt;h3 id=&quot;kylin-3867---enable-jdbc-to-use-key-store--trust-store-for-https-connection&quot;&gt;KYLIN-3867 - Enable JDBC to use key store &amp;amp; trust store for https connection&lt;/h3&gt;
-&lt;p&gt;By using HTTPS, the authentication information used by JDBC is protected, making Kylin more secure.&lt;/p&gt;
+&lt;p&gt;通过使用HTTPS,保护了JDBC使用的身份验证信息,使得Kylin更加安全&lt;/p&gt;
 
 &lt;h3 id=&quot;kylin-3905---enable-shrunken-dictionary-default&quot;&gt;KYLIN-3905 - Enable shrunken dictionary default&lt;/h3&gt;
-&lt;p&gt;By default, the shrunken dictionary is enabled, and the precise counting scene for high cardinal dimensions can significantly reduce the build time.&lt;/p&gt;
+&lt;p&gt;默认开启 shrunken dictionary,针对高基维进行精确去重的场景,可以显著减少构建用时。&lt;/p&gt;
 
 &lt;h3 id=&quot;kylin-3839---storage-clean-up-after-the-refreshing-and-deleting-a-segment&quot;&gt;KYLIN-3839 - Storage clean up after the refreshing and deleting a segment&lt;/h3&gt;
-&lt;p&gt;Clear unnecessary data files in a timely manner&lt;/p&gt;
+&lt;p&gt;更加及时地清除不必要的数据文件&lt;/p&gt;
 
-&lt;p&gt;&lt;strong&gt;Download&lt;/strong&gt;&lt;/p&gt;
+&lt;p&gt;&lt;strong&gt;下载&lt;/strong&gt;&lt;/p&gt;
 
-&lt;p&gt;To download Apache Kylin v3.0.0-alpha source code or binary package, visit the &lt;a href=&quot;http://kylin.apache.org/download&quot;&gt;download&lt;/a&gt; page.&lt;/p&gt;
+&lt;p&gt;要下载Apache Kylin 源代码或二进制包,请访问&lt;a href=&quot;/download&quot;&gt;下载页面&lt;/a&gt; page.&lt;/p&gt;
 
-&lt;p&gt;&lt;strong&gt;Upgrade&lt;/strong&gt;&lt;/p&gt;
+&lt;p&gt;&lt;strong&gt;升级&lt;/strong&gt;&lt;/p&gt;
 
-&lt;p&gt;Follow the &lt;a href=&quot;/docs/howto/howto_upgrade.html&quot;&gt;upgrade guide&lt;/a&gt;.&lt;/p&gt;
+&lt;p&gt;参考&lt;a href=&quot;/docs/howto/howto_upgrade.html&quot;&gt;升级指南&lt;/a&gt;.&lt;/p&gt;
 
-&lt;p&gt;&lt;strong&gt;Feedback&lt;/strong&gt;&lt;/p&gt;
+&lt;p&gt;&lt;strong&gt;反馈&lt;/strong&gt;&lt;/p&gt;
 
-&lt;p&gt;If you face issue or question, please send mail to Apache Kylin dev or user mailing list: dev@kylin.apache.org , user@kylin.apache.org; Before sending, please make sure you have subscribed the mailing list by dropping an email to dev-subscribe@kylin.apache.org or user-subscribe@kylin.apache.org.&lt;/p&gt;
+&lt;p&gt;如果您遇到问题或疑问,请发送邮件至 Apache Kylin dev 或 user 邮件列表:dev@kylin.apache.org,user@kylin.apache.org; 在发送之前,请确保您已通过发送电子邮件至 dev-subscribe@kylin.apache.org 或 user-subscribe@kylin.apache.org 订阅了邮件列表。&lt;/p&gt;
 
-&lt;p&gt;&lt;em&gt;Great thanks to everyone who contributed!&lt;/em&gt;&lt;/p&gt;
+&lt;p&gt;&lt;em&gt;非常感谢所有贡献Apache Kylin的朋友!&lt;/em&gt;&lt;/p&gt;
 </description>
         <pubDate>Fri, 19 Apr 2019 13:00:00 -0700</pubDate>
-        <link>http://kylin.apache.org/blog/2019/04/19/release-v3.0.0-alpha/</link>
-        <guid isPermaLink="true">http://kylin.apache.org/blog/2019/04/19/release-v3.0.0-alpha/</guid>
+        <link>http://kylin.apache.org/cn_blog/2019/04/19/release-v3.0.0-alpha/</link>
+        <guid isPermaLink="true">http://kylin.apache.org/cn_blog/2019/04/19/release-v3.0.0-alpha/</guid>
         
         
-        <category>blog</category>
+        <category>cn_blog</category>
         
       </item>
     
@@ -1455,84 +1455,6 @@ The checkpoint info is the smallest part
       </item>
     
       <item>
-        <title>Apache Kylin v2.6.0 Release Announcement</title>
-        <description>&lt;p&gt;The Apache Kylin community is pleased to announce the release of Apache Kylin v2.6.0.&lt;/p&gt;
-
-&lt;p&gt;Apache Kylin is an open source Distributed Analytics Engine designed to provide SQL interface and multi-dimensional analysis (OLAP) on Big Data supporting extremely large datasets.&lt;/p&gt;
-
-&lt;p&gt;This is a major release after 2.5.0, including many enhancements. All of the changes can be found in the &lt;a href=&quot;https://kylin.apache.org/docs/release_notes.html&quot;&gt;release notes&lt;/a&gt;. Here just highlight the major ones:&lt;/p&gt;
-
-&lt;h3 id=&quot;sdk-for-jdbc-sources&quot;&gt;SDK for JDBC sources&lt;/h3&gt;
-&lt;p&gt;Apache Kylin has already supported several data sources like Amazon Redshift, SQL Server through JDBC. &lt;br /&gt;
-To help developers handle SQL dialect differences and easily implement a new data source through JDBC, Kylin provides a new data source SDK with APIs for:&lt;br /&gt;
-* Synchronize metadata and data from JDBC source&lt;br /&gt;
-* Build cube from JDBC source&lt;br /&gt;
-* Query pushdown to JDBC source engine when cube is unmatched&lt;/p&gt;
-
-&lt;p&gt;Check KYLIN-3552 for more.&lt;/p&gt;
-
-&lt;h3 id=&quot;memcached-as-distributed-cache&quot;&gt;Memcached as distributed cache&lt;/h3&gt;
-&lt;p&gt;In the past, query caches are not efficiently used in Kylin due to two aspects: aggressive cache expiration strategy and local cache. &lt;br /&gt;
-Because of the aggressive cache expiration strategy, useful caches are often cleaned up unnecessarily. &lt;br /&gt;
-Because query caches are stored in local servers, they cannot be shared between servers. &lt;br /&gt;
-And because of the size limitation of local cache, not all useful query results can be cached.&lt;/p&gt;
-
-&lt;p&gt;To deal with these shortcomings, we change the query cache expiration strategy by signature checking and introduce the memcached as Kylin’s distributed cache so that Kylin servers are able to share cache between servers. &lt;br /&gt;
-And it’s easy to add memcached servers to scale out distributed cache. With enough memcached servers, we can cached things as much as possible. &lt;br /&gt;
-Then we also introduce segment level query cache which can not only speed up query but also reduce the rpcs to HBase. &lt;br /&gt;
-The related tasks are KYLIN-2895, KYLIN-2894, KYLIN-2896, KYLIN-2897, KYLIN-2898, KYLIN-2899.&lt;/p&gt;
-
-&lt;h3 id=&quot;forkjoinpool-for-fast-cubing&quot;&gt;ForkJoinPool for fast cubing&lt;/h3&gt;
-&lt;p&gt;In the past, fast cubing uses split threads, task threads and main thread to do the cube building, there is complex join and error handling logic.&lt;/p&gt;
-
-&lt;p&gt;The new implement leverages the ForkJoinPool from JDK, the event split logic is handled in&lt;br /&gt;
-main thread. Cuboid task and sub-tasks are handled in fork join pool, cube results are collected&lt;br /&gt;
-async and can be write to output earlier. Check KYLIN-2932 for more.&lt;/p&gt;
-
-&lt;h3 id=&quot;improve-hllcounter-performance&quot;&gt;Improve HLLCounter performance&lt;/h3&gt;
-&lt;p&gt;In the past, the way to create HLLCounter and to compute harmonic mean are not efficient.&lt;/p&gt;
-
-&lt;p&gt;The new implement improve the HLLCounter creation by copy register from another HLLCounter instead of merge. To compute harmonic mean in the HLLCSnapshot, it does the enhancement by &lt;br /&gt;
-* using table to cache all 1/2^r  without computing on the fly&lt;br /&gt;
-* remove floating addition by using integer addition in the bigger loop&lt;br /&gt;
-* remove branch, e.g. needn’t checking whether registers[i] is zero or not, although this is minor improvement.&lt;/p&gt;
-
-&lt;p&gt;Check KYLIN-3656 for more.&lt;/p&gt;
-
-&lt;h3 id=&quot;improve-cuboid-recommendation-algorithm&quot;&gt;Improve Cuboid Recommendation Algorithm&lt;/h3&gt;
-&lt;p&gt;In the past, to add cuboids which are not prebuilt, the cube planner turns to mandatory cuboids which are selected if its rollup row count is above some threshold. &lt;br /&gt;
-There are two shortcomings:&lt;br /&gt;
-* The way to estimate the rollup row count is not good&lt;br /&gt;
-* It’s hard to determine the threshold of rollup row count for recommending mandatory cuboids&lt;/p&gt;
-
-&lt;p&gt;The new implement improves the way to estimate the row count of un-prebuilt cuboids by rollup ratio rather than exact rollup row count. &lt;br /&gt;
-With better estimated row counts for un-prebuilt cuboids, the cost-based cube planner algorithm will decide which cuboid to be built or not and the threshold for previous mandatory cuboids is not needed. &lt;br /&gt;
-By this improvement, we don’t need the threshold for mandatory cuboids recommendation, and mandatory cuboids can only be manually set and will not be recommended. Check KYLIN-3540 for more.&lt;/p&gt;
-
-&lt;p&gt;&lt;strong&gt;Download&lt;/strong&gt;&lt;/p&gt;
-
-&lt;p&gt;To download Apache Kylin v2.6.0 source code or binary package, visit the &lt;a href=&quot;http://kylin.apache.org/download&quot;&gt;download&lt;/a&gt; page.&lt;/p&gt;
-
-&lt;p&gt;&lt;strong&gt;Upgrade&lt;/strong&gt;&lt;/p&gt;
-
-&lt;p&gt;Follow the &lt;a href=&quot;/docs/howto/howto_upgrade.html&quot;&gt;upgrade guide&lt;/a&gt;.&lt;/p&gt;
-
-&lt;p&gt;&lt;strong&gt;Feedback&lt;/strong&gt;&lt;/p&gt;
-
-&lt;p&gt;If you face issue or question, please send mail to Apache Kylin dev or user mailing list: dev@kylin.apache.org , user@kylin.apache.org; Before sending, please make sure you have subscribed the mailing list by dropping an email to dev-subscribe@kylin.apache.org or user-subscribe@kylin.apache.org.&lt;/p&gt;
-
-&lt;p&gt;&lt;em&gt;Great thanks to everyone who contributed!&lt;/em&gt;&lt;/p&gt;
-</description>
-        <pubDate>Fri, 18 Jan 2019 12:00:00 -0800</pubDate>
-        <link>http://kylin.apache.org/blog/2019/01/18/release-v2.6.0/</link>
-        <guid isPermaLink="true">http://kylin.apache.org/blog/2019/01/18/release-v2.6.0/</guid>
-        
-        
-        <category>blog</category>
-        
-      </item>
-    
-      <item>
         <title>Apache Kylin v2.6.0 正式发布</title>
         <description>&lt;p&gt;近日Apache Kylin 社区很高兴地宣布,Apache Kylin 2.6.0 正式发布。&lt;/p&gt;
 
@@ -1611,5 +1533,83 @@ By this improvement, we don’t need
         
       </item>
     
+      <item>
+        <title>Apache Kylin v2.6.0 Release Announcement</title>
+        <description>&lt;p&gt;The Apache Kylin community is pleased to announce the release of Apache Kylin v2.6.0.&lt;/p&gt;
+
+&lt;p&gt;Apache Kylin is an open source Distributed Analytics Engine designed to provide SQL interface and multi-dimensional analysis (OLAP) on Big Data supporting extremely large datasets.&lt;/p&gt;
+
+&lt;p&gt;This is a major release after 2.5.0, including many enhancements. All of the changes can be found in the &lt;a href=&quot;https://kylin.apache.org/docs/release_notes.html&quot;&gt;release notes&lt;/a&gt;. Here just highlight the major ones:&lt;/p&gt;
+
+&lt;h3 id=&quot;sdk-for-jdbc-sources&quot;&gt;SDK for JDBC sources&lt;/h3&gt;
+&lt;p&gt;Apache Kylin has already supported several data sources like Amazon Redshift, SQL Server through JDBC. &lt;br /&gt;
+To help developers handle SQL dialect differences and easily implement a new data source through JDBC, Kylin provides a new data source SDK with APIs for:&lt;br /&gt;
+* Synchronize metadata and data from JDBC source&lt;br /&gt;
+* Build cube from JDBC source&lt;br /&gt;
+* Query pushdown to JDBC source engine when cube is unmatched&lt;/p&gt;
+
+&lt;p&gt;Check KYLIN-3552 for more.&lt;/p&gt;
+
+&lt;h3 id=&quot;memcached-as-distributed-cache&quot;&gt;Memcached as distributed cache&lt;/h3&gt;
+&lt;p&gt;In the past, query caches are not efficiently used in Kylin due to two aspects: aggressive cache expiration strategy and local cache. &lt;br /&gt;
+Because of the aggressive cache expiration strategy, useful caches are often cleaned up unnecessarily. &lt;br /&gt;
+Because query caches are stored in local servers, they cannot be shared between servers. &lt;br /&gt;
+And because of the size limitation of local cache, not all useful query results can be cached.&lt;/p&gt;
+
+&lt;p&gt;To deal with these shortcomings, we change the query cache expiration strategy by signature checking and introduce the memcached as Kylin’s distributed cache so that Kylin servers are able to share cache between servers. &lt;br /&gt;
+And it’s easy to add memcached servers to scale out distributed cache. With enough memcached servers, we can cached things as much as possible. &lt;br /&gt;
+Then we also introduce segment level query cache which can not only speed up query but also reduce the rpcs to HBase. &lt;br /&gt;
+The related tasks are KYLIN-2895, KYLIN-2894, KYLIN-2896, KYLIN-2897, KYLIN-2898, KYLIN-2899.&lt;/p&gt;
+
+&lt;h3 id=&quot;forkjoinpool-for-fast-cubing&quot;&gt;ForkJoinPool for fast cubing&lt;/h3&gt;
+&lt;p&gt;In the past, fast cubing uses split threads, task threads and main thread to do the cube building, there is complex join and error handling logic.&lt;/p&gt;
+
+&lt;p&gt;The new implement leverages the ForkJoinPool from JDK, the event split logic is handled in&lt;br /&gt;
+main thread. Cuboid task and sub-tasks are handled in fork join pool, cube results are collected&lt;br /&gt;
+async and can be write to output earlier. Check KYLIN-2932 for more.&lt;/p&gt;
+
+&lt;h3 id=&quot;improve-hllcounter-performance&quot;&gt;Improve HLLCounter performance&lt;/h3&gt;
+&lt;p&gt;In the past, the way to create HLLCounter and to compute harmonic mean are not efficient.&lt;/p&gt;
+
+&lt;p&gt;The new implement improve the HLLCounter creation by copy register from another HLLCounter instead of merge. To compute harmonic mean in the HLLCSnapshot, it does the enhancement by &lt;br /&gt;
+* using table to cache all 1/2^r  without computing on the fly&lt;br /&gt;
+* remove floating addition by using integer addition in the bigger loop&lt;br /&gt;
+* remove branch, e.g. needn’t checking whether registers[i] is zero or not, although this is minor improvement.&lt;/p&gt;
+
+&lt;p&gt;Check KYLIN-3656 for more.&lt;/p&gt;
+
+&lt;h3 id=&quot;improve-cuboid-recommendation-algorithm&quot;&gt;Improve Cuboid Recommendation Algorithm&lt;/h3&gt;
+&lt;p&gt;In the past, to add cuboids which are not prebuilt, the cube planner turns to mandatory cuboids which are selected if its rollup row count is above some threshold. &lt;br /&gt;
+There are two shortcomings:&lt;br /&gt;
+* The way to estimate the rollup row count is not good&lt;br /&gt;
+* It’s hard to determine the threshold of rollup row count for recommending mandatory cuboids&lt;/p&gt;
+
+&lt;p&gt;The new implement improves the way to estimate the row count of un-prebuilt cuboids by rollup ratio rather than exact rollup row count. &lt;br /&gt;
+With better estimated row counts for un-prebuilt cuboids, the cost-based cube planner algorithm will decide which cuboid to be built or not and the threshold for previous mandatory cuboids is not needed. &lt;br /&gt;
+By this improvement, we don’t need the threshold for mandatory cuboids recommendation, and mandatory cuboids can only be manually set and will not be recommended. Check KYLIN-3540 for more.&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;Download&lt;/strong&gt;&lt;/p&gt;
+
+&lt;p&gt;To download Apache Kylin v2.6.0 source code or binary package, visit the &lt;a href=&quot;http://kylin.apache.org/download&quot;&gt;download&lt;/a&gt; page.&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;Upgrade&lt;/strong&gt;&lt;/p&gt;
+
+&lt;p&gt;Follow the &lt;a href=&quot;/docs/howto/howto_upgrade.html&quot;&gt;upgrade guide&lt;/a&gt;.&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;Feedback&lt;/strong&gt;&lt;/p&gt;
+
+&lt;p&gt;If you face issue or question, please send mail to Apache Kylin dev or user mailing list: dev@kylin.apache.org , user@kylin.apache.org; Before sending, please make sure you have subscribed the mailing list by dropping an email to dev-subscribe@kylin.apache.org or user-subscribe@kylin.apache.org.&lt;/p&gt;
+
+&lt;p&gt;&lt;em&gt;Great thanks to everyone who contributed!&lt;/em&gt;&lt;/p&gt;
+</description>
+        <pubDate>Fri, 18 Jan 2019 12:00:00 -0800</pubDate>
+        <link>http://kylin.apache.org/blog/2019/01/18/release-v2.6.0/</link>
+        <guid isPermaLink="true">http://kylin.apache.org/blog/2019/01/18/release-v2.6.0/</guid>
+        
+        
+        <category>blog</category>
+        
+      </item>
+    
   </channel>
 </rss>

Added: kylin/site/images/Hive-Global-Dictionary/cube-level-config.png
URL: http://svn.apache.org/viewvc/kylin/site/images/Hive-Global-Dictionary/cube-level-config.png?rev=1864708&view=auto
==============================================================================
Binary file - no diff available.

Propchange: kylin/site/images/Hive-Global-Dictionary/cube-level-config.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: kylin/site/images/Hive-Global-Dictionary/hive-global-dict-table.png
URL: http://svn.apache.org/viewvc/kylin/site/images/Hive-Global-Dictionary/hive-global-dict-table.png?rev=1864708&view=auto
==============================================================================
Binary file - no diff available.

Propchange: kylin/site/images/Hive-Global-Dictionary/hive-global-dict-table.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: kylin/site/images/Hive-Global-Dictionary/set-hive-dict-column.png
URL: http://svn.apache.org/viewvc/kylin/site/images/Hive-Global-Dictionary/set-hive-dict-column.png?rev=1864708&view=auto
==============================================================================
Binary file - no diff available.

Propchange: kylin/site/images/Hive-Global-Dictionary/set-hive-dict-column.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: kylin/site/images/Hive-Global-Dictionary/three-added-steps.png
URL: http://svn.apache.org/viewvc/kylin/site/images/Hive-Global-Dictionary/three-added-steps.png?rev=1864708&view=auto
==============================================================================
Binary file - no diff available.

Propchange: kylin/site/images/Hive-Global-Dictionary/three-added-steps.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream