Added: kylin/site/docs23/tutorial/cube_streaming.html URL: http://svn.apache.org/viewvc/kylin/site/docs23/tutorial/cube_streaming.html?rev=1822508&view=auto ============================================================================== --- kylin/site/docs23/tutorial/cube_streaming.html (added) +++ kylin/site/docs23/tutorial/cube_streaming.html Mon Jan 29 14:05:18 2018 @@ -0,0 +1,4334 @@ +<!-- +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +--> + +<!doctype html> +<html> + <!-- +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +--> + +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <title>Apache Kylin | Scalable Cubing from Kafka</title> + <meta name="description" content="Apache Kylin Home"> + <meta name="author" content="Apache Kylin"> + <link rel="shortcut icon" href="fav.png" type="image/png"> + + + +<link rel="stylesheet" href="/assets/css/animate.css"> +<!-- Bootstrap --> +<link rel="stylesheet" href="/assets/css/bootstrap.min.css"> + +<!-- Fonts --> +<!-- <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Alice|Open+Sans:400,300,700"> --> + +<!-- Icons --> +<link rel="stylesheet" href="/assets/css/font-awesome.min.css"> + + <!-- Custom styles --> + <link rel="stylesheet" href="/assets/css/styles.css"> + <link rel="stylesheet" href="/assets/css/docs.css"> + <link rel="stylesheet" href="/assets/css/pygments.css"> + + <link rel="canonical" href="http://kylin.apache.org/docs23/tutorial/cube_streaming.html"> + <link rel="alternate" type="application/rss+xml" title="Apache Kylin" href="http://kylin.apache.org/feed.xml" /> + +<!--[if lt IE 9]> <script src="assets/js/html5shiv.js"></script> <![endif]--> +<script> + (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ + (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), + m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) + })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); + + //oringal tracker for kylin.io + ga('create', 'UA-55534813-1', 'auto'); + //new tracker for kylin.apache.org + ga('create', 'UA-55534813-2', 'auto', {'name':'toplevel'}); + + ga('send', 'pageview'); + ga('toplevel.send', 'pageview'); + + +</script> +<script type="text/javascript" src="/assets/js/jquery-1.9.1.min.js"></script> +<script type="text/javascript" src="/assets/js/nside.js"></script> </script> +<script type="text/javascript" src="/assets/js/nnav.js"></script> </script> +</head> + + <body> + <!-- +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +--> + +<header id="header" > + + <div id="head" class="parallax" parallax-speed="3" > + <div id="logo" class="text-center"> <img class="img-circle" id="circlelogo" src="/assets/images/kylin_logo.jpg"> <span class="title" >Apache Kylinâ¢</span> <span class="tagline">Extreme OLAP Engine for Big Data</span> + </div> + <div class="text-center" style=" + position: relative; + top: 66px; + width: 1080px; + margin: 0 auto; + z-index: 11; + margin-top: -253px; + text-align: right;" + > + <a href="http://apache.org/foundation/contributing.html" title="Support Apache" style="margin-left: 150px;"> + <img src="https://www.apache.org/images/SupportApache-small.png" style="height: 150px; width: 150px;"> + </a> + </div> + </div> + + + <!-- Main Menu --> + <nav class="navbar navbar-default" role="navigation" id="nav-wrapper"> + <div class="container-fluid" id="nav"> + <!-- + <img class="img-circle" width="40px" height="40px" id="circlelogo" src="/assets/images/kylin_logo.jpg"> + --> + <!-- Brand and toggle get grouped for better mobile display --> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + + </div> + + <!-- Collect the nav links, forms, and other content for toggling --> + <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> + <ul class="nav navbar-nav"> + <li><a href="/">Home</a></li> + <li><a href="/docs21" >Docs</a></li> + <li><a href="/download">Download</li> + <li><a href="/community" >Community</a></li> + <li><a href="/development" >Development</a></li> + <li><a href="/blog">Blog</li> + <li><a href="/cn" >䏿ç</a></li> + <li><a href="https://twitter.com/apachekylin" target="_blank" class="fa fa-twitter fa-lg" title="Twitter: @ApacheKylin" ></a></li> + <li><a href="https://github.com/apache/kylin" target="_blank" class="fa fa-github-alt fa-lg" title="Github: apache/kylin" ></a></li> + <li><a href="https://www.facebook.com/kylinio" target="_blank" class="fa fa-facebook fa-lg" title="Facebook: kylin.io" ></a></li> + </ul> + </div><!-- /.navbar-collapse --> + </div><!-- /.container-fluid --> +</nav> + </header> + + + <div class="container"> + <div class="row"> + <!-- +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +--> + +<div class="col-md-3 col-lg-3 col-xs-4 aside1 visible-md visible-lg" id="nside1" style=" padding-top: 2em"> + <ul class="nav nav-pills nav-stacked"> + + <li><a href="#titleGetting Started" data-toggle="collapse" id="navtitle">Getting Started</a></li> + <div class="collapse in"> + <div class="list-group" id="list1"> + <ul style="list-style-type:disc"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/index.html" class="list-group-item-lay pjaxlink" id="navlist">Overview</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/release_notes.html" class="list-group-item-lay pjaxlink" id="navlist">Release Notes</a></li> + + + + + + + + + + + + + + + + + + <li><a href="/docs23/gettingstarted/concepts.html" class="list-group-item-lay pjaxlink" id="navlist">Technical Concepts</a></li> + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/gettingstarted/terminology.html" class="list-group-item-lay pjaxlink" id="navlist">Terminology</a></li> + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/gettingstarted/faq.html" class="list-group-item-lay pjaxlink" id="navlist">FAQ</a></li> + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/gettingstarted/events.html" class="list-group-item-lay pjaxlink" id="navlist">Events and Conferences</a></li> + + + + + + + + + + + + + + + + <li><a href="/docs23/gettingstarted/best_practices.html" class="list-group-item-lay pjaxlink" id="navlist">Community Best Practices</a></li> + + + + + + + + + <ul> + </div> +</div> + + <li><a href="#titleInstallation" data-toggle="collapse" id="navtitle">Installation</a></li> + <div class="collapse in"> + <div class="list-group" id="list1"> + <ul style="list-style-type:disc"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/install/index.html" class="list-group-item-lay pjaxlink" id="navlist">Installation Guide</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/install/hadoop_env.html" class="list-group-item-lay pjaxlink" id="navlist">Hadoop Environment</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/install/kylin_cluster.html" class="list-group-item-lay pjaxlink" id="navlist">Deploy in Cluster Mode</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/install/advance_settings.html" class="list-group-item-lay pjaxlink" id="navlist">Advanced Settings</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/install/kylin_docker.html" class="list-group-item-lay pjaxlink" id="navlist">Run Kylin with Docker</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/install/kylin_aws_emr.html" class="list-group-item-lay pjaxlink" id="navlist">Install Kylin on AWS EMR</a></li> + + + + + + + + + <ul> + </div> +</div> + + <li><a href="#titleTutorial" data-toggle="collapse" id="navtitle">Tutorial</a></li> + <div class="collapse in"> + <div class="list-group" id="list1"> + <ul style="list-style-type:disc"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/tutorial/kylin_sample.html" class="list-group-item-lay pjaxlink" id="navlist">Quick Start with Sample Cube</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/tutorial/web.html" class="list-group-item-lay pjaxlink" id="navlist">Web Interface</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/tutorial/create_cube.html" class="list-group-item-lay pjaxlink" id="navlist">Cube Wizard</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/tutorial/cube_build_job.html" class="list-group-item-lay pjaxlink" id="navlist">Cube Build and Job Monitoring</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/tutorial/acl.html" class="list-group-item-lay pjaxlink" id="navlist">Cube Permission (v2.1.x)</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/tutorial/project_level_acl.html" class="list-group-item-lay pjaxlink" id="navlist">Project Level ACL</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/tutorial/cube_spark.html" class="list-group-item-lay pjaxlink" id="navlist">Build Cube with Spark</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/tutorial/cube_build_performance.html" class="list-group-item-lay pjaxlink" id="navlist">Cube Build Tuning</a></li> + + + + + + + + + <ul> + </div> +</div> + + <li><a href="#titleIntegration" data-toggle="collapse" id="navtitle">Integration</a></li> + <div class="collapse in"> + <div class="list-group" id="list1"> + <ul style="list-style-type:disc"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/tutorial/odbc.html" class="list-group-item-lay pjaxlink" id="navlist">Kylin ODBC Driver</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/tutorial/tableau.html" class="list-group-item-lay pjaxlink" id="navlist">Tableau 8</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/tutorial/tableau_91.html" class="list-group-item-lay pjaxlink" id="navlist">Tableau 9</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/tutorial/powerbi.html" class="list-group-item-lay pjaxlink" id="navlist">MS Excel and Power BI</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/tutorial/microstrategy.html" class="list-group-item-lay pjaxlink" id="navlist">MicroStrategy</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/tutorial/squirrel.html" class="list-group-item-lay pjaxlink" id="navlist">SQuirreL</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/tutorial/flink.html" class="list-group-item-lay pjaxlink" id="navlist">Apache Flink</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/tutorial/hue.html" class="list-group-item-lay pjaxlink" id="navlist">Apache Hue</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/tutorial/Qlik.html" class="list-group-item-lay pjaxlink" id="navlist">Qlik Sense</a></li> + + + + + + + + + <ul> + </div> +</div> + + <li><a href="#titleHow To" data-toggle="collapse" id="navtitle">How To</a></li> + <div class="collapse in"> + <div class="list-group" id="list1"> + <ul style="list-style-type:disc"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/howto/howto_use_restapi.html" class="list-group-item-lay pjaxlink" id="navlist">Use RESTful API</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/howto/howto_build_cube_with_restapi.html" class="list-group-item-lay pjaxlink" id="navlist">Build Cube with API</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/howto/howto_optimize_cubes.html" class="list-group-item-lay pjaxlink" id="navlist">Optimize Cube Design</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/howto/howto_optimize_build.html" class="list-group-item-lay pjaxlink" id="navlist">Optimize Cube Build</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/howto/howto_backup_metadata.html" class="list-group-item-lay pjaxlink" id="navlist">Backup Metadata</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/howto/howto_cleanup_storage.html" class="list-group-item-lay pjaxlink" id="navlist">Cleanup Storage</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/howto/howto_jdbc.html" class="list-group-item-lay pjaxlink" id="navlist">Kylin JDBC Driver</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/howto/howto_upgrade.html" class="list-group-item-lay pjaxlink" id="navlist">Upgrade From Old Versions</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/howto/howto_ldap_and_sso.html" class="list-group-item-lay pjaxlink" id="navlist">Secure with LDAP and SSO</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/howto/howto_use_beeline.html" class="list-group-item-lay pjaxlink" id="navlist">Use Beeline for Hive</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/howto/howto_update_coprocessor.html" class="list-group-item-lay pjaxlink" id="navlist">Update Coprocessor</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/howto/howto_install_ranger_kylin_plugin.html" class="list-group-item-lay pjaxlink" id="navlist">The Ranger Kylin Plugin Installation Guide</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/howto/howto_enable_zookeeper_acl.html" class="list-group-item-lay pjaxlink" id="navlist">Enable zookeeper acl</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/howto/howto_setup_systemcube.html" class="list-group-item-lay pjaxlink" id="navlist">Set Up System Cube</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/howto/howto_use_cube_planner.html" class="list-group-item-lay pjaxlink" id="navlist">Use Cube Planner</a></li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li><a href="/docs23/howto/howto_use_dashboard.html" class="list-group-item-lay pjaxlink" id="navlist">Use Dashboard</a></li> + + + + + + + + + <ul> + </div> +</div> + + + </ul> +</div> + + <div class="col-md-9 col-lg-9 col-xs-14 aside2"> + <div id="container"> + <div id="pjax"> + <h1 class="post-title">Scalable Cubing from Kafka</h1> + + + <article class="post-content" > + <p>Kylin v1.6 releases the scalable streaming cubing function, it leverages Hadoop to consume the data from Kafka to build the cube, you can check <a href="/blog/2016/10/18/new-nrt-streaming/">this blog</a> for the high level design. This doc is a step by step tutorial, illustrating how to create and build a sample cube;</p> + +<h2 id="preparation">Preparation</h2> +<p>To finish this tutorial, you need a Hadoop environment which has kylin v1.6.0 or above installed, and also have a Kafka (v0.10.0 or above) running; Previous Kylin version has a couple issues so please upgrade your Kylin instance at first.</p> + +<p>In this tutorial, we will use Hortonworks HDP 2.2.4 Sandbox VM + Kafka v0.10.0(Scala 2.10) as the environment.</p> + +<h2 id="install-kafka-01000-and-kylin">Install Kafka 0.10.0.0 and Kylin</h2> +<p>Donât use HDP 2.2.4âs build-in Kafka as it is too old, stop it first if it is running.</p> + +<div class="highlight"><pre><code class="language-groff" data-lang="groff">curl -s http://mirrors.tuna.tsinghua.edu.cn/apache/kafka/0.10.0.0/kafka_2.10-0.10.0.0.tgz | tar -xz -C /usr/local/ + +cd /usr/local/kafka_2.10-0.10.0.0/ + +bin/kafka-server-start.sh config/server.properties &</code></pre></div> + +<p>Download the Kylin v1.6 from download page, expand the tar ball in /usr/local/ folder.</p> + +<h2 id="create-sample-kafka-topic-and-populate-data">Create sample Kafka topic and populate data</h2> + +<p>Create a sample topic âkylindemoâ, with 3 partitions:</p> + +<div class="highlight"><pre><code class="language-groff" data-lang="groff">bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 3 --topic kylindemo +Created topic "kylindemo".</code></pre></div> + +<p>Put sample data to this topic; Kylin has an utility class which can do this;</p> + +<div class="highlight"><pre><code class="language-groff" data-lang="groff">export KAFKA_HOME=/usr/local/kafka_2.10-0.10.0.0 +export KYLIN_HOME=/usr/local/apache-kylin-1.6.0-bin + +cd $KYLIN_HOME +./bin/kylin.sh org.apache.kylin.source.kafka.util.KafkaSampleProducer --topic kylindemo --broker localhost:9092</code></pre></div> + +<p>This tool will send 100 records to Kafka every second. Please keep it running during this tutorial. You can check the sample message with kafka-console-consumer.sh now:</p> + +<div class="highlight"><pre><code class="language-groff" data-lang="groff">cd $KAFKA_HOME +bin/kafka-console-consumer.sh --zookeeper localhost:2181 --bootstrap-server localhost:9092 --topic kylindemo --from-beginning +{"amount":63.50375137330458,"category":"TOY","order_time":1477415932581,"device":"Other","qty":4,"user":{"id":"bf249f36-f593-4307-b156-240b3094a1c3","age":21,"gender":"Male"},"currency":"USD","country":"CHINA"} +{"amount":22.806058795736583,"category":"ELECTRONIC","order_time":1477415932591,"device":"Andriod","qty":1,"user":{"id":"00283efe-027e-4ec1-bbed-c2bbda873f1d","age":27,"gender":"Female"},"currency":"USD","country":"INDIA"}</code></pre></div> + +<h2 id="define-a-table-from-streaming">Define a table from streaming</h2> +<p>Start Kylin server with â$KYLIN_HOME/bin/kylin.sh startâ, login Kylin Web GUI at http://sandbox:7070/kylin/, select an existing project or create a new project; Click âModelâ -> âData Sourceâ, then click the icon âAdd Streaming Tableâ;</p> + +<p><img src="/images/tutorial/1.6/Kylin-Cube-Streaming-Tutorial/1_Add_streaming_table.png" alt="" /></p> + +<p>In the pop-up dialogue, enter a sample record which you got from the kafka-console-consumer, click the â»â button, Kylin parses the JSON message and listS all the properties;</p> + +<p>You need give a logic table name for this streaming data source; The name will be used for SQL query later; here enter âSTREAMING_SALES_TABLEâ as an example in the âTable Nameâ field.</p> + +<p>You need select a timestamp field which will be used to identify the time of a message; Kylin can derive other time values like âyear_startâ, âquarter_startâ from this time column, which can give your more flexibility on building and querying the cube. Here check âorder_timeâ. You can deselect those properties which are not needed for cube. Here letâs keep all fields.</p> + +<p>Notice that Kylin supports structured (or say âembeddedâ) message from v1.6, it will convert them into a flat table structure. By default use â_â as the separator of the structed properties.</p> + +<p><img src="/images/tutorial/1.6/Kylin-Cube-Streaming-Tutorial/2_Define_streaming_table.png" alt="" /></p> + +<p>Click âNextâ. On this page, provide the Kafka cluster information; Enter âkylindemoâ as âTopicâ name; The cluster has 1 broker, whose host name is âsandboxâ, port is â9092â, click âSaveâ.</p> + +<p><img src="/images/tutorial/1.6/Kylin-Cube-Streaming-Tutorial/3_Kafka_setting.png" alt="" /></p> + +<p>In âAdvanced settingâ section, the âtimeoutâ and âbuffer sizeâ are the configurations for connecting with Kafka, keep them.</p> + +<p>In âParser Settingâ, by default Kylin assumes your message is JSON format, and each recordâs timestamp column (specified by âtsColNameâ) is a bigint (epoch time) value; in this case, you just need set the âtsColumnâ to âorder_timeâ;</p> + +<p><img src="/images/tutorial/1.6/Kylin-Cube-Streaming-Tutorial/3_Paser_setting.png" alt="" /></p> + +<p>In real case if the timestamp value is a string valued timestamp like âJul 20, 2016 9:59:17 AMâ, you need specify the parser class with âtsParserâ and the time pattern with âtsPatternâ like this:</p> + +<p><img src="/images/tutorial/1.6/Kylin-Cube-Streaming-Tutorial/3_Paser_time.png" alt="" /></p> + +<p>Click âSubmitâ to save the configurations. Now a âStreamingâ table is created.</p> + +<p><img src="/images/tutorial/1.6/Kylin-Cube-Streaming-Tutorial/4_Streaming_table.png" alt="" /></p> + +<h2 id="define-data-model">Define data model</h2> +<p>With the table defined in previous step, now we can create the data model. The step is almost the same as you create a normal data model, but it has two requirement:</p> + +<ul> + <li>Streaming Cube doesnât support join with lookup tables; When define the data model, only select fact table, no lookup table;</li> + <li>Streaming Cube must be partitioned; If youâre going to build the Cube incrementally at minutes level, select âMINUTE_STARTâ as the cubeâs partition date column. If at hours level, select âHOUR_STARTâ.</li> +</ul> + +<p>Here we pick 13 dimension and 2 measure columns:</p> + +<p><img src="/images/tutorial/1.6/Kylin-Cube-Streaming-Tutorial/5_Data_model_dimension.png" alt="" /></p> + +<p><img src="/images/tutorial/1.6/Kylin-Cube-Streaming-Tutorial/6_Data_model_measure.png" alt="" /><br /> +Save the data model.</p> + +<h2 id="create-cube">Create Cube</h2> + +<p>The streaming Cube is almost the same as a normal cube. a couple of points need get your attention:</p> + +<ul> + <li>The partition time column should be a dimension of the Cube. In Streaming OLAP the time is always a query condition, and Kylin will leverage this to narrow down the scanned partitions.</li> + <li>Donât use âorder_timeâ as dimension as that is pretty fine-grained; suggest to use âmintue_startâ, âhour_startâ or other, depends on how you will inspect the data.</li> + <li>Define âyear_startâ, âquarter_startâ, âmonth_startâ, âday_startâ, âhour_startâ, âminute_startâ as a hierarchy to reduce the combinations to calculate.</li> + <li>In the ârefersh settingâ step, create more merge ranges, like 0.5 hour, 4 hours, 1 day, and then 7 days; This will help to control the cube segment number.</li> + <li> + <p>In the ârowkeysâ section, drag&drop the âminute_startâ to the head position, as for streaming queries, the time condition is always appeared; putting it to head will help to narrow down the scan range.</p> + + <p><img src="/images/tutorial/1.6/Kylin-Cube-Streaming-Tutorial/8_Cube_dimension.png" alt="" /></p> + + <p><img src="/images/tutorial/1.6/Kylin-Cube-Streaming-Tutorial/9_Cube_measure.png" alt="" /></p> + + <p><img src="/images/tutorial/1.6/Kylin-Cube-Streaming-Tutorial/10_agg_group.png" alt="" /></p> + + <p><img src="/images/tutorial/1.6/Kylin-Cube-Streaming-Tutorial/11_Rowkey.png" alt="" /></p> + </li> +</ul> + +<p>Save the cube.</p> + +<h2 id="run-a-build">Run a build</h2> + +<p>You can trigger the build from web GUI, by clicking âActionsâ -> âBuildâ, or sending a request to Kylin RESTful API with âcurlâ command:</p> + +<div class="highlight"><pre><code class="language-groff" data-lang="groff">curl -X PUT --user ADMIN:KYLIN -H "Content-Type: application/json;charset=utf-8" -d '{ "sourceOffsetStart": 0, "sourceOffsetEnd": 9223372036854775807, "buildType": "BUILD"}' http://localhost:7070/kylin/api/cubes/{your_cube_name}/build2</code></pre></div> + +<p>Please note the API endpoint is different from a normal cube (this URL end with âbuild2â).</p> + +<p>Here 0 means from the last position, and 9223372036854775807 (Long.MAX_VALUE) means to the end position on Kafka topic. If it is the first time to build (no previous segment), Kylin will seek to beginning of the topics as the start position.</p> + +<p>In the âMonitorâ page, a new job is generated; Wait it 100% finished.</p> + +<h2 id="click-the-insight-tab-compose-a-sql-to-run-eg">Click the âInsightâ tab, compose a SQL to run, e.g:</h2> + +<div class="highlight"><pre><code class="language-groff" data-lang="groff">select minute_start, count(*), sum(amount), sum(qty) from streaming_sales_table group by minute_start order by minute_start</code></pre></div> + +<p>The result looks like below.<br /> +<img src="/images/tutorial/1.6/Kylin-Cube-Streaming-Tutorial/13_Query_result.png" alt="" /></p> + +<h2 id="automate-the-build">Automate the build</h2> + +<p>Once the first build and query got successfully, you can schedule incremental builds at a certain frequency. Kylin will record the offsets of each build; when receive a build request, it will start from the last end position, and then seek the latest offsets from Kafka. With the REST API you can trigger it with any scheduler tools like Linux cron:</p> + +<div class="highlight"><pre><code class="language-groff" data-lang="groff">crontab -e +*/5 * * * * curl -X PUT --user ADMIN:KYLIN -H "Content-Type: application/json;charset=utf-8" -d '{ "sourceOffsetStart": 0, "sourceOffsetEnd": 9223372036854775807, "buildType": "BUILD"}' http://localhost:7070/kylin/api/cubes/{your_cube_name}/build2</code></pre></div> + +<p>Now you can site down and watch the cube be automatically built from streaming. And when the cube segments accumulate to bigger time range, Kylin will automatically merge them into a bigger segment.</p> + +<h2 id="trouble-shootings">Trouble shootings</h2> + +<ul> + <li>You may encounter the following error when run âkylin.shâ:</li> +</ul> + +<div class="highlight"><pre><code class="language-groff" data-lang="groff">Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/kafka/clients/producer/Producer + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2615) + at java.lang.Class.getMethod0(Class.java:2856) + at java.lang.Class.getMethod(Class.java:1668) + at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494) + at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486) +Caused by: java.lang.ClassNotFoundException: org.apache.kafka.clients.producer.Producer + at java.net.URLClassLoader$1.run(URLClassLoader.java:366) + at java.net.URLClassLoader$1.run(URLClassLoader.java:355) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:354) + at java.lang.ClassLoader.loadClass(ClassLoader.java:425) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) + at java.lang.ClassLoader.loadClass(ClassLoader.java:358) + ... 6 more</code></pre></div> + +<p>The reason is Kylin wasnât able to find the proper Kafka client jars; Make sure you have properly set âKAFKA_HOMEâ environment variable.</p> + +<ul> + <li>Get âkilled by adminâ error in the âBuild Cubeâ step</li> +</ul> + +<p>Within a Sandbox VM, YARN may not allocate the requested memory resource to MR job as the âinmemâ cubing algorithm requests more memory. You can bypass this by requesting less memory: edit âconf/kylin_job_conf_inmem.xmlâ, change the following two parameters like this:</p> + +<div class="highlight"><pre><code class="language-groff" data-lang="groff"><property> + <name>mapreduce.map.memory.mb</name> + <value>1072</value> + <description></description> + </property> + + <property> + <name>mapreduce.map.java.opts</name> + <value>-Xmx800m</value> + <description></description> + </property></code></pre></div> + +<ul> + <li>If there already be bunch of history messages in Kafka and you donât want to build from the very beginning, you can trigger a call to set the current end position as the start for the cube:</li> +</ul> + +<div class="highlight"><pre><code class="language-groff" data-lang="groff">curl -X PUT --user ADMIN:KYLIN -H "Content-Type: application/json;charset=utf-8" -d '{ "sourceOffsetStart": 0, "sourceOffsetEnd": 9223372036854775807, "buildType": "BUILD"}' http://localhost:7070/kylin/api/cubes/{your_cube_name}/init_start_offsets</code></pre></div> + +<ul> + <li>If some build job got error and you discard it, there will be a hole (or say gap) left in the Cube. Since each time Kylin will build from last position, you couldnât expect the hole be filled by normal builds. Kylin provides API to check and fill the holes</li> +</ul> + +<p>Check holes:</p> + +<div class="highlight"><pre><code class="language-groff" data-lang="groff">curl -X GET --user ADMINN:KYLIN -H "Content-Type: application/json;charset=utf-8" http://localhost:7070/kylin/api/cubes/{your_cube_name}/holes</code></pre></div> + +<p>If the result is an empty arrary, means there is no hole; Otherwise, trigger Kylin to fill them:</p> + +<div class="highlight"><pre><code class="language-groff" data-lang="groff">curl -X PUT --user ADMINN:KYLIN -H "Content-Type: application/json;charset=utf-8" http://localhost:7070/kylin/api/cubes/{your_cube_name}/holes</code></pre></div> + + + </article> + </div> + </div> + </div> + </div> + </div> + <!-- +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +--> + +<footer id="underfooter"> + <div class="container"> + <div class="row"> + <div class="col-md-12 widget"> + <div class="widget-body" style="text-align:center"> + <a href="http://www.apache.org"> + <img id="asf-logo" alt="Apache Software Foundation" src="/assets/images/feather-small.gif"> + </a> + + <div> + The contents of this website are © 2015 Apache Software Foundation under the terms of the <a + href="http://www.apache.org/licenses/LICENSE-2.0"> Apache License v2 </a>. Apache Kylin and + its logo are trademarks of the Apache Software Foundation. + </div> + + </div> + </div> + </div> + <!-- /row of widgets --> + + </div> + <div></div> + +</footer> + + <script src="/assets/js/jquery-1.9.1.min.js"></script> + <script src="/assets/js/bootstrap.min.js"></script> + <script src="/assets/js/main.js"></script> + </body> +</html>