You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@zeppelin.apache.org by emmanuel warreng <em...@gmail.com> on 2022/07/20 17:33:52 UTC

Re: [zeppelin] branch master updated: [ZEPPELIN-5723] Remove Kylin interpreter (#4406)

Unsubscribe

On Wed, Jul 13, 2022, 18:08 <jo...@apache.org> wrote:

> This is an automated email from the ASF dual-hosted git repository.
>
> jongyoul pushed a commit to branch master
> in repository https://gitbox.apache.org/repos/asf/zeppelin.git
>
>
> The following commit(s) were added to refs/heads/master by this push:
>      new f24a43f415 [ZEPPELIN-5723] Remove Kylin interpreter (#4406)
> f24a43f415 is described below
>
> commit f24a43f415696f859fc67fe8c167c66f1e796121
> Author: yaini <80...@users.noreply.github.com>
> AuthorDate: Thu Jul 14 01:07:59 2022 +0900
>
>     [ZEPPELIN-5723] Remove Kylin interpreter (#4406)
> ---
>  .github/workflows/core.yml                         |   2 +-
>  .github/workflows/frontend.yml                     |   2 +-
>  Dockerfile                                         |   2 +-
>  conf/interpreter-list                              |   1 -
>  dev/create_release.sh                              |   2 +-
>  docs/_includes/themes/zeppelin/_navigation.html    |   1 -
>  docs/index.md                                      |   1 -
>  docs/interpreter/kylin.md                          |  82 ------
>  docs/interpreter/submarine.md                      |   2 +-
>  docs/quickstart/sql_with_zeppelin.md               |   1 -
>  docs/usage/interpreter/installation.md             |   5 -
>  docs/usage/other_features/zeppelin_context.md      |   2 +-
>  kylin/pom.xml                                      |  79 ------
>  .../apache/zeppelin/kylin/KylinErrorResponse.java  |  62 -----
>  .../apache/zeppelin/kylin/KylinInterpreter.java    | 237 -----------------
>  kylin/src/main/resources/interpreter-setting.json  |  63 -----
>  .../zeppelin/kylin/KylinInterpreterTest.java       | 295
> ---------------------
>  pom.xml                                            |   1 -
>  zeppelin-distribution/src/bin_license/LICENSE      |   1 -
>  19 files changed, 6 insertions(+), 835 deletions(-)
>
> diff --git a/.github/workflows/core.yml b/.github/workflows/core.yml
> index aceaf9fa11..4b3e42a369 100644
> --- a/.github/workflows/core.yml
> +++ b/.github/workflows/core.yml
> @@ -82,7 +82,7 @@ jobs:
>    interpreter-test-non-core:
>      runs-on: ubuntu-20.04
>      env:
> -      INTERPRETERS:
> 'beam,hbase,pig,jdbc,file,flink-cmd,ignite,kylin,cassandra,elasticsearch,bigquery,alluxio,scio,livy,groovy,sap,java,geode,neo4j,hazelcastjet,submarine,sparql,mongodb,influxdb,ksql,scalding'
> +      INTERPRETERS:
> 'beam,hbase,pig,jdbc,file,flink-cmd,ignite,cassandra,elasticsearch,bigquery,alluxio,scio,livy,groovy,sap,java,geode,neo4j,hazelcastjet,submarine,sparql,mongodb,influxdb,ksql,scalding'
>      steps:
>        - name: Checkout
>          uses: actions/checkout@v2
> diff --git a/.github/workflows/frontend.yml
> b/.github/workflows/frontend.yml
> index 34cdef2b0f..11624c66b9 100644
> --- a/.github/workflows/frontend.yml
> +++ b/.github/workflows/frontend.yml
> @@ -19,7 +19,7 @@ env:
>    SPARK_PRINT_LAUNCH_COMMAND: "true"
>    SPARK_LOCAL_IP: 127.0.0.1
>    ZEPPELIN_LOCAL_IP: 127.0.0.1
> -  INTERPRETERS:
> '!beam,!hbase,!pig,!jdbc,!file,!flink,!ignite,!kylin,!cassandra,!elasticsearch,!bigquery,!alluxio,!scio,!livy,!groovy,!sap,!java,!geode,!neo4j,!hazelcastjet,!submarine,!sparql,!mongodb'
> +  INTERPRETERS:
> '!beam,!hbase,!pig,!jdbc,!file,!flink,!ignite,!cassandra,!elasticsearch,!bigquery,!alluxio,!scio,!livy,!groovy,!sap,!java,!geode,!neo4j,!hazelcastjet,!submarine,!sparql,!mongodb'
>
>  jobs:
>    run-e2e-tests-in-zeppelin-web:
> diff --git a/Dockerfile b/Dockerfile
> index 431b89c8cb..2aef45aa86 100644
> --- a/Dockerfile
> +++ b/Dockerfile
> @@ -23,7 +23,7 @@ RUN echo "unsafe-perm=true" > ~/.npmrc && \
>      echo '{ "allow_root": true }' > ~/.bowerrc && \
>      ./mvnw -B package -DskipTests -Pbuild-distr -Pspark-3.2
> -Pinclude-hadoop -Phadoop3 -Pspark-scala-2.12 -Pweb-angular && \
>      # Example with doesn't compile all interpreters
> -    # ./mvnw -B package -DskipTests -Pbuild-distr -Pspark-3.2
> -Pinclude-hadoop -Phadoop3 -Pspark-scala-2.12 -Pweb-angular -pl
> '!groovy,!submarine,!livy,!hbase,!pig,!file,!flink,!ignite,!kylin' && \
> +    # ./mvnw -B package -DskipTests -Pbuild-distr -Pspark-3.2
> -Pinclude-hadoop -Phadoop3 -Pspark-scala-2.12 -Pweb-angular -pl
> '!groovy,!submarine,!livy,!hbase,!pig,!file,!flink,!ignite' && \
>      mv
> /workspace/zeppelin/zeppelin-distribution/target/zeppelin-*/zeppelin-*
> /opt/zeppelin/ && \
>      # Removing stuff saves time, because docker creates a temporary layer
>      rm -rf ~/.m2 && \
> diff --git a/conf/interpreter-list b/conf/interpreter-list
> index c5e1dd8045..76584969c0 100644
> --- a/conf/interpreter-list
> +++ b/conf/interpreter-list
> @@ -33,7 +33,6 @@ ignite
> org.apache.zeppelin:zeppelin-ignite:0.10.0               Ignite
>  java            org.apache.zeppelin:zeppelin-java:0.10.0
>  Java interpreter
>  jdbc            org.apache.zeppelin:zeppelin-jdbc:0.10.0
>  Jdbc interpreter
>  kotlin          org.apache.zeppelin:zeppelin-kotlin:0.10.0
>  Kotlin interpreter
> -kylin           org.apache.zeppelin:zeppelin-kylin:0.10.0
> Kylin interpreter
>  livy            org.apache.zeppelin:zeppelin-livy:0.10.0
>  Livy interpreter
>  md              org.apache.zeppelin:zeppelin-markdown:0.10.0
>  Markdown support
>  neo4j           org.apache.zeppelin:zeppelin-neo4j:0.10.0
> Neo4j interpreter
> diff --git a/dev/create_release.sh b/dev/create_release.sh
> index 1f0c7ba6d9..a3bef0d1d5 100755
> --- a/dev/create_release.sh
> +++ b/dev/create_release.sh
> @@ -97,7 +97,7 @@ function make_binary_release() {
>
>  git_clone
>  make_source_package
> -make_binary_release netinst "-Pweb-angular -Phadoop-2.6 -pl
> !beam,!hbase,!pig,!jdbc,!file,!flink,!ignite,!kylin,!cassandra,!elasticsearch,!bigquery,!alluxio,!scio,!livy,!groovy,!sap,!java,!geode,!neo4j,!hazelcastjet,!submarine,!sparql,!mongodb,!ksql,!scalding
> -am"
> +make_binary_release netinst "-Pweb-angular -Phadoop-2.6 -pl
> !beam,!hbase,!pig,!jdbc,!file,!flink,!ignite,!cassandra,!elasticsearch,!bigquery,!alluxio,!scio,!livy,!groovy,!sap,!java,!geode,!neo4j,!hazelcastjet,!submarine,!sparql,!mongodb,!ksql,!scalding
> -am"
>  make_binary_release all "-Pweb-angular -Phadoop-2.6"
>
>  # remove non release files and dirs
> diff --git a/docs/_includes/themes/zeppelin/_navigation.html
> b/docs/_includes/themes/zeppelin/_navigation.html
> index f7d8e08ae8..205e8fc7fc 100644
> --- a/docs/_includes/themes/zeppelin/_navigation.html
> +++ b/docs/_includes/themes/zeppelin/_navigation.html
> @@ -155,7 +155,6 @@
>                  <li><a
> href="{{BASE_PATH}}/interpreter/jupyter.html">Jupyter</a></li>
>                  <li><a
> href="{{BASE_PATH}}/interpreter/kotlin.html">Kotlin</a></li>
>                  <li><a
> href="{{BASE_PATH}}/interpreter/ksql.html">KSQL</a></li>
> -                <li><a
> href="{{BASE_PATH}}/interpreter/kylin.html">Kylin</a></li>
>                  <li><a
> href="{{BASE_PATH}}/interpreter/livy.html">Livy</a></li>
>                  <li><a
> href="{{BASE_PATH}}/interpreter/mahout.html">Mahout</a></li>
>                  <li><a
> href="{{BASE_PATH}}/interpreter/markdown.html">Markdown</a></li>
> diff --git a/docs/index.md b/docs/index.md
> index 0b0cb8f41b..d955496160 100644
> --- a/docs/index.md
> +++ b/docs/index.md
> @@ -153,7 +153,6 @@ limitations under the License.
>    * [Jupyter](./interpreter/jupyter.html)
>    * [Kotlin](./interpreter/kotlin.html)
>    * [KSQL](./interpreter/ksql.html)
> -  * [Kylin](./interpreter/kylin.html)
>    * [Livy](./interpreter/livy.html)
>    * [Mahout](./interpreter/mahout.html)
>    * [Markdown](./interpreter/markdown.html)
> diff --git a/docs/interpreter/kylin.md b/docs/interpreter/kylin.md
> deleted file mode 100644
> index 1f2b0f3ab4..0000000000
> --- a/docs/interpreter/kylin.md
> +++ /dev/null
> @@ -1,82 +0,0 @@
> ----
> -layout: page
> -title: "Apache Kylin Interpreter for Apache Zeppelin"
> -description: "Apache Kylin™ is an open source Distributed Analytics
> Engine designed to provide SQL interface and multi-dimensional analysis
> (OLAP) on Hadoop supporting extremely large datasets, original contributed
> from eBay Inc.
> -."
> -group: interpreter
> ----
> -<!--
> -Licensed 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.
> --->
> -{% include JB/setup %}
> -
> -# Apache Kylin Interpreter for Apache Zeppelin
> -
> -<div id="toc"></div>
> -
> -## Overview
> -[Apache Kylin](https://kylin.apache.org/) is an open source Distributed
> Analytics Engine designed to provide SQL interface and multi-dimensional
> analysis (OLAP) on Hadoop supporting extremely large datasets, original
> contributed from eBay Inc. The interpreter assumes that Apache Kylin has
> been installed and you can connect to Apache Kylin from the machine Apache
> Zeppelin is installed.
> -To get start with Apache Kylin, please see [Apache Kylin Quickstart](
> https://kylin.apache.org/docs15/index.html).
> -
> -## Configuration
> -<table class="table-configuration">
> -  <tr>
> -    <th>Name</th>
> -    <th>Default</th>
> -    <th>Description</th>
> -  </tr>
> -  <tr>
> -    <td>kylin.api.url </td>
> -    <td>http://localhost:7070/kylin/api/query</td>
> -    <td>kylin query POST API <br/> The format can be like http://
> &lt;host&gt;:&lt;port&gt;/kylin/api/query</td>
> -  </tr>
> -  <tr>
> -    <td>kylin.api.user</td>
> -    <td>ADMIN</td>
> -    <td>kylin user</td>
> -  </tr>
> -  <tr>
> -    <td>kylin.api.password</td>
> -    <td>KYLIN</td>
> -    <td>kylin password</td>
> -  </tr>
> -  <tr>
> -    <td>kylin.query.project</td>
> -    <td>learn_kylin</td>
> -    <td>String, Project to perform query. Could update at notebook
> level</td>
> -  </tr>
> -  <tr>
> -    <td>kylin.query.ispartial</td>
> -    <td>true</td>
> -    <td>true|false <br/> (@Deprecated since Apache Kylin V1.5) <br/>
> Whether accept a partial result or not, default be “false”. Set to “false”
> for production use.</td>
> -  </tr>
> -  <tr>
> -    <td>kylin.query.limit</td>
> -    <td>5000</td>
> -    <td>int, Query limit <br/> If limit is set in sql, perPage will be
> ignored.</td>
> -  </tr>
> -  <tr>
> -    <td>kylin.query.offset</td>
> -    <td>0</td>
> -    <td>int, Query offset <br/> If offset is set in sql, curIndex will be
> ignored.</td>
> -  </tr>
> -</table>
> -
> -## Using the Apache Kylin Interpreter
> -In a paragraph, use `%kylin(project_name)` to select the **kylin**
> interpreter, **project name** and then input **sql**. If no project name
> defined, will use the default project name from the above configuration.
> -
> -```sql
> -%kylin(learn_project)
> -select count(*) from kylin_sales group by part_dt
> -```
> -
> diff --git a/docs/interpreter/submarine.md b/docs/interpreter/submarine.md
> index 97be1bb7e0..cfad6255fc 100644
> --- a/docs/interpreter/submarine.md
> +++ b/docs/interpreter/submarine.md
> @@ -27,7 +27,7 @@ limitations under the License.
>
>  A deep learning algorithm project requires data acquisition, data
> processing, data cleaning, interactive visual programming adjustment
> parameters, algorithm testing, algorithm publishing, algorithm job
> scheduling, offline model training, model online services and many other
> processes and processes. Zeppelin is a web-based notebook that supports
> interactive data analysis. You can use SQL, Scala, Python, etc. to make
> data-driven, interactive, collaborative documents.
>
> -You can use the more than 20 interpreters in zeppelin (for example:
> spark, hive, Cassandra, Elasticsearch, Kylin, HBase, etc.) to collect data,
> clean data, feature extraction, etc. in the data in Hadoop before
> completing the machine learning model training. The data preprocessing
> process.
> +You can use the more than 20 interpreters in zeppelin (for example:
> spark, hive, Cassandra, Elasticsearch, HBase, etc.) to collect data, clean
> data, feature extraction, etc. in the data in Hadoop before completing the
> machine learning model training. The data preprocessing process.
>
>  By integrating submarine in zeppelin, we use zeppelin's data discovery,
> data analysis and data visualization and collaboration capabilities to
> visualize the results of algorithm development and parameter adjustment
> during machine learning model training.
>
> diff --git a/docs/quickstart/sql_with_zeppelin.md
> b/docs/quickstart/sql_with_zeppelin.md
> index da709d5b94..39d57291a3 100644
> --- a/docs/quickstart/sql_with_zeppelin.md
> +++ b/docs/quickstart/sql_with_zeppelin.md
> @@ -63,7 +63,6 @@ For the further information about SQL support in
> Zeppelin, please check
>  - [Flink Interpreter](../interpreter/flink.html)
>  - [Python Interpreter](../interpreter/python.html)
>  - [IgniteSQL
> Interpreter](../interpreter/ignite.html#ignite-sql-interpreter) for [Apache
> Ignite](https://ignite.apache.org/)
> -- [Kylin Interpreter](../interpreter/kylin.html) for [Apache Kylin](
> http://kylin.apache.org/)
>
>
>
> diff --git a/docs/usage/interpreter/installation.md
> b/docs/usage/interpreter/installation.md
> index 3aec553c17..2e26b19896 100644
> --- a/docs/usage/interpreter/installation.md
> +++ b/docs/usage/interpreter/installation.md
> @@ -193,11 +193,6 @@ You can also find the below community managed
> interpreter list in `conf/interpre
>      <td>org.apache.zeppelin:zeppelin-kotlin:0.7.0</td>
>      <td>Kotlin interpreter</td>
>    </tr>
> -  <tr>
> -    <td>kylin</td>
> -    <td>org.apache.zeppelin:zeppelin-kylin:0.10.0</td>
> -    <td>Kylin interpreter</td>
> -  </tr>
>    <tr>
>      <td>livy</td>
>      <td>org.apache.zeppelin:zeppelin-livy:0.10.0</td>
> diff --git a/docs/usage/other_features/zeppelin_context.md
> b/docs/usage/other_features/zeppelin_context.md
> index 7b251719c3..784e1f34b8 100644
> --- a/docs/usage/other_features/zeppelin_context.md
> +++ b/docs/usage/other_features/zeppelin_context.md
> @@ -235,7 +235,7 @@ dynamic-forms and object-interpolation as described
> below.
>
>  |             Interpreters that use Embedded Commands               |
>  |-------------------------------------------------------------------|
> -|spark.sql (\*), bigquery, cassandra, elasticsearch, file, hbase, ignite,
> jdbc (\*), kylin, livy, markdown, neo4j, pig, python, shell (\*), zengine |
> +|spark.sql (\*), bigquery, cassandra, elasticsearch, file, hbase, ignite,
> jdbc (\*), livy, markdown, neo4j, pig, python, shell (\*), zengine |
>
>  Dynamic forms are available in all of the interpreters in the table
> above,
>  but object interpolation is only available in a small, but growing, list
> of interpreters
> diff --git a/kylin/pom.xml b/kylin/pom.xml
> deleted file mode 100644
> index e21a6892ed..0000000000
> --- a/kylin/pom.xml
> +++ /dev/null
> @@ -1,79 +0,0 @@
> -<?xml version="1.0" encoding="UTF-8"?>
> -<!--
> -  ~ 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.
> -  -->
> -
> -
> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="
> http://www.w3.org/2001/XMLSchema-instance"
> -  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
> https://maven.apache.org/xsd/maven-4.0.0.xsd">
> -    <modelVersion>4.0.0</modelVersion>
> -
> -    <parent>
> -        <artifactId>zeppelin-interpreter-parent</artifactId>
> -        <groupId>org.apache.zeppelin</groupId>
> -        <version>0.11.0-SNAPSHOT</version>
> -
> <relativePath>../zeppelin-interpreter-parent/pom.xml</relativePath>
> -    </parent>
> -
> -    <artifactId>zeppelin-kylin</artifactId>
> -    <packaging>jar</packaging>
> -    <name>Zeppelin: Kylin interpreter</name>
> -
> -    <properties>
> -        <interpreter.name>kylin</interpreter.name>
> -    </properties>
> -
> -    <dependencies>
> -        <dependency>
> -            <groupId>com.google.code.gson</groupId>
> -            <artifactId>gson</artifactId>
> -        </dependency>
> -
> -        <dependency>
> -            <groupId>org.apache.httpcomponents</groupId>
> -            <artifactId>httpclient</artifactId>
> -        </dependency>
> -        <dependency>
> -            <groupId>commons-codec</groupId>
> -            <artifactId>commons-codec</artifactId>
> -        </dependency>
> -        <dependency>
> -            <groupId>commons-io</groupId>
> -            <artifactId>commons-io</artifactId>
> -        </dependency>
> -    </dependencies>
> -
> -    <build>
> -        <plugins>
> -            <plugin>
> -                <artifactId>maven-enforcer-plugin</artifactId>
> -            </plugin>
> -            <plugin>
> -                <artifactId>maven-resources-plugin</artifactId>
> -            </plugin>
> -            <plugin>
> -                <artifactId>maven-shade-plugin</artifactId>
> -            </plugin>
> -            <plugin>
> -                <groupId>org.apache.maven.plugins</groupId>
> -                <artifactId>maven-checkstyle-plugin</artifactId>
> -                <configuration>
> -                    <skip>false</skip>
> -                </configuration>
> -            </plugin>
> -        </plugins>
> -    </build>
> -</project>
> diff --git
> a/kylin/src/main/java/org/apache/zeppelin/kylin/KylinErrorResponse.java
> b/kylin/src/main/java/org/apache/zeppelin/kylin/KylinErrorResponse.java
> deleted file mode 100644
> index 04d04797cc..0000000000
> --- a/kylin/src/main/java/org/apache/zeppelin/kylin/KylinErrorResponse.java
> +++ /dev/null
> @@ -1,62 +0,0 @@
> -/*
> - * 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.
> - */
> -
> -package org.apache.zeppelin.kylin;
> -
> -import com.google.gson.Gson;
> -import com.google.gson.JsonSyntaxException;
> -import org.apache.zeppelin.common.JsonSerializable;
> -
> -/**
> - * class for Kylin Error Response.
> - */
> -class KylinErrorResponse implements JsonSerializable {
> -  private static final Gson gson = new Gson();
> -
> -  private String stacktrace;
> -  private String exception;
> -  private String url;
> -  private String code;
> -  private Object data;
> -  private String msg;
> -
> -  KylinErrorResponse(String stacktrace, String exception, String url,
> -      String code, Object data, String msg) {
> -    this.stacktrace = stacktrace;
> -    this.exception = exception;
> -    this.url = url;
> -    this.code = code;
> -    this.data = data;
> -    this.msg = msg;
> -  }
> -
> -  public String getException() {
> -    return exception;
> -  }
> -
> -  public String toJson() {
> -    return gson.toJson(this);
> -  }
> -
> -  public static KylinErrorResponse fromJson(String json) {
> -    try {
> -      return gson.fromJson(json, KylinErrorResponse.class);
> -    } catch (JsonSyntaxException ex) {
> -      return null;
> -    }
> -  }
> -}
> diff --git
> a/kylin/src/main/java/org/apache/zeppelin/kylin/KylinInterpreter.java
> b/kylin/src/main/java/org/apache/zeppelin/kylin/KylinInterpreter.java
> deleted file mode 100755
> index 444f5cbc28..0000000000
> --- a/kylin/src/main/java/org/apache/zeppelin/kylin/KylinInterpreter.java
> +++ /dev/null
> @@ -1,237 +0,0 @@
> -/*
> - * 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.
> - */
> -
> -package org.apache.zeppelin.kylin;
> -
> -import org.apache.commons.codec.binary.Base64;
> -import org.apache.commons.io.IOUtils;
> -import org.apache.http.HttpResponse;
> -import org.apache.http.client.HttpClient;
> -import org.apache.http.client.methods.HttpPost;
> -import org.apache.http.entity.StringEntity;
> -import org.apache.http.impl.client.HttpClientBuilder;
> -import org.slf4j.Logger;
> -import org.slf4j.LoggerFactory;
> -
> -import java.io.IOException;
> -import java.util.List;
> -import java.util.Properties;
> -import java.util.regex.Matcher;
> -import java.util.regex.Pattern;
> -
> -import org.apache.zeppelin.interpreter.Interpreter;
> -import org.apache.zeppelin.interpreter.InterpreterContext;
> -import org.apache.zeppelin.interpreter.InterpreterResult;
> -import org.apache.zeppelin.interpreter.thrift.InterpreterCompletion;
> -
> -/**
> - * Kylin interpreter for Zeppelin. (http://kylin.apache.org)
> - */
> -public class KylinInterpreter extends Interpreter {
> -  Logger logger = LoggerFactory.getLogger(KylinInterpreter.class);
> -
> -  static final String KYLIN_QUERY_API_URL = "kylin.api.url";
> -  static final String KYLIN_USERNAME = "kylin.api.user";
> -  static final String KYLIN_PASSWORD = "kylin.api.password";
> -  static final String KYLIN_QUERY_PROJECT = "kylin.query.project";
> -  static final String KYLIN_QUERY_OFFSET = "kylin.query.offset";
> -  static final String KYLIN_QUERY_LIMIT = "kylin.query.limit";
> -  static final String KYLIN_QUERY_ACCEPT_PARTIAL =
> "kylin.query.ispartial";
> -  static final Pattern KYLIN_TABLE_FORMAT_REGEX_LABEL =
> Pattern.compile("\"label\":\"(.*?)\"");
> -  static final Pattern KYLIN_TABLE_FORMAT_REGEX_RESULTS =
> -          Pattern.compile("\"results\":\\[\\[(.*?)]]");
> -
> -  public KylinInterpreter(Properties property) {
> -    super(property);
> -  }
> -
> -  @Override
> -  public void open() {
> -
> -  }
> -
> -  @Override
> -  public void close() {
> -
> -  }
> -
> -  @Override
> -  public InterpreterResult interpret(String st, InterpreterContext
> context) {
> -    try {
> -      return executeQuery(st);
> -    } catch (IOException e) {
> -      logger.error("failed to query data in kylin ", e);
> -      return new InterpreterResult(InterpreterResult.Code.ERROR,
> e.getMessage());
> -    }
> -  }
> -
> -  @Override
> -  public void cancel(InterpreterContext context) {
> -
> -  }
> -
> -  @Override
> -  public FormType getFormType() {
> -    return FormType.SIMPLE;
> -  }
> -
> -  @Override
> -  public int getProgress(InterpreterContext context) {
> -    return 0;
> -  }
> -
> -  @Override
> -  public List<InterpreterCompletion> completion(String buf, int cursor,
> -      InterpreterContext interpreterContext) {
> -    return null;
> -  }
> -
> -  public HttpResponse prepareRequest(String sql) throws IOException {
> -    String kylinProject = getProject(sql);
> -    String kylinSql = getSQL(sql);
> -
> -    logger.info("project:" + kylinProject);
> -    logger.info("sql:" + kylinSql);
> -    logger.info("acceptPartial:" +
> getProperty(KYLIN_QUERY_ACCEPT_PARTIAL));
> -    logger.info("limit:" + getProperty(KYLIN_QUERY_LIMIT));
> -    logger.info("offset:" + getProperty(KYLIN_QUERY_OFFSET));
> -    byte[] encodeBytes = Base64.encodeBase64(new
> String(getProperty(KYLIN_USERNAME)
> -        + ":" + getProperty(KYLIN_PASSWORD)).getBytes("UTF-8"));
> -
> -    String postContent = new String("{\"project\":" + "\"" + kylinProject
> + "\""
> -        + "," + "\"sql\":" + "\"" + kylinSql + "\""
> -        + "," + "\"acceptPartial\":" + "\"" +
> getProperty(KYLIN_QUERY_ACCEPT_PARTIAL) + "\""
> -        + "," + "\"offset\":" + "\"" + getProperty(KYLIN_QUERY_OFFSET) +
> "\""
> -        + "," + "\"limit\":" + "\"" + getProperty(KYLIN_QUERY_LIMIT) +
> "\"" + "}");
> -    logger.info("post:" + postContent);
> -    postContent = postContent.replaceAll("[\u0000-\u001f]", " ");
> -    StringEntity entity = new StringEntity(postContent, "UTF-8");
> -    entity.setContentType("application/json; charset=UTF-8");
> -
> -    logger.info("post url:" + getProperty(KYLIN_QUERY_API_URL));
> -
> -    HttpPost postRequest = new HttpPost(getProperty(KYLIN_QUERY_API_URL));
> -    postRequest.setEntity(entity);
> -    postRequest.addHeader("Authorization", "Basic " + new
> String(encodeBytes));
> -    postRequest.addHeader("Accept-Encoding", "UTF-8");
> -
> -    HttpClient httpClient = HttpClientBuilder.create().build();
> -    return httpClient.execute(postRequest);
> -  }
> -
> -  public String getProject(String cmd) {
> -    boolean isFirstLineProject = cmd.startsWith("(");
> -
> -    if (isFirstLineProject) {
> -      int projectStartIndex = cmd.indexOf("(");
> -      int projectEndIndex = cmd.indexOf(")");
> -      if (projectStartIndex != -1 && projectEndIndex != -1) {
> -        return cmd.substring(projectStartIndex + 1, projectEndIndex);
> -      } else {
> -        return getProperty(KYLIN_QUERY_PROJECT);
> -      }
> -    } else {
> -      return getProperty(KYLIN_QUERY_PROJECT);
> -    }
> -  }
> -
> -  public String getSQL(String cmd) {
> -    boolean isFirstLineProject = cmd.startsWith("(");
> -
> -    if (isFirstLineProject) {
> -      int projectStartIndex = cmd.indexOf("(");
> -      int projectEndIndex = cmd.indexOf(")");
> -      if (projectStartIndex != -1 && projectEndIndex != -1) {
> -        return cmd.substring(projectEndIndex + 1);
> -      } else {
> -        return cmd;
> -      }
> -    } else {
> -      return cmd;
> -    }
> -  }
> -
> -  private InterpreterResult executeQuery(String sql) throws IOException {
> -    HttpResponse response = prepareRequest(sql);
> -    String result;
> -
> -    try {
> -      int code = response.getStatusLine().getStatusCode();
> -      result = IOUtils.toString(response.getEntity().getContent(),
> "UTF-8");
> -
> -      if (code != 200) {
> -        StringBuilder errorMessage = new StringBuilder("Failed : HTTP
> error code " + code + " .");
> -        logger.error("Failed to execute query: " + result);
> -
> -        KylinErrorResponse kylinErrorResponse =
> KylinErrorResponse.fromJson(result);
> -        if (kylinErrorResponse == null) {
> -          logger.error("Cannot get json from string: " + result);
> -          // when code is 401, the response is html, not json
> -          if (code == 401) {
> -            errorMessage.append(" Error message: Unauthorized. This
> request requires "
> -                + "HTTP authentication. Please make sure your have set
> your credentials "
> -                + "correctly.");
> -          } else {
> -            errorMessage.append(" Error message: " + result + " .");
> -          }
> -        } else {
> -          String exception = kylinErrorResponse.getException();
> -          logger.error("The exception is " + exception);
> -          errorMessage.append(" Error message: " + exception + " .");
> -        }
> -
> -        return new InterpreterResult(InterpreterResult.Code.ERROR,
> errorMessage.toString());
> -      }
> -    } catch (NullPointerException | IOException e) {
> -      throw new IOException(e);
> -    }
> -
> -    return new InterpreterResult(InterpreterResult.Code.SUCCESS,
> -        formatResult(result));
> -  }
> -
> -  String formatResult(String msg) {
> -    StringBuilder res = new StringBuilder("%table ");
> -
> -    Matcher ml = KYLIN_TABLE_FORMAT_REGEX_LABEL.matcher(msg);
> -    while (!ml.hitEnd() && ml.find()) {
> -      res.append(ml.group(1) + " \t");
> -    }
> -    res.append(" \n");
> -
> -    Matcher mr = KYLIN_TABLE_FORMAT_REGEX_RESULTS.matcher(msg);
> -    String table = null;
> -    while (!mr.hitEnd() && mr.find()) {
> -      table = mr.group(1);
> -    }
> -
> -    if (table != null && !table.isEmpty()) {
> -      String[] row = table.split("],\\[");
> -      for (int i = 0; i < row.length; i++) {
> -        String[] col = row[i].split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)",
> -1);
> -        for (int j = 0; j < col.length; j++) {
> -          if (col[j] != null) {
> -            col[j] = col[j].replaceAll("^\"|\"$", "");
> -          }
> -          res.append(col[j] + " \t");
> -        }
> -        res.append(" \n");
> -      }
> -    }
> -    return res.toString();
> -  }
> -}
> diff --git a/kylin/src/main/resources/interpreter-setting.json
> b/kylin/src/main/resources/interpreter-setting.json
> deleted file mode 100644
> index 88cf369692..0000000000
> --- a/kylin/src/main/resources/interpreter-setting.json
> +++ /dev/null
> @@ -1,63 +0,0 @@
> -[
> -  {
> -    "group": "kylin",
> -    "name": "kylin",
> -    "className": "org.apache.zeppelin.kylin.KylinInterpreter",
> -    "properties": {
> -      "kylin.api.url": {
> -        "envName": null,
> -        "propertyName": "kylin.api.url",
> -        "defaultValue": "http://localhost:7070/kylin/api/query",
> -        "description": "Kylin API",
> -        "type": "url"
> -      },
> -      "kylin.api.user": {
> -        "envName": null,
> -        "propertyName": "kylin.api.user",
> -        "defaultValue": "ADMIN",
> -        "description": "Kylin username",
> -        "type": "string"
> -      },
> -      "kylin.api.password": {
> -        "envName": null,
> -        "propertyName": "kylin.api.password",
> -        "defaultValue": "KYLIN",
> -        "description": "Kylin password",
> -        "type": "password"
> -      },
> -      "kylin.query.project": {
> -        "envName": null,
> -        "propertyName": "kylin.query.project",
> -        "defaultValue": "learn_kylin",
> -        "description": "Default Kylin project name",
> -        "type": "textarea"
> -      },
> -      "kylin.query.offset": {
> -        "envName": null,
> -        "propertyName": "kylin.query.offset",
> -        "defaultValue": "0",
> -        "description": "Kylin query offset",
> -        "type": "number"
> -      },
> -      "kylin.query.limit": {
> -        "envName": null,
> -        "propertyName": "kylin.query.limit",
> -        "defaultValue": "5000",
> -        "description": "Kylin query limit",
> -        "type": "number"
> -      },
> -      "kylin.query.ispartial": {
> -        "envName": null,
> -        "propertyName": "kylin.query.ispartial",
> -        "defaultValue": true,
> -        "description": "Kylin query partial flag, deprecated",
> -        "type": "checkbox"
> -      }
> -    },
> -    "editor": {
> -      "language": "sql",
> -      "editOnDblClick": false,
> -      "completionSupport": true
> -    }
> -  }
> -]
> diff --git
> a/kylin/src/test/java/org/apache/zeppelin/kylin/KylinInterpreterTest.java
> b/kylin/src/test/java/org/apache/zeppelin/kylin/KylinInterpreterTest.java
> deleted file mode 100755
> index 66b6f9afb3..0000000000
> ---
> a/kylin/src/test/java/org/apache/zeppelin/kylin/KylinInterpreterTest.java
> +++ /dev/null
> @@ -1,295 +0,0 @@
> -/*
> - * 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.
> - */
> -
> -package org.apache.zeppelin.kylin;
> -
> -import static org.junit.Assert.assertEquals;
> -
> -import org.apache.http.Header;
> -import org.apache.http.HttpEntity;
> -import org.apache.http.HttpResponse;
> -import org.apache.http.ProtocolVersion;
> -import org.apache.http.StatusLine;
> -import org.apache.http.client.methods.HttpPost;
> -import org.apache.http.message.AbstractHttpMessage;
> -import org.junit.Assert;
> -import org.junit.BeforeClass;
> -import org.junit.Test;
> -
> -import java.io.ByteArrayInputStream;
> -import java.io.IOException;
> -import java.io.InputStream;
> -import java.io.OutputStream;
> -import java.util.Locale;
> -import java.util.Properties;
> -
> -import org.apache.zeppelin.interpreter.InterpreterResult;
> -
> -public class KylinInterpreterTest {
> -  static final Properties KYLIN_PROPERTIES = new Properties();
> -
> -  @BeforeClass
> -  public static void setUpClass() {
> -    KYLIN_PROPERTIES.put("kylin.api.url", "
> http://localhost:7070/kylin/api/query");
> -    KYLIN_PROPERTIES.put("kylin.api.user", "ADMIN");
> -    KYLIN_PROPERTIES.put("kylin.api.password", "KYLIN");
> -    KYLIN_PROPERTIES.put("kylin.query.project", "default");
> -    KYLIN_PROPERTIES.put("kylin.query.offset", "0");
> -    KYLIN_PROPERTIES.put("kylin.query.limit", "5000");
> -    KYLIN_PROPERTIES.put("kylin.query.ispartial", "true");
> -  }
> -
> -  @Test
> -  public void testWithDefault() {
> -    KylinInterpreter t = new MockKylinInterpreter(getDefaultProperties());
> -    InterpreterResult result = t.interpret(
> -        "select a.date,sum(b.measure) as measure from kylin_fact_table a
> " +
> -            "inner join kylin_lookup_table b on a.date=b.date group by
> a.date", null);
> -    assertEquals("default", t.getProject("select a.date,sum(b.measure) as
> measure "
> -            + "from kylin_fact_table a inner join kylin_lookup_table b on
> a.date=b.date "
> -            + "group by a.date"));
> -    assertEquals(InterpreterResult.Type.TABLE,
> result.message().get(0).getType());
> -  }
> -
> -  @Test
> -  public void testWithProject() {
> -    KylinInterpreter t = new MockKylinInterpreter(getDefaultProperties());
> -    assertEquals("project2", t.getProject("(project2)\n select
> a.date,sum(b.measure) "
> -            + "as measure from kylin_fact_table a inner join
> kylin_lookup_table b on "
> -            + "a.date=b.date group by a.date"));
> -    assertEquals("", t.getProject("()\n select a.date,sum(b.measure) as
> measure "
> -            + "from kylin_fact_table a inner join kylin_lookup_table b on
> a.date=b.date "
> -            + "group by a.date"));
> -    assertEquals("\n select a.date,sum(b.measure) as measure from
> kylin_fact_table a "
> -            + "inner join kylin_lookup_table b on a.date=b.date group by
> a.date",
> -            t.getSQL("(project2)\n select a.date,sum(b.measure) as
> measure "
> -                    + "from kylin_fact_table a inner join
> kylin_lookup_table b on a.date=b.date "
> -                    + "group by a.date"));
> -    assertEquals("\n select a.date,sum(b.measure) as measure from
> kylin_fact_table a "
> -            + "inner join kylin_lookup_table b on a.date=b.date group by
> a.date",
> -            t.getSQL("()\n select a.date,sum(b.measure) as measure from
> kylin_fact_table a "
> -                    + "inner join kylin_lookup_table b on a.date=b.date
> group by a.date"));
> -  }
> -
> -  @Test
> -  public void testParseResult() {
> -    String msg =
> "{\"columnMetas\":[{\"isNullable\":1,\"displaySize\":256,\"label\":\"COUNTRY\","
> -            +
> "\"name\":\"COUNTRY\",\"schemaName\":\"DEFAULT\",\"catelogName\":null,"
> -            +
> "\"tableName\":\"SALES_TABLE\",\"precision\":256,\"scale\":0,\"columnType\":12,"
> -            +
> "\"columnTypeName\":\"VARCHAR\",\"writable\":false,\"readOnly\":true,"
> -            +
> "\"definitelyWritable\":false,\"autoIncrement\":false,\"caseSensitive\":true,"
> -            +
> "\"searchable\":false,\"currency\":false,\"signed\":true},{\"isNullable\":1,"
> -            +
> "\"displaySize\":256,\"label\":\"CURRENCY\",\"name\":\"CURRENCY\","
> -            +
> "\"schemaName\":\"DEFAULT\",\"catelogName\":null,\"tableName\":\"SALES_TABLE\","
> -            +
> "\"precision\":256,\"scale\":0,\"columnType\":12,\"columnTypeName\":\"VARCHAR\","
> -            +
> "\"writable\":false,\"readOnly\":true,\"definitelyWritable\":false,"
> -            +
> "\"autoIncrement\":false,\"caseSensitive\":true,\"searchable\":false,"
> -            +
> "\"currency\":false,\"signed\":true},{\"isNullable\":0,\"displaySize\":19,"
> -            +
> "\"label\":\"COUNT__\",\"name\":\"COUNT__\",\"schemaName\":\"DEFAULT\","
> -            +
> "\"catelogName\":null,\"tableName\":\"SALES_TABLE\",\"precision\":19,\"scale\":0,"
> -            +
> "\"columnType\":-5,\"columnTypeName\":\"BIGINT\",\"writable\":false,"
> -            +
> "\"readOnly\":true,\"definitelyWritable\":false,\"autoIncrement\":false,"
> -            +
> "\"caseSensitive\":true,\"searchable\":false,\"currency\":false,\"signed\":true}],"
> -            +
> "\"results\":[[\"AMERICA\",\"USD\",null],[null,\"RMB\",0],[\"KOR\",null,100],"
> -            +
> "[\"\\\"abc\\\"\",\"a,b,c\",-1]],\"cube\":\"Sample_Cube\",\"affectedRowCount\":0,"
> -            +
> "\"isException\":false,\"exceptionMessage\":null,\"duration\":134,"
> -            +
> "\"totalScanCount\":1,\"hitExceptionCache\":false,\"storageCacheUsed\":false,"
> -            + "\"partial\":false}";
> -    String expected = "%table COUNTRY \tCURRENCY \tCOUNT__ \t \n" +
> -            "AMERICA \tUSD \tnull \t \n" +
> -            "null \tRMB \t0 \t \n" +
> -            "KOR \tnull \t100 \t \n" +
> -            "\\\"abc\\\" \ta,b,c \t-1 \t \n";
> -    KylinInterpreter t = new MockKylinInterpreter(getDefaultProperties());
> -    String actual = t.formatResult(msg);
> -    Assert.assertEquals(expected, actual);
> -  }
> -
> -  @Test
> -  public void testParseEmptyResult() {
> -    String msg =
> "{\"columnMetas\":[{\"isNullable\":1,\"displaySize\":256,\"label\":\"COUNTRY\","
> -            +
> "\"name\":\"COUNTRY\",\"schemaName\":\"DEFAULT\",\"catelogName\":null,"
> -            +
> "\"tableName\":\"SALES_TABLE\",\"precision\":256,\"scale\":0,\"columnType\":12,"
> -            +
> "\"columnTypeName\":\"VARCHAR\",\"writable\":false,\"readOnly\":true,"
> -            +
> "\"definitelyWritable\":false,\"autoIncrement\":false,\"caseSensitive\":true,"
> -            +
> "\"searchable\":false,\"currency\":false,\"signed\":true},{\"isNullable\":1,"
> -            +
> "\"displaySize\":256,\"label\":\"CURRENCY\",\"name\":\"CURRENCY\","
> -            +
> "\"schemaName\":\"DEFAULT\",\"catelogName\":null,\"tableName\":\"SALES_TABLE\","
> -            +
> "\"precision\":256,\"scale\":0,\"columnType\":12,\"columnTypeName\":\"VARCHAR\","
> -            +
> "\"writable\":false,\"readOnly\":true,\"definitelyWritable\":false,"
> -            +
> "\"autoIncrement\":false,\"caseSensitive\":true,\"searchable\":false,"
> -            +
> "\"currency\":false,\"signed\":true},{\"isNullable\":0,\"displaySize\":19,"
> -            +
> "\"label\":\"COUNT__\",\"name\":\"COUNT__\",\"schemaName\":\"DEFAULT\","
> -            +
> "\"catelogName\":null,\"tableName\":\"SALES_TABLE\",\"precision\":19,\"scale\":0,"
> -            +
> "\"columnType\":-5,\"columnTypeName\":\"BIGINT\",\"writable\":false,"
> -            +
> "\"readOnly\":true,\"definitelyWritable\":false,\"autoIncrement\":false,"
> -            +
> "\"caseSensitive\":true,\"searchable\":false,\"currency\":false,\"signed\":true}],"
> -            + "\"results\":[]," +
> "\"cube\":\"Sample_Cube\",\"affectedRowCount\":0,"
> -            +
> "\"isException\":false,\"exceptionMessage\":null,\"duration\":134,"
> -            +
> "\"totalScanCount\":1,\"hitExceptionCache\":false,\"storageCacheUsed\":false,"
> -            + "\"partial\":false}";
> -    String expected = "%table COUNTRY \tCURRENCY \tCOUNT__ \t \n";
> -    KylinInterpreter t = new MockKylinInterpreter(getDefaultProperties());
> -    String actual = t.formatResult(msg);
> -    Assert.assertEquals(expected, actual);
> -  }
> -
> -  private Properties getDefaultProperties() {
> -    Properties prop = new Properties();
> -    prop.put("kylin.api.username", "ADMIN");
> -    prop.put("kylin.api.password", "KYLIN");
> -    prop.put("kylin.api.url", "http://<host>:<port>/kylin/api/query");
> -    prop.put("kylin.query.project", "default");
> -    prop.put("kylin.query.offset", "0");
> -    prop.put("kylin.query.limit", "5000");
> -    prop.put("kylin.query.ispartial", "true");
> -    return prop;
> -  }
> -}
> -
> -class MockKylinInterpreter extends KylinInterpreter {
> -  MockKylinInterpreter(Properties property) {
> -    super(property);
> -  }
> -
> -  @Override
> -  public HttpResponse prepareRequest(String sql) throws IOException {
> -    MockHttpClient client = new MockHttpClient();
> -    return client.execute(new HttpPost());
> -  }
> -}
> -
> -class MockHttpClient{
> -  public MockHttpResponse execute(HttpPost post){
> -    return new MockHttpResponse();
> -  }
> -}
> -
> -class MockHttpResponse extends AbstractHttpMessage implements
> HttpResponse{
> -  @Override
> -  public StatusLine getStatusLine() {
> -    return new MockStatusLine();
> -  }
> -
> -  @Override
> -  public void setStatusLine(StatusLine statusLine) {
> -  }
> -
> -  @Override
> -  public void setStatusLine(ProtocolVersion protocolVersion, int i) {
> -  }
> -
> -  @Override
> -  public void setStatusLine(ProtocolVersion protocolVersion, int i,
> String s) {
> -  }
> -
> -  @Override
> -  public void setStatusCode(int i) throws IllegalStateException {
> -  }
> -
> -  @Override
> -  public void setReasonPhrase(String s) throws IllegalStateException {
> -  }
> -
> -  @Override
> -  public HttpEntity getEntity() {
> -    return new MockEntity();
> -  }
> -
> -  @Override
> -  public void setEntity(HttpEntity httpEntity) {
> -  }
> -
> -  @Override
> -  public Locale getLocale() {
> -    return null;
> -  }
> -
> -  @Override
> -  public void setLocale(Locale locale) {
> -  }
> -
> -  @Override
> -  public ProtocolVersion getProtocolVersion() {
> -    return null;
> -  }
> -}
> -
> -class MockStatusLine implements StatusLine{
> -  @Override
> -  public ProtocolVersion getProtocolVersion() {
> -    return null;
> -  }
> -
> -  @Override
> -  public int getStatusCode() {
> -    return 200;
> -  }
> -
> -  @Override
> -  public String getReasonPhrase() {
> -    return null;
> -  }
> -}
> -
> -class MockEntity implements HttpEntity{
> -  @Override
> -  public boolean isRepeatable() {
> -    return false;
> -  }
> -
> -  @Override
> -  public boolean isChunked() {
> -    return false;
> -  }
> -
> -  @Override
> -  public long getContentLength() {
> -    return 0;
> -  }
> -
> -  @Override
> -  public Header getContentType() {
> -    return null;
> -  }
> -
> -  @Override
> -  public Header getContentEncoding() {
> -    return null;
> -  }
> -
> -  @Override
> -  public InputStream getContent() throws IOException,
> IllegalStateException {
> -    return new ByteArrayInputStream(("{\"columnMetas\":" +
> -        "[{\"label\":\"PART_DT\"},{\"label\":\"measure\"}]," +
> -        "\"results\":[[\"2012-01-03\",\"917.4138\"]," +
> -        "[\"2012-05-06\",\"592.4823\"]]}").getBytes());
> -  }
> -
> -  @Override
> -  public void writeTo(OutputStream outputStream) throws IOException {
> -  }
> -
> -  @Override
> -  public boolean isStreaming() {
> -    return false;
> -  }
> -
> -  @Override
> -  public void consumeContent() throws IOException {
> -  }
> -}
> diff --git a/pom.xml b/pom.xml
> index 78b011339c..da5b999307 100644
> --- a/pom.xml
> +++ b/pom.xml
> @@ -78,7 +78,6 @@
>      <module>flink-cmd</module>
>      <module>ignite</module>
>      <module>influxdb</module>
> -    <module>kylin</module>
>      <module>python</module>
>      <module>cassandra</module>
>      <module>elasticsearch</module>
> diff --git a/zeppelin-distribution/src/bin_license/LICENSE
> b/zeppelin-distribution/src/bin_license/LICENSE
> index 380b0a4349..a80dc4f4ea 100644
> --- a/zeppelin-distribution/src/bin_license/LICENSE
> +++ b/zeppelin-distribution/src/bin_license/LICENSE
> @@ -34,7 +34,6 @@ The following components are provided under Apache
> License.
>      (Apache 2.0) Apache Cassandra (http://cassandra.apache.org/)
>      (Apache 2.0) Apache HBase (http://hbase.apache.org/)
>      (Apache 2.0) Apache Ignite (http://ignite.apache.org/)
> -    (Apache 2.0) Apache Kylin (http://kylin.apache.org/)
>      (Apache 2.0) Apache Flink (http://flink.apache.org/)
>      (Apache 2.0) Apache Jena (https://jena.apache.org/)
>      (Apache 2.0) Apache Beam (http://beam.apache.org/)
>
>