You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by mi...@apache.org on 2017/09/21 20:34:02 UTC

svn commit: r1809223 [23/30] - in /zeppelin/site: ./ contribution/ contribution/zeppelinweb/ docs/0.7.3/ docs/0.7.3/assets/ docs/0.7.3/assets/themes/ docs/0.7.3/assets/themes/zeppelin/ docs/0.7.3/assets/themes/zeppelin/bootstrap/ docs/0.7.3/assets/them...

Added: zeppelin/site/docs/0.7.3/quickstart/install_with_flink_and_spark_cluster.html
URL: http://svn.apache.org/viewvc/zeppelin/site/docs/0.7.3/quickstart/install_with_flink_and_spark_cluster.html?rev=1809223&view=auto
==============================================================================
--- zeppelin/site/docs/0.7.3/quickstart/install_with_flink_and_spark_cluster.html (added)
+++ zeppelin/site/docs/0.7.3/quickstart/install_with_flink_and_spark_cluster.html Thu Sep 21 20:33:57 2017
@@ -0,0 +1,567 @@
+
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <title>Apache Zeppelin 0.7.3 Documentation: Install Zeppelin with Flink and Spark in cluster mode</title>
+    <meta name="description" content="Tutorial is valid for Spark 1.6.x and Flink 1.1.2">
+    <meta name="author" content="The Apache Software Foundation">
+
+    <!-- Enable responsive viewport -->
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
+    <!--[if lt IE 9]>
+    <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+
+    <link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet">
+
+    <!-- Le styles -->
+    <link href="/docs/0.7.3/assets/themes/zeppelin/bootstrap/css/bootstrap.css" rel="stylesheet">
+    <link href="/docs/0.7.3/assets/themes/zeppelin/css/style.css?body=1" rel="stylesheet" type="text/css">
+    <link href="/docs/0.7.3/assets/themes/zeppelin/css/syntax.css" rel="stylesheet"  type="text/css" media="screen" /> 
+    <!-- Le fav and touch icons -->
+    <!-- Update these with your own images
+    <link rel="shortcut icon" href="images/favicon.ico">
+    <link rel="apple-touch-icon" href="images/apple-touch-icon.png">
+    <link rel="apple-touch-icon" sizes="72x72" href="images/apple-touch-icon-72x72.png">
+    <link rel="apple-touch-icon" sizes="114x114" href="images/apple-touch-icon-114x114.png">
+    -->
+
+    <!-- Js -->
+    <script src="https://code.jquery.com/jquery-1.10.2.min.js"></script>
+    <script src="/docs/0.7.3/assets/themes/zeppelin/bootstrap/js/bootstrap.min.js"></script>
+    <script src="/docs/0.7.3/assets/themes/zeppelin/js/docs.js"></script>
+    <script src="/docs/0.7.3/assets/themes/zeppelin/js/anchor.min.js"></script>
+    <script src="/docs/0.7.3/assets/themes/zeppelin/js/toc.js"></script>
+    <script src="/docs/0.7.3/assets/themes/zeppelin/js/lunr.min.js"></script>
+    <script src="/docs/0.7.3/assets/themes/zeppelin/js/search.js"></script>    
+
+    <!-- atom & rss feed -->
+    <link href="/docs/0.7.3/atom.xml" type="application/atom+xml" rel="alternate" title="Sitewide ATOM Feed">
+    <link href="/docs/0.7.3/rss.xml" type="application/rss+xml" rel="alternate" title="Sitewide RSS Feed">
+  </head>
+
+  <body>
+    
+        <div id="menu" class="navbar navbar-inverse navbar-fixed-top" role="navigation">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <div class="navbar-brand">
+            <a class="navbar-brand-main" href="http://zeppelin.apache.org">
+              <img src="/assets/themes/zeppelin/img/zeppelin_logo.png" width="50" alt="I'm zeppelin">
+              <span style="vertical-align:middle">Zeppelin</span>
+            </a>
+            <a class="navbar-brand-version" href="/docs/0.7.3">
+              <span><small>0.7.3</small></span>
+            </a>
+          </div>
+        </div>
+        <nav class="navbar-collapse collapse" role="navigation">
+          <ul class="nav navbar-nav">
+            <li>
+              <a href="#" data-toggle="dropdown" class="dropdown-toggle">Quick Start <b class="caret"></b></a>
+              <ul class="dropdown-menu">
+                <li><a href="/docs/0.7.3/index.html">What is Apache Zeppelin ?</a></li>
+                <li role="separator" class="divider"></li>
+                <li class="title"><span><b>Getting Started</b><span></li>
+                <li><a href="/docs/0.7.3/install/install.html">Install</a></li>
+                <li><a href="/docs/0.7.3/install/configuration.html">Configuration</a></li>
+                <li><a href="/docs/0.7.3/quickstart/explorezeppelinui.html">Explore Zeppelin UI</a></li>
+                <li><a href="/docs/0.7.3/quickstart/tutorial.html">Tutorial</a></li>
+                <li role="separator" class="divider"></li>
+                <li class="title"><span><b>Basic Feature Guide</b><span></li>
+                <li><a href="/docs/0.7.3/manual/dynamicform.html">Dynamic Form</a></li>
+                <li><a href="/docs/0.7.3/manual/publish.html">Publish your Paragraph</a></li>
+                <li><a href="/docs/0.7.3/manual/notebookashomepage.html">Customize Zeppelin Homepage</a></li>
+                <li role="separator" class="divider"></li>
+                <li class="title"><span><b>More</b><span></li>
+                <li><a href="/docs/0.7.3/install/upgrade.html">Upgrade Zeppelin Version</a></li>
+                <li><a href="/docs/0.7.3/install/build.html">Build from source</a></li>
+                <li><a href="/docs/0.7.3/quickstart/install_with_flink_and_spark_cluster.html">Install Zeppelin with Flink and Spark Clusters Tutorial</a></li>
+              </ul>
+            </li>
+            <li>
+              <a href="#" data-toggle="dropdown" class="dropdown-toggle">Interpreter <b class="caret"></b></a>
+              <ul class="dropdown-menu scrollable-menu">
+                <li><a href="/docs/0.7.3/manual/interpreters.html">Overview</a></li>
+                <li role="separator" class="divider"></li>
+                <li class="title"><span><b>Usage</b><span></li>
+                <li><a href="/docs/0.7.3/manual/interpreterinstallation.html">Interpreter Installation</a></li>
+                <!--<li><a href="/docs/0.7.3/manual/dynamicinterpreterload.html">Dynamic Interpreter Loading</a></li>-->
+                <li><a href="/docs/0.7.3/manual/dependencymanagement.html">Interpreter Dependency Management</a></li>
+                <li><a href="/docs/0.7.3/manual/userimpersonation.html">Interpreter User Impersonation</a></li>
+                <li><a href="/docs/0.7.3/manual/interpreterexechooks.html">Interpreter Execution Hooks (Experimental)</a></li>
+                <li role="separator" class="divider"></li>
+                <li class="title"><span><b>Available Interpreters</b><span></li>
+                <li><a href="/docs/0.7.3/interpreter/alluxio.html">Alluxio</a></li>
+                <li><a href="/docs/0.7.3/interpreter/beam.html">Beam</a></li>
+                <li><a href="/docs/0.7.3/interpreter/bigquery.html">BigQuery</a></li>
+                <li><a href="/docs/0.7.3/interpreter/cassandra.html">Cassandra</a></li>
+                <li><a href="/docs/0.7.3/interpreter/elasticsearch.html">Elasticsearch</a></li>
+                <li><a href="/docs/0.7.3/interpreter/flink.html">Flink</a></li>
+                <li><a href="/docs/0.7.3/interpreter/geode.html">Geode</a></li>
+                <li><a href="/docs/0.7.3/interpreter/hbase.html">HBase</a></li>
+                <li><a href="/docs/0.7.3/interpreter/hdfs.html">HDFS</a></li>
+                <li><a href="/docs/0.7.3/interpreter/hive.html">Hive</a></li>
+                <li><a href="/docs/0.7.3/interpreter/ignite.html">Ignite</a></li>
+                <li><a href="/docs/0.7.3/interpreter/jdbc.html">JDBC</a></li>
+                <li><a href="/docs/0.7.3/interpreter/kylin.html">Kylin</a></li>
+                <li><a href="/docs/0.7.3/interpreter/lens.html">Lens</a></li>
+                <li><a href="/docs/0.7.3/interpreter/livy.html">Livy</a></li>
+                <li><a href="/docs/0.7.3/interpreter/markdown.html">Markdown</a></li>
+                <li><a href="/docs/0.7.3/interpreter/pig.html">Pig</a></li>
+                <li><a href="/docs/0.7.3/interpreter/python.html">Python</a></li>
+                <li><a href="/docs/0.7.3/interpreter/postgresql.html">Postgresql, HAWQ</a></li>
+                <li><a href="/docs/0.7.3/interpreter/r.html">R</a></li>
+                <li><a href="/docs/0.7.3/interpreter/scalding.html">Scalding</a></li>
+                <li><a href="/docs/0.7.3/interpreter/scio.html">Scio</a></li>
+                <li><a href="/docs/0.7.3/interpreter/shell.html">Shell</a></li>
+                <li><a href="/docs/0.7.3/interpreter/spark.html">Spark</a></li>
+              </ul>
+            </li>
+            <li>
+              <a href="#" data-toggle="dropdown" class="dropdown-toggle">Display System <b class="caret"></b></a>
+              <ul class="dropdown-menu">
+                <li class="title"><span><b>Basic Display System</b><span></li>
+                <li><a href="/docs/0.7.3/displaysystem/basicdisplaysystem.html#text">Text</a></li>
+                <li><a href="/docs/0.7.3/displaysystem/basicdisplaysystem.html#html">Html</a></li>
+                <li><a href="/docs/0.7.3/displaysystem/basicdisplaysystem.html#table">Table</a></li>
+                <li role="separator" class="divider"></li>
+                <li class="title"><span><b>Angular API</b><span></li>
+                <li><a href="/docs/0.7.3/displaysystem/back-end-angular.html">Angular (backend API)</a></li>
+                <li><a href="/docs/0.7.3/displaysystem/front-end-angular.html">Angular (frontend API)</a></li>
+              </ul>
+            </li>
+            <li>
+              <a href="#" data-toggle="dropdown" class="dropdown-toggle">More<b class="caret"></b></a>
+              <ul class="dropdown-menu scrollable-menu" style="right: 0; left: auto;">
+                <li class="title"><span><b>Notebook Storage</b><span></li>
+                <li><a href="/docs/0.7.3/storage/storage.html#notebook-storage-in-local-git-repository">Git Storage</a></li>
+                <li><a href="/docs/0.7.3/storage/storage.html#notebook-storage-in-s3">S3 Storage</a></li>
+                <li><a href="/docs/0.7.3/storage/storage.html#notebook-storage-in-azure">Azure Storage</a></li>
+                <li><a href="/docs/0.7.3/storage/storage.html#storage-in-zeppelinhub">ZeppelinHub Storage</a></li>
+                <li role="separator" class="divider"></li>
+                <li class="title"><span><b>REST API</b><span></li>
+                <li><a href="/docs/0.7.3/rest-api/rest-interpreter.html">Interpreter API</a></li>
+                <li><a href="/docs/0.7.3/rest-api/rest-notebook.html">Notebook API</a></li>
+                <li><a href="/docs/0.7.3/rest-api/rest-notebookRepo.html">Notebook Repository API</a></li>
+                <li><a href="/docs/0.7.3/rest-api/rest-configuration.html">Configuration API</a></li>
+                <li><a href="/docs/0.7.3/rest-api/rest-credential.html">Credential API</a></li>
+                <li><a href="/docs/0.7.3/rest-api/rest-helium.html">Helium API</a></li>
+                <li role="separator" class="divider"></li>
+                <li class="title"><span><b>Security</b><span></li>
+                <li><a href="/docs/0.7.3/security/shiroauthentication.html">Shiro Authentication</a></li>                
+                <li><a href="/docs/0.7.3/security/notebook_authorization.html">Notebook Authorization</a></li>
+                <li><a href="/docs/0.7.3/security/datasource_authorization.html">Data Source Authorization</a></li>
+                <li><a href="/docs/0.7.3/security/http_security_headers.html">HTTP Security Headers</a></li>
+                <li><a href="/docs/0.7.3/security/helium_authorization.html">Helium Authorization</a></li>
+                <li role="separator" class="divider"></li>
+                <li class="title"><span><b>Advanced</b><span></li>
+                <li><a href="/docs/0.7.3/install/virtual_machine.html">Zeppelin on Vagrant VM</a></li>
+                <li><a href="/docs/0.7.3/install/spark_cluster_mode.html#spark-standalone-mode">Zeppelin on Spark Cluster Mode (Standalone)</a></li>
+                <li><a href="/docs/0.7.3/install/spark_cluster_mode.html#spark-on-yarn-mode">Zeppelin on Spark Cluster Mode (YARN)</a></li>
+                <li><a href="/docs/0.7.3/install/spark_cluster_mode.html#spark-on-mesos-mode">Zeppelin on Spark Cluster Mode (Mesos)</a></li>
+                <li><a href="/docs/0.7.3/install/cdh.html">Zeppelin on CDH</a></li>
+                <li role="separator" class="divider"></li>
+                <li class="title"><span><b>Contibute</b><span></li>
+                <li><a href="/docs/0.7.3/development/writingzeppelininterpreter.html">Writing Zeppelin Interpreter</a></li>
+                <li><a href="/docs/0.7.3/development/writingzeppelinvisualization.html">Writing Zeppelin Visualization (Experimental)</a></li>
+                <li><a href="/docs/0.7.3/development/writingzeppelinapplication.html">Writing Zeppelin Application (Experimental)</a></li>
+                <li><a href="/docs/0.7.3/development/howtocontribute.html">How to contribute (code)</a></li>
+                <li><a href="/docs/0.7.3/development/howtocontributewebsite.html">How to contribute (website)</a></li>
+              </ul>
+            </li>
+            <li>
+              <a href="/docs/0.7.3/search.html" class="nav-search-link">
+                <span class="fa fa-search nav-search-icon"></span>
+              </a>
+            </li>
+          </ul>
+        </nav><!--/.navbar-collapse -->
+      </div>
+    </div>
+
+
+
+    <div class="content">
+      
+<!--<div class="hero-unit Install Zeppelin with Flink and Spark in cluster mode">
+  <h1></h1>
+</div>
+-->
+
+<div class="row">
+  <div class="col-md-12">
+    <!--
+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.
+-->
+
+<h1>Install with flink and spark cluster</h1>
+
+<div id="toc"></div>
+
+<p>This tutorial is extremely entry-level. It assumes no prior knowledge of Linux, git, or other tools. If you carefully type what I tell you when I tell you, you should be able to get Zeppelin running.</p>
+
+<h2>Installing Zeppelin with Flink and Spark in cluster mode</h2>
+
+<p>This tutorial assumes the user has a machine (real or <a href="https://www.virtualbox.org/wiki/Downloads">virtual</a> with a fresh, minimal installation of <a href="http://www.ubuntu.com/download/server">Ubuntu 14.04.3 Server</a>.</p>
+
+<p><strong>Note:</strong> On the size requirements of the Virtual Machine, some users reported trouble when using the default virtual machine sizes, specifically that the hard drive needed to be at least 16GB- other users did not have this issue.</p>
+
+<p>There are many good tutorials on how to install Ubuntu Server on a virtual box, <a href="http://ilearnstack.com/2013/04/13/setting-ubuntu-vm-in-virtualbox/">here is one of them</a></p>
+
+<h3>Required Programs</h3>
+
+<p>Assuming the minimal install, there are several programs that we will need to install before Zeppelin, Flink, and Spark.</p>
+
+<ul>
+<li>git</li>
+<li>openssh-server</li>
+<li>OpenJDK 7</li>
+<li>Maven 3.1+</li>
+</ul>
+
+<p>For git, openssh-server, and OpenJDK 7 we will be using the apt package manager.</p>
+
+<h5>git</h5>
+
+<p>From the command prompt:</p>
+<div class="highlight"><pre><code class="text language-text" data-lang="text">sudo apt-get install git
+</code></pre></div>
+<h5>openssh-server</h5>
+<div class="highlight"><pre><code class="text language-text" data-lang="text">sudo apt-get install openssh-server
+</code></pre></div>
+<h5>OpenJDK 7</h5>
+<div class="highlight"><pre><code class="text language-text" data-lang="text">sudo apt-get install openjdk-7-jdk openjdk-7-jre-lib
+</code></pre></div>
+<p><em>A note for those using Ubuntu 16.04</em>: To install <code>openjdk-7</code> on Ubuntu 16.04, one must add a repository.  <a href="http://askubuntu.com/questions/761127/ubuntu-16-04-and-openjdk-7">Source</a></p>
+<div class="highlight"><pre><code class="bash language-bash" data-lang="bash">sudo add-apt-repository ppa:openjdk-r/ppa
+sudo apt-get update
+sudo apt-get install openjdk-7-jdk openjdk-7-jre-lib
+</code></pre></div>
+<h5>Maven 3.1+</h5>
+
+<p>Zeppelin requires maven version 3.x.  The version available in the repositories at the time of writing is 2.x, so maven must be installed manually.</p>
+
+<p>Purge any existing versions of maven.</p>
+<div class="highlight"><pre><code class="text language-text" data-lang="text">sudo apt-get purge maven maven2
+</code></pre></div>
+<p>Download the maven 3.3.9 binary.</p>
+<div class="highlight"><pre><code class="text language-text" data-lang="text">wget &quot;http://www.us.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz&quot;
+</code></pre></div>
+<p>Unarchive the binary and move to the <code>/usr/local</code> directory.</p>
+<div class="highlight"><pre><code class="text language-text" data-lang="text">tar -zxvf apache-maven-3.3.9-bin.tar.gz
+sudo mv ./apache-maven-3.3.9 /usr/local
+</code></pre></div>
+<p>Create symbolic links in <code>/usr/bin</code>.</p>
+<div class="highlight"><pre><code class="text language-text" data-lang="text">sudo ln -s /usr/local/apache-maven-3.3.9/bin/mvn /usr/bin/mvn
+</code></pre></div>
+<h3>Installing Zeppelin</h3>
+
+<p>This provides a quick overview of Zeppelin installation from source, however the reader is encouraged to review the <a href="../install/install.html">Zeppelin Installation Guide</a></p>
+
+<p>From the command prompt:
+Clone Zeppelin.</p>
+<div class="highlight"><pre><code class="text language-text" data-lang="text">git clone https://github.com/apache/zeppelin.git
+</code></pre></div>
+<p>Enter the Zeppelin root directory.</p>
+<div class="highlight"><pre><code class="text language-text" data-lang="text">cd zeppelin
+</code></pre></div>
+<p>Package Zeppelin.</p>
+<div class="highlight"><pre><code class="text language-text" data-lang="text">mvn clean package -DskipTests -Pspark-1.6 -Dflink.version=1.1.3 -Pscala-2.10
+</code></pre></div>
+<p><code>-DskipTests</code> skips build tests- you&#39;re not developing (yet), so you don&#39;t need to do tests, the clone version <em>should</em> build.</p>
+
+<p><code>-Pspark-1.6</code> tells maven to build a Zeppelin with Spark 1.6.  This is important because Zeppelin has its own Spark interpreter and the versions must be the same.</p>
+
+<p><code>-Dflink.version=1.1.3</code> tells maven specifically to build Zeppelin with Flink version 1.1.3.</p>
+
+<p>-<code>-Pscala-2.10</code> tells maven to build with Scala v2.10.</p>
+
+<p><strong>Note:</strong> You may wish to include additional build flags such as <code>-Ppyspark</code> or <code>-Psparkr</code>.  See <a href="https://github.com/apache/zeppelin#build">the build section of github for more details</a>.</p>
+
+<p><strong>Note:</strong> You can build against any version of Spark that has a Zeppelin build profile available. The key is to make sure you check out the matching version of Spark to build. At the time of this writing, Spark 1.6 was the most recent Spark version available.</p>
+
+<p><strong>Note:</strong> On build failures. Having installed Zeppelin close to 30 times now, I will tell you that sometimes the build fails for seemingly no reason.
+As long as you didn&#39;t edit any code, it is unlikely the build is failing because of something you did. What does tend to happen, is some dependency that maven is trying to download is unreachable.  If your build fails on this step here are some tips:
+- Don&#39;t get discouraged.
+- Scroll up and read through the logs. There will be clues there.
+- Retry (that is, run the <code>mvn clean package -DskipTests -Pspark-1.6</code> again)
+- If there were clues that a dependency couldn&#39;t be downloaded wait a few hours or even days and retry again. Open source software when compiling is trying to download all of the dependencies it needs, if a server is off-line there is nothing you can do but wait for it to come back.
+- Make sure you followed all of the steps carefully.
+- Ask the community to help you. Go <a href="http://zeppelin.apache.org/community.html">here</a> and join the user mailing list. People are there to help you. Make sure to copy and paste the build output (everything that happened in the console) and include that in your message.</p>
+
+<p>Start the Zeppelin daemon.</p>
+<div class="highlight"><pre><code class="text language-text" data-lang="text">bin/zeppelin-daemon.sh start
+</code></pre></div>
+<p>Use <code>ifconfig</code> to determine the host machine&#39;s IP address. If you are not familiar with how to do this, a fairly comprehensive post can be found <a href="http://www.cyberciti.biz/faq/how-to-find-out-the-ip-address-assigned-to-eth0-and-display-ip-only/">here</a>.</p>
+
+<p>Open a web-browser on a machine connected to the same network as the host (or in the host operating system if using a virtual machine).  Navigate to http://<code>yourip</code>:8080, where yourip is the IP address you found in <code>ifconfig</code>.</p>
+
+<p>See the <a href="../tutorial/tutorial.md">Zeppelin tutorial</a> for basic Zeppelin usage. It is also advised that you take a moment to check out the tutorial notebook that is included with each Zeppelin install, and to familiarize yourself with basic notebook functionality.</p>
+
+<h5>Flink Test</h5>
+
+<p>Create a new notebook named &quot;Flink Test&quot; and copy and paste the following code.</p>
+<div class="highlight"><pre><code class="scala language-scala" data-lang="scala"><span class="o">%</span><span class="n">flink</span>  <span class="c1">// let Zeppelin know what interpreter to use.</span>
+
+<span class="k">val</span> <span class="n">text</span> <span class="k">=</span> <span class="n">benv</span><span class="o">.</span><span class="n">fromElements</span><span class="o">(</span><span class="s">&quot;In the time of chimpanzees, I was a monkey&quot;</span><span class="o">,</span>   <span class="c1">// some lines of text to analyze</span>
+<span class="s">&quot;Butane in my veins and I&#39;m out to cut the junkie&quot;</span><span class="o">,</span>
+<span class="s">&quot;With the plastic eyeballs, spray paint the vegetables&quot;</span><span class="o">,</span>
+<span class="s">&quot;Dog food stalls with the beefcake pantyhose&quot;</span><span class="o">,</span>
+<span class="s">&quot;Kill the headlights and put it in neutral&quot;</span><span class="o">,</span>
+<span class="s">&quot;Stock car flamin&#39; with a loser in the cruise control&quot;</span><span class="o">,</span>
+<span class="s">&quot;Baby&#39;s in Reno with the Vitamin D&quot;</span><span class="o">,</span>
+<span class="s">&quot;Got a couple of couches, sleep on the love seat&quot;</span><span class="o">,</span>
+<span class="s">&quot;Someone came in sayin&#39; I&#39;m insane to complain&quot;</span><span class="o">,</span>
+<span class="s">&quot;About a shotgun wedding and a stain on my shirt&quot;</span><span class="o">,</span>
+<span class="s">&quot;Don&#39;t believe everything that you breathe&quot;</span><span class="o">,</span>
+<span class="s">&quot;You get a parking violation and a maggot on your sleeve&quot;</span><span class="o">,</span>
+<span class="s">&quot;So shave your face with some mace in the dark&quot;</span><span class="o">,</span>
+<span class="s">&quot;Savin&#39; all your food stamps and burnin&#39; down the trailer park&quot;</span><span class="o">,</span>
+<span class="s">&quot;Yo, cut it&quot;</span><span class="o">)</span>
+
+<span class="cm">/*  The meat and potatoes:</span>
+<span class="cm">        this tells Flink to iterate through the elements, in this case strings,</span>
+<span class="cm">        transform the string to lower case and split the string at white space into individual words</span>
+<span class="cm">        then finally aggregate the occurrence of each word.</span>
+
+<span class="cm">        This creates the count variable which is a list of tuples of the form (word, occurances)</span>
+
+<span class="cm">counts.collect().foreach(println(_))  // execute the script and print each element in the counts list</span>
+
+<span class="cm">*/</span>
+<span class="k">val</span> <span class="n">counts</span> <span class="k">=</span> <span class="n">text</span><span class="o">.</span><span class="n">flatMap</span><span class="o">{</span> <span class="k">_</span><span class="o">.</span><span class="n">toLowerCase</span><span class="o">.</span><span class="n">split</span><span class="o">(</span><span class="s">&quot;\\W+&quot;</span><span class="o">)</span> <span class="o">}.</span><span class="n">map</span> <span class="o">{</span> <span class="o">(</span><span class="k">_</span><span class="o">,</span><span class="mi">1</span><span class="o">)</span> <span class="o">}.</span><span class="n">groupBy</span><span class="o">(</span><span class="mi">0</span><span class="o">).</span><span class="n">sum</span><span class="o">(</span><span class="mi">1</span><span class="o">)</span>
+
+<span class="n">counts</span><span class="o">.</span><span class="n">collect</span><span class="o">().</span><span class="n">foreach</span><span class="o">(</span><span class="n">println</span><span class="o">(</span><span class="k">_</span><span class="o">))</span>  <span class="c1">// execute the script and print each element in the counts list</span>
+</code></pre></div>
+<p>Run the code to make sure the built-in Zeppelin Flink interpreter is working properly.</p>
+
+<h5>Spark Test</h5>
+
+<p>Create a new notebook named &quot;Spark Test&quot; and copy and paste the following code.</p>
+<div class="highlight"><pre><code class="scala language-scala" data-lang="scala"><span class="o">%</span><span class="n">spark</span> <span class="c1">// let Zeppelin know what interpreter to use.</span>
+
+<span class="k">val</span> <span class="n">text</span> <span class="k">=</span> <span class="n">sc</span><span class="o">.</span><span class="n">parallelize</span><span class="o">(</span><span class="nc">List</span><span class="o">(</span><span class="s">&quot;In the time of chimpanzees, I was a monkey&quot;</span><span class="o">,</span>  <span class="c1">// some lines of text to analyze</span>
+<span class="s">&quot;Butane in my veins and I&#39;m out to cut the junkie&quot;</span><span class="o">,</span>
+<span class="s">&quot;With the plastic eyeballs, spray paint the vegetables&quot;</span><span class="o">,</span>
+<span class="s">&quot;Dog food stalls with the beefcake pantyhose&quot;</span><span class="o">,</span>
+<span class="s">&quot;Kill the headlights and put it in neutral&quot;</span><span class="o">,</span>
+<span class="s">&quot;Stock car flamin&#39; with a loser in the cruise control&quot;</span><span class="o">,</span>
+<span class="s">&quot;Baby&#39;s in Reno with the Vitamin D&quot;</span><span class="o">,</span>
+<span class="s">&quot;Got a couple of couches, sleep on the love seat&quot;</span><span class="o">,</span>
+<span class="s">&quot;Someone came in sayin&#39; I&#39;m insane to complain&quot;</span><span class="o">,</span>
+<span class="s">&quot;About a shotgun wedding and a stain on my shirt&quot;</span><span class="o">,</span>
+<span class="s">&quot;Don&#39;t believe everything that you breathe&quot;</span><span class="o">,</span>
+<span class="s">&quot;You get a parking violation and a maggot on your sleeve&quot;</span><span class="o">,</span>
+<span class="s">&quot;So shave your face with some mace in the dark&quot;</span><span class="o">,</span>
+<span class="s">&quot;Savin&#39; all your food stamps and burnin&#39; down the trailer park&quot;</span><span class="o">,</span>
+<span class="s">&quot;Yo, cut it&quot;</span><span class="o">))</span>
+
+
+<span class="cm">/*  The meat and potatoes:</span>
+<span class="cm">        this tells spark to iterate through the elements, in this case strings,</span>
+<span class="cm">        transform the string to lower case and split the string at white space into individual words</span>
+<span class="cm">        then finally aggregate the occurrence of each word.</span>
+
+<span class="cm">        This creates the count variable which is a list of tuples of the form (word, occurances)</span>
+<span class="cm">*/</span>
+<span class="k">val</span> <span class="n">counts</span> <span class="k">=</span> <span class="n">text</span><span class="o">.</span><span class="n">flatMap</span> <span class="o">{</span> <span class="k">_</span><span class="o">.</span><span class="n">toLowerCase</span><span class="o">.</span><span class="n">split</span><span class="o">(</span><span class="s">&quot;\\W+&quot;</span><span class="o">)</span> <span class="o">}</span>
+                 <span class="o">.</span><span class="n">map</span> <span class="o">{</span> <span class="o">(</span><span class="k">_</span><span class="o">,</span><span class="mi">1</span><span class="o">)</span> <span class="o">}</span>
+                 <span class="o">.</span><span class="n">reduceByKey</span><span class="o">(</span><span class="k">_</span> <span class="o">+</span> <span class="k">_</span><span class="o">)</span>
+
+<span class="n">counts</span><span class="o">.</span><span class="n">collect</span><span class="o">().</span><span class="n">foreach</span><span class="o">(</span><span class="n">println</span><span class="o">(</span><span class="k">_</span><span class="o">))</span>  <span class="c1">// execute the script and print each element in the counts list</span>
+</code></pre></div>
+<p>Run the code to make sure the built-in Zeppelin Flink interpreter is working properly.</p>
+
+<p>Finally, stop the Zeppelin daemon.  From the command prompt run:</p>
+<div class="highlight"><pre><code class="text language-text" data-lang="text">bin/zeppelin-daemon.sh stop
+</code></pre></div>
+<h3>Installing Clusters</h3>
+
+<h5>Flink Cluster</h5>
+
+<h6>Download Binaries</h6>
+
+<p>Building from source is recommended  where possible, for simplicity in this tutorial we will download Flink and Spark Binaries.</p>
+
+<p>To download the Flink Binary use <code>wget</code></p>
+<div class="highlight"><pre><code class="bash language-bash" data-lang="bash">wget <span class="s2">&quot;http://mirror.cogentco.com/pub/apache/flink/flink-1.1.3/flink-1.1.3-bin-hadoop24-scala_2.10.tgz&quot;</span>
+tar -xzvf flink-1.1.3-bin-hadoop24-scala_2.10.tgz
+</code></pre></div>
+<p>This will download Flink 1.1.3, compatible with Hadoop 2.4.  You do not have to install Hadoop for this binary to work, but if you are using Hadoop, please change <code>24</code> to your appropriate version.</p>
+
+<p>Start the Flink Cluster.</p>
+<div class="highlight"><pre><code class="bash language-bash" data-lang="bash">flink-1.1.3/bin/start-cluster.sh
+</code></pre></div>
+<h6>Building From source</h6>
+
+<p>If you wish to build Flink from source, the following will be instructive.  Note that if you have downloaded and used the binary version this should be skipped.  The changing nature of build tools and versions across platforms makes this section somewhat precarious.  For example, Java8 and Maven 3.0.3 are recommended for building Flink, which are not recommended for Zeppelin at the time of writing.  If the user wishes to attempt to build from source, this section will provide some reference.  If errors are encountered, please contact the Apache Flink community.</p>
+
+<p>See the <a href="https://github.com/apache/flink/blob/master/README.md">Flink Installation guide</a> for more detailed instructions.</p>
+
+<p>Return to the directory where you have been downloading, this tutorial assumes that is <code>$HOME</code>. Clone Flink,  check out release-1.1.3-rc2, and build.</p>
+<div class="highlight"><pre><code class="text language-text" data-lang="text">cd $HOME
+git clone https://github.com/apache/flink.git
+cd flink
+git checkout release-1.1.3-rc2
+mvn clean install -DskipTests
+</code></pre></div>
+<p>Start the Flink Cluster in stand-alone mode</p>
+<div class="highlight"><pre><code class="text language-text" data-lang="text">build-target/bin/start-cluster.sh
+</code></pre></div>
+<h6>Ensure the cluster is up</h6>
+
+<p>In a browser, navigate to http://<code>yourip</code>:8082 to see the Flink Web-UI.  Click on &#39;Task Managers&#39; in the left navigation bar. Ensure there is at least one Task Manager present.</p>
+
+<p><center><img src="../assets/themes/zeppelin/img/screenshots/flink-webui.png" alt="alt text" title="The Flink Web-UI"></center></p>
+
+<p>If no task managers are present, restart the Flink cluster with the following commands:</p>
+
+<p>(if binaries)
+<code>
+flink-1.1.3/bin/stop-cluster.sh
+flink-1.1.3/bin/start-cluster.sh
+</code></p>
+
+<p>(if built from source)
+<code>
+build-target/bin/stop-cluster.sh
+build-target/bin/start-cluster.sh
+</code></p>
+
+<h5>Spark 1.6 Cluster</h5>
+
+<h6>Download Binaries</h6>
+
+<p>Building from source is recommended  where possible, for simplicity in this tutorial we will download Flink and Spark Binaries.</p>
+
+<p>Using binaries is also</p>
+
+<p>To download the Spark Binary use <code>wget</code></p>
+<div class="highlight"><pre><code class="bash language-bash" data-lang="bash">wget <span class="s2">&quot;http://d3kbcqa49mib13.cloudfront.net/spark-1.6.3-bin-hadoop2.6.tgz&quot;</span>
+tar -xzvf spark-1.6.3-bin-hadoop2.6.tgz
+mv spark-1.6.3-bin-hadoop2.6 spark
+</code></pre></div>
+<p>This will download Spark 1.6.3, compatible with Hadoop 2.6.  You do not have to install Hadoop for this binary to work, but if you are using Hadoop, please change <code>2.6</code> to your appropriate version.</p>
+
+<h6>Building From source</h6>
+
+<p>Spark is an extraordinarily large project, which takes considerable time to download and build. It is also prone to build failures for similar reasons listed in the Flink section.  If the user wishes to attempt to build from source, this section will provide some reference.  If errors are encountered, please contact the Apache Spark community.</p>
+
+<p>See the <a href="https://github.com/apache/spark/blob/master/README.md">Spark Installation</a> guide for more detailed instructions.</p>
+
+<p>Return to the directory where you have been downloading, this tutorial assumes that is $HOME. Clone Spark, check out branch-1.6, and build.
+<strong>Note:</strong> Recall, we&#39;re only checking out 1.6 because it is the most recent Spark for which a Zeppelin profile exists at
+  the time of writing. You are free to check out other version, just make sure you build Zeppelin against the correct version of Spark. However if you use Spark 2.0, the word count example will need to be changed as Spark 2.0 is not compatible with the following examples.</p>
+<div class="highlight"><pre><code class="text language-text" data-lang="text">cd $HOME
+</code></pre></div>
+<p>Clone, check out, and build Spark version 1.6.x.</p>
+<div class="highlight"><pre><code class="text language-text" data-lang="text">git clone https://github.com/apache/spark.git
+cd spark
+git checkout branch-1.6
+mvn clean package -DskipTests
+</code></pre></div>
+<h6>Start the Spark cluster</h6>
+
+<p>Return to the <code>$HOME</code> directory.</p>
+<div class="highlight"><pre><code class="bash language-bash" data-lang="bash"><span class="nb">cd</span> <span class="nv">$HOME</span>
+</code></pre></div>
+<p>Start the Spark cluster in stand alone mode, specifying the webui-port as some port other than 8080 (the webui-port of Zeppelin).</p>
+<div class="highlight"><pre><code class="text language-text" data-lang="text">spark/sbin/start-master.sh --webui-port 8082
+</code></pre></div>
+<p><strong>Note:</strong> Why <code>--webui-port 8082</code>? There is a digression toward the end of this document that explains this.</p>
+
+<p>Open a browser and navigate to http://<code>yourip</code>:8082 to ensure the Spark master is running.</p>
+
+<p><center><img src="../assets/themes/zeppelin/img/screenshots/spark-master-webui1.png" alt="alt text" title="It should look like this..."></center></p>
+
+<p>Toward the top of the page there will be a <em>URL</em>: spark://<code>yourhost</code>:7077.  Note this URL, the Spark Master URI, it will be needed in subsequent steps.</p>
+
+<p>Start the slave using the URI from the Spark master WebUI:</p>
+<div class="highlight"><pre><code class="text language-text" data-lang="text">spark/sbin/start-slave.sh spark://yourhostname:7077
+</code></pre></div>
+<p>Return to the root directory and start the Zeppelin daemon.</p>
+<div class="highlight"><pre><code class="text language-text" data-lang="text">cd $HOME
+
+zeppelin/bin/zeppelin-daemon.sh start
+</code></pre></div>
+<h5>Configure Interpreters</h5>
+
+<p>Open a web browser and go to the Zeppelin web-ui at http://yourip:8080.</p>
+
+<p>Now go back to the Zeppelin web-ui at http://<code>yourip</code>:8080 and this time click on <em>anonymous</em> at the top right, which will open a drop-down menu, select <em>Interpreters</em> to enter interpreter configuration.</p>
+
+<p>In the Spark section, click the edit button in the top right corner to make the property values editable (looks like a pencil).
+The only field that needs to be edited in the Spark interpreter is the master field. Change this value from <code>local[*]</code> to the URL you used to start the slave, mine was <code>spark://ubuntu:7077</code>.</p>
+
+<p>Click <em>Save</em> to update the parameters, and click <em>OK</em> when it asks you about restarting the interpreter.</p>
+
+<p>Now scroll down to the Flink section. Click the edit button and change the value of <em>host</em> from <code>local</code> to <code>localhost</code>. Click <em>Save</em> again.</p>
+
+<p>Reopen the examples and execute them again (I.e. you need to click the play button at the top of the screen, or the button on the paragraph .</p>
+
+<p>You should be able check the Flink and Spark webuis (at something like http://<code>yourip</code>:8081, http://<code>yourip</code>:8082, http://<code>yourip</code>:8083) and see that jobs have been run against the clusters.</p>
+
+<p><strong>Digression</strong> Sorry to be vague and use terms such as &#39;something like&#39;, but exactly what web-ui is at what port is going to depend on what order you started things.
+ What is really going on here is you are pointing your browser at specific ports, namely 8081, 8082, and 8083.  Flink and Spark all want to put their web-ui on port 8080, but are
+ well behaved and will take the next port available. Since Zeppelin started first, it will get port 8080.  When Flink starts (assuming you started Flink first), it will try to bind to
+ port 8080, see that it is already taken, and go to the next one available, hopefully 8081.  Spark has a webui for the master and the slave, so when they start they will try to bind to 8080
+   already taken by Zeppelin), then 8081 (already taken by Flink&#39;s webui), then 8082. If everything goes smoothy and you followed the directions precisely, the webuis should be 8081 and 8082.
+     It <em>is</em> possible to specify the port you want the webui to bind to (at the command line by passing the <code>--webui-port &lt;port&gt;</code> flag when you start the Flink and Spark, where <code>&lt;port&gt;</code> is the port
+     you want to see that webui on.  You can also set the default webui port of Spark and Flink (and Zeppelin) in the configuration files, but this is a tutorial for novices and slightly out of scope.</p>
+
+<h3>Next Steps</h3>
+
+<p>Check out the <a href="./tutorial.md">tutorial</a> for more cool things you can do with your new toy!</p>
+
+<p><a href="http://zeppelin.apache.org/community.html">Join the community</a>, ask questions and contribute! Every little bit helps.</p>
+
+  </div>
+</div>
+
+
+      <hr>
+      <footer>
+        <!-- <p>&copy; 2017 The Apache Software Foundation</p>-->
+      </footer>
+    </div>
+
+    
+
+
+  <script type="text/javascript">
+  (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');
+
+  ga('create', 'UA-45176241-5', 'zeppelin.apache.org');
+  ga('require', 'linkid', 'linkid.js');
+  ga('send', 'pageview');
+
+</script>
+
+
+
+  </body>
+</html>
+

Added: zeppelin/site/docs/0.7.3/quickstart/tutorial.html
URL: http://svn.apache.org/viewvc/zeppelin/site/docs/0.7.3/quickstart/tutorial.html?rev=1809223&view=auto
==============================================================================
--- zeppelin/site/docs/0.7.3/quickstart/tutorial.html (added)
+++ zeppelin/site/docs/0.7.3/quickstart/tutorial.html Thu Sep 21 20:33:57 2017
@@ -0,0 +1,395 @@
+
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <title>Apache Zeppelin 0.7.3 Documentation: Apache Zeppelin Tutorial</title>
+    <meta name="description" content="This tutorial page contains a short walk-through tutorial that uses Apache Spark backend. Please note that this tutorial is valid for Spark 1.3 and higher.">
+    <meta name="author" content="The Apache Software Foundation">
+
+    <!-- Enable responsive viewport -->
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
+    <!--[if lt IE 9]>
+    <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+
+    <link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet">
+
+    <!-- Le styles -->
+    <link href="/docs/0.7.3/assets/themes/zeppelin/bootstrap/css/bootstrap.css" rel="stylesheet">
+    <link href="/docs/0.7.3/assets/themes/zeppelin/css/style.css?body=1" rel="stylesheet" type="text/css">
+    <link href="/docs/0.7.3/assets/themes/zeppelin/css/syntax.css" rel="stylesheet"  type="text/css" media="screen" /> 
+    <!-- Le fav and touch icons -->
+    <!-- Update these with your own images
+    <link rel="shortcut icon" href="images/favicon.ico">
+    <link rel="apple-touch-icon" href="images/apple-touch-icon.png">
+    <link rel="apple-touch-icon" sizes="72x72" href="images/apple-touch-icon-72x72.png">
+    <link rel="apple-touch-icon" sizes="114x114" href="images/apple-touch-icon-114x114.png">
+    -->
+
+    <!-- Js -->
+    <script src="https://code.jquery.com/jquery-1.10.2.min.js"></script>
+    <script src="/docs/0.7.3/assets/themes/zeppelin/bootstrap/js/bootstrap.min.js"></script>
+    <script src="/docs/0.7.3/assets/themes/zeppelin/js/docs.js"></script>
+    <script src="/docs/0.7.3/assets/themes/zeppelin/js/anchor.min.js"></script>
+    <script src="/docs/0.7.3/assets/themes/zeppelin/js/toc.js"></script>
+    <script src="/docs/0.7.3/assets/themes/zeppelin/js/lunr.min.js"></script>
+    <script src="/docs/0.7.3/assets/themes/zeppelin/js/search.js"></script>    
+
+    <!-- atom & rss feed -->
+    <link href="/docs/0.7.3/atom.xml" type="application/atom+xml" rel="alternate" title="Sitewide ATOM Feed">
+    <link href="/docs/0.7.3/rss.xml" type="application/rss+xml" rel="alternate" title="Sitewide RSS Feed">
+  </head>
+
+  <body>
+    
+        <div id="menu" class="navbar navbar-inverse navbar-fixed-top" role="navigation">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <div class="navbar-brand">
+            <a class="navbar-brand-main" href="http://zeppelin.apache.org">
+              <img src="/assets/themes/zeppelin/img/zeppelin_logo.png" width="50" alt="I'm zeppelin">
+              <span style="vertical-align:middle">Zeppelin</span>
+            </a>
+            <a class="navbar-brand-version" href="/docs/0.7.3">
+              <span><small>0.7.3</small></span>
+            </a>
+          </div>
+        </div>
+        <nav class="navbar-collapse collapse" role="navigation">
+          <ul class="nav navbar-nav">
+            <li>
+              <a href="#" data-toggle="dropdown" class="dropdown-toggle">Quick Start <b class="caret"></b></a>
+              <ul class="dropdown-menu">
+                <li><a href="/docs/0.7.3/index.html">What is Apache Zeppelin ?</a></li>
+                <li role="separator" class="divider"></li>
+                <li class="title"><span><b>Getting Started</b><span></li>
+                <li><a href="/docs/0.7.3/install/install.html">Install</a></li>
+                <li><a href="/docs/0.7.3/install/configuration.html">Configuration</a></li>
+                <li><a href="/docs/0.7.3/quickstart/explorezeppelinui.html">Explore Zeppelin UI</a></li>
+                <li><a href="/docs/0.7.3/quickstart/tutorial.html">Tutorial</a></li>
+                <li role="separator" class="divider"></li>
+                <li class="title"><span><b>Basic Feature Guide</b><span></li>
+                <li><a href="/docs/0.7.3/manual/dynamicform.html">Dynamic Form</a></li>
+                <li><a href="/docs/0.7.3/manual/publish.html">Publish your Paragraph</a></li>
+                <li><a href="/docs/0.7.3/manual/notebookashomepage.html">Customize Zeppelin Homepage</a></li>
+                <li role="separator" class="divider"></li>
+                <li class="title"><span><b>More</b><span></li>
+                <li><a href="/docs/0.7.3/install/upgrade.html">Upgrade Zeppelin Version</a></li>
+                <li><a href="/docs/0.7.3/install/build.html">Build from source</a></li>
+                <li><a href="/docs/0.7.3/quickstart/install_with_flink_and_spark_cluster.html">Install Zeppelin with Flink and Spark Clusters Tutorial</a></li>
+              </ul>
+            </li>
+            <li>
+              <a href="#" data-toggle="dropdown" class="dropdown-toggle">Interpreter <b class="caret"></b></a>
+              <ul class="dropdown-menu scrollable-menu">
+                <li><a href="/docs/0.7.3/manual/interpreters.html">Overview</a></li>
+                <li role="separator" class="divider"></li>
+                <li class="title"><span><b>Usage</b><span></li>
+                <li><a href="/docs/0.7.3/manual/interpreterinstallation.html">Interpreter Installation</a></li>
+                <!--<li><a href="/docs/0.7.3/manual/dynamicinterpreterload.html">Dynamic Interpreter Loading</a></li>-->
+                <li><a href="/docs/0.7.3/manual/dependencymanagement.html">Interpreter Dependency Management</a></li>
+                <li><a href="/docs/0.7.3/manual/userimpersonation.html">Interpreter User Impersonation</a></li>
+                <li><a href="/docs/0.7.3/manual/interpreterexechooks.html">Interpreter Execution Hooks (Experimental)</a></li>
+                <li role="separator" class="divider"></li>
+                <li class="title"><span><b>Available Interpreters</b><span></li>
+                <li><a href="/docs/0.7.3/interpreter/alluxio.html">Alluxio</a></li>
+                <li><a href="/docs/0.7.3/interpreter/beam.html">Beam</a></li>
+                <li><a href="/docs/0.7.3/interpreter/bigquery.html">BigQuery</a></li>
+                <li><a href="/docs/0.7.3/interpreter/cassandra.html">Cassandra</a></li>
+                <li><a href="/docs/0.7.3/interpreter/elasticsearch.html">Elasticsearch</a></li>
+                <li><a href="/docs/0.7.3/interpreter/flink.html">Flink</a></li>
+                <li><a href="/docs/0.7.3/interpreter/geode.html">Geode</a></li>
+                <li><a href="/docs/0.7.3/interpreter/hbase.html">HBase</a></li>
+                <li><a href="/docs/0.7.3/interpreter/hdfs.html">HDFS</a></li>
+                <li><a href="/docs/0.7.3/interpreter/hive.html">Hive</a></li>
+                <li><a href="/docs/0.7.3/interpreter/ignite.html">Ignite</a></li>
+                <li><a href="/docs/0.7.3/interpreter/jdbc.html">JDBC</a></li>
+                <li><a href="/docs/0.7.3/interpreter/kylin.html">Kylin</a></li>
+                <li><a href="/docs/0.7.3/interpreter/lens.html">Lens</a></li>
+                <li><a href="/docs/0.7.3/interpreter/livy.html">Livy</a></li>
+                <li><a href="/docs/0.7.3/interpreter/markdown.html">Markdown</a></li>
+                <li><a href="/docs/0.7.3/interpreter/pig.html">Pig</a></li>
+                <li><a href="/docs/0.7.3/interpreter/python.html">Python</a></li>
+                <li><a href="/docs/0.7.3/interpreter/postgresql.html">Postgresql, HAWQ</a></li>
+                <li><a href="/docs/0.7.3/interpreter/r.html">R</a></li>
+                <li><a href="/docs/0.7.3/interpreter/scalding.html">Scalding</a></li>
+                <li><a href="/docs/0.7.3/interpreter/scio.html">Scio</a></li>
+                <li><a href="/docs/0.7.3/interpreter/shell.html">Shell</a></li>
+                <li><a href="/docs/0.7.3/interpreter/spark.html">Spark</a></li>
+              </ul>
+            </li>
+            <li>
+              <a href="#" data-toggle="dropdown" class="dropdown-toggle">Display System <b class="caret"></b></a>
+              <ul class="dropdown-menu">
+                <li class="title"><span><b>Basic Display System</b><span></li>
+                <li><a href="/docs/0.7.3/displaysystem/basicdisplaysystem.html#text">Text</a></li>
+                <li><a href="/docs/0.7.3/displaysystem/basicdisplaysystem.html#html">Html</a></li>
+                <li><a href="/docs/0.7.3/displaysystem/basicdisplaysystem.html#table">Table</a></li>
+                <li role="separator" class="divider"></li>
+                <li class="title"><span><b>Angular API</b><span></li>
+                <li><a href="/docs/0.7.3/displaysystem/back-end-angular.html">Angular (backend API)</a></li>
+                <li><a href="/docs/0.7.3/displaysystem/front-end-angular.html">Angular (frontend API)</a></li>
+              </ul>
+            </li>
+            <li>
+              <a href="#" data-toggle="dropdown" class="dropdown-toggle">More<b class="caret"></b></a>
+              <ul class="dropdown-menu scrollable-menu" style="right: 0; left: auto;">
+                <li class="title"><span><b>Notebook Storage</b><span></li>
+                <li><a href="/docs/0.7.3/storage/storage.html#notebook-storage-in-local-git-repository">Git Storage</a></li>
+                <li><a href="/docs/0.7.3/storage/storage.html#notebook-storage-in-s3">S3 Storage</a></li>
+                <li><a href="/docs/0.7.3/storage/storage.html#notebook-storage-in-azure">Azure Storage</a></li>
+                <li><a href="/docs/0.7.3/storage/storage.html#storage-in-zeppelinhub">ZeppelinHub Storage</a></li>
+                <li role="separator" class="divider"></li>
+                <li class="title"><span><b>REST API</b><span></li>
+                <li><a href="/docs/0.7.3/rest-api/rest-interpreter.html">Interpreter API</a></li>
+                <li><a href="/docs/0.7.3/rest-api/rest-notebook.html">Notebook API</a></li>
+                <li><a href="/docs/0.7.3/rest-api/rest-notebookRepo.html">Notebook Repository API</a></li>
+                <li><a href="/docs/0.7.3/rest-api/rest-configuration.html">Configuration API</a></li>
+                <li><a href="/docs/0.7.3/rest-api/rest-credential.html">Credential API</a></li>
+                <li><a href="/docs/0.7.3/rest-api/rest-helium.html">Helium API</a></li>
+                <li role="separator" class="divider"></li>
+                <li class="title"><span><b>Security</b><span></li>
+                <li><a href="/docs/0.7.3/security/shiroauthentication.html">Shiro Authentication</a></li>                
+                <li><a href="/docs/0.7.3/security/notebook_authorization.html">Notebook Authorization</a></li>
+                <li><a href="/docs/0.7.3/security/datasource_authorization.html">Data Source Authorization</a></li>
+                <li><a href="/docs/0.7.3/security/http_security_headers.html">HTTP Security Headers</a></li>
+                <li><a href="/docs/0.7.3/security/helium_authorization.html">Helium Authorization</a></li>
+                <li role="separator" class="divider"></li>
+                <li class="title"><span><b>Advanced</b><span></li>
+                <li><a href="/docs/0.7.3/install/virtual_machine.html">Zeppelin on Vagrant VM</a></li>
+                <li><a href="/docs/0.7.3/install/spark_cluster_mode.html#spark-standalone-mode">Zeppelin on Spark Cluster Mode (Standalone)</a></li>
+                <li><a href="/docs/0.7.3/install/spark_cluster_mode.html#spark-on-yarn-mode">Zeppelin on Spark Cluster Mode (YARN)</a></li>
+                <li><a href="/docs/0.7.3/install/spark_cluster_mode.html#spark-on-mesos-mode">Zeppelin on Spark Cluster Mode (Mesos)</a></li>
+                <li><a href="/docs/0.7.3/install/cdh.html">Zeppelin on CDH</a></li>
+                <li role="separator" class="divider"></li>
+                <li class="title"><span><b>Contibute</b><span></li>
+                <li><a href="/docs/0.7.3/development/writingzeppelininterpreter.html">Writing Zeppelin Interpreter</a></li>
+                <li><a href="/docs/0.7.3/development/writingzeppelinvisualization.html">Writing Zeppelin Visualization (Experimental)</a></li>
+                <li><a href="/docs/0.7.3/development/writingzeppelinapplication.html">Writing Zeppelin Application (Experimental)</a></li>
+                <li><a href="/docs/0.7.3/development/howtocontribute.html">How to contribute (code)</a></li>
+                <li><a href="/docs/0.7.3/development/howtocontributewebsite.html">How to contribute (website)</a></li>
+              </ul>
+            </li>
+            <li>
+              <a href="/docs/0.7.3/search.html" class="nav-search-link">
+                <span class="fa fa-search nav-search-icon"></span>
+              </a>
+            </li>
+          </ul>
+        </nav><!--/.navbar-collapse -->
+      </div>
+    </div>
+
+
+
+    <div class="content">
+      
+<!--<div class="hero-unit Apache Zeppelin Tutorial">
+  <h1></h1>
+</div>
+-->
+
+<div class="row">
+  <div class="col-md-12">
+    <!--
+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.
+-->
+
+<h1>Zeppelin Tutorial</h1>
+
+<div id="toc"></div>
+
+<p>This tutorial walks you through some of the fundamental Zeppelin concepts. We will assume you have already installed Zeppelin. If not, please see <a href="../install/install.html">here</a> first.</p>
+
+<p>Current main backend processing engine of Zeppelin is <a href="https://spark.apache.org">Apache Spark</a>. If you&#39;re new to this system, you might want to start by getting an idea of how it processes data to get the most out of Zeppelin.</p>
+
+<h2>Tutorial with Local File</h2>
+
+<h3>Data Refine</h3>
+
+<p>Before you start Zeppelin tutorial, you will need to download <a href="http://archive.ics.uci.edu/ml/machine-learning-databases/00222/bank.zip">bank.zip</a>. </p>
+
+<p>First, to transform csv format data into RDD of <code>Bank</code> objects, run following script. This will also remove header using <code>filter</code> function.</p>
+<div class="highlight"><pre><code class="scala language-scala" data-lang="scala"><span class="k">val</span> <span class="n">bankText</span> <span class="k">=</span> <span class="n">sc</span><span class="o">.</span><span class="n">textFile</span><span class="o">(</span><span class="s">&quot;yourPath/bank/bank-full.csv&quot;</span><span class="o">)</span>
+
+<span class="k">case</span> <span class="k">class</span> <span class="nc">Bank</span><span class="o">(</span><span class="n">age</span><span class="k">:</span><span class="kt">Integer</span><span class="o">,</span> <span class="n">job</span><span class="k">:</span><span class="kt">String</span><span class="o">,</span> <span class="n">marital</span> <span class="k">:</span> <span class="kt">String</span><span class="o">,</span> <span class="n">education</span> <span class="k">:</span> <span class="kt">String</span><span class="o">,</span> <span class="n">balance</span> <span class="k">:</span> <span class="kt">Integer</span><span class="o">)</span>
+
+<span class="c1">// split each line, filter out header (starts with &quot;age&quot;), and map it into Bank case class</span>
+<span class="k">val</span> <span class="n">bank</span> <span class="k">=</span> <span class="n">bankText</span><span class="o">.</span><span class="n">map</span><span class="o">(</span><span class="n">s</span><span class="k">=&gt;</span><span class="n">s</span><span class="o">.</span><span class="n">split</span><span class="o">(</span><span class="s">&quot;;&quot;</span><span class="o">)).</span><span class="n">filter</span><span class="o">(</span><span class="n">s</span><span class="k">=&gt;</span><span class="n">s</span><span class="o">(</span><span class="mi">0</span><span class="o">)!=</span><span class="s">&quot;\&quot;age\&quot;&quot;</span><span class="o">).</span><span class="n">map</span><span class="o">(</span>
+    <span class="n">s</span><span class="k">=&gt;</span><span class="nc">Bank</span><span class="o">(</span><span class="n">s</span><span class="o">(</span><span class="mi">0</span><span class="o">).</span><span class="n">toInt</span><span class="o">,</span> 
+            <span class="n">s</span><span class="o">(</span><span class="mi">1</span><span class="o">).</span><span class="n">replaceAll</span><span class="o">(</span><span class="s">&quot;\&quot;&quot;</span><span class="o">,</span> <span class="s">&quot;&quot;</span><span class="o">),</span>
+            <span class="n">s</span><span class="o">(</span><span class="mi">2</span><span class="o">).</span><span class="n">replaceAll</span><span class="o">(</span><span class="s">&quot;\&quot;&quot;</span><span class="o">,</span> <span class="s">&quot;&quot;</span><span class="o">),</span>
+            <span class="n">s</span><span class="o">(</span><span class="mi">3</span><span class="o">).</span><span class="n">replaceAll</span><span class="o">(</span><span class="s">&quot;\&quot;&quot;</span><span class="o">,</span> <span class="s">&quot;&quot;</span><span class="o">),</span>
+            <span class="n">s</span><span class="o">(</span><span class="mi">5</span><span class="o">).</span><span class="n">replaceAll</span><span class="o">(</span><span class="s">&quot;\&quot;&quot;</span><span class="o">,</span> <span class="s">&quot;&quot;</span><span class="o">).</span><span class="n">toInt</span>
+        <span class="o">)</span>
+<span class="o">)</span>
+
+<span class="c1">// convert to DataFrame and create temporal table</span>
+<span class="n">bank</span><span class="o">.</span><span class="n">toDF</span><span class="o">().</span><span class="n">registerTempTable</span><span class="o">(</span><span class="s">&quot;bank&quot;</span><span class="o">)</span>
+</code></pre></div>
+<h3>Data Retrieval</h3>
+
+<p>Suppose we want to see age distribution from <code>bank</code>. To do this, run:</p>
+<div class="highlight"><pre><code class="sql language-sql" data-lang="sql"><span class="o">%</span><span class="k">sql</span> <span class="k">select</span> <span class="n">age</span><span class="p">,</span> <span class="k">count</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="k">from</span> <span class="n">bank</span> <span class="k">where</span> <span class="n">age</span> <span class="o">&lt;</span> <span class="mi">30</span> <span class="k">group</span> <span class="k">by</span> <span class="n">age</span> <span class="k">order</span> <span class="k">by</span> <span class="n">age</span>
+</code></pre></div>
+<p>You can make input box for setting age condition by replacing <code>30</code> with <code>${maxAge=30}</code>.</p>
+<div class="highlight"><pre><code class="sql language-sql" data-lang="sql"><span class="o">%</span><span class="k">sql</span> <span class="k">select</span> <span class="n">age</span><span class="p">,</span> <span class="k">count</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="k">from</span> <span class="n">bank</span> <span class="k">where</span> <span class="n">age</span> <span class="o">&lt;</span> <span class="err">${</span><span class="n">maxAge</span><span class="o">=</span><span class="mi">30</span><span class="err">}</span> <span class="k">group</span> <span class="k">by</span> <span class="n">age</span> <span class="k">order</span> <span class="k">by</span> <span class="n">age</span>
+</code></pre></div>
+<p>Now we want to see age distribution with certain marital status and add combo box to select marital status. Run:</p>
+<div class="highlight"><pre><code class="sql language-sql" data-lang="sql"><span class="o">%</span><span class="k">sql</span> <span class="k">select</span> <span class="n">age</span><span class="p">,</span> <span class="k">count</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="k">from</span> <span class="n">bank</span> <span class="k">where</span> <span class="n">marital</span><span class="o">=</span><span class="ss">&quot;${marital=single,single|divorced|married}&quot;</span> <span class="k">group</span> <span class="k">by</span> <span class="n">age</span> <span class="k">order</span> <span class="k">by</span> <span class="n">age</span>
+</code></pre></div>
+<p><br /></p>
+
+<h2>Tutorial with Streaming Data</h2>
+
+<h3>Data Refine</h3>
+
+<p>Since this tutorial is based on Twitter&#39;s sample tweet stream, you must configure authentication with a Twitter account. To do this, take a look at <a href="https://databricks-training.s3.amazonaws.com/realtime-processing-with-spark-streaming.html#twitter-credential-setup">Twitter Credential Setup</a>. After you get API keys, you should fill out credential related values(<code>apiKey</code>, <code>apiSecret</code>, <code>accessToken</code>, <code>accessTokenSecret</code>) with your API keys on following script.</p>
+
+<p>This will create a RDD of <code>Tweet</code> objects and register these stream data as a table:</p>
+<div class="highlight"><pre><code class="scala language-scala" data-lang="scala"><span class="k">import</span> <span class="nn">org.apache.spark.streaming._</span>
+<span class="k">import</span> <span class="nn">org.apache.spark.streaming.twitter._</span>
+<span class="k">import</span> <span class="nn">org.apache.spark.storage.StorageLevel</span>
+<span class="k">import</span> <span class="nn">scala.io.Source</span>
+<span class="k">import</span> <span class="nn">scala.collection.mutable.HashMap</span>
+<span class="k">import</span> <span class="nn">java.io.File</span>
+<span class="k">import</span> <span class="nn">org.apache.log4j.Logger</span>
+<span class="k">import</span> <span class="nn">org.apache.log4j.Level</span>
+<span class="k">import</span> <span class="nn">sys.process.stringSeqToProcess</span>
+
+<span class="cm">/** Configures the Oauth Credentials for accessing Twitter */</span>
+<span class="k">def</span> <span class="n">configureTwitterCredentials</span><span class="o">(</span><span class="n">apiKey</span><span class="k">:</span> <span class="kt">String</span><span class="o">,</span> <span class="n">apiSecret</span><span class="k">:</span> <span class="kt">String</span><span class="o">,</span> <span class="n">accessToken</span><span class="k">:</span> <span class="kt">String</span><span class="o">,</span> <span class="n">accessTokenSecret</span><span class="k">:</span> <span class="kt">String</span><span class="o">)</span> <span class="o">{</span>
+  <span class="k">val</span> <span class="n">configs</span> <span class="k">=</span> <span class="k">new</span> <span class="nc">HashMap</span><span class="o">[</span><span class="kt">String</span>, <span class="kt">String</span><span class="o">]</span> <span class="o">++=</span> <span class="nc">Seq</span><span class="o">(</span>
+    <span class="s">&quot;apiKey&quot;</span> <span class="o">-&gt;</span> <span class="n">apiKey</span><span class="o">,</span> <span class="s">&quot;apiSecret&quot;</span> <span class="o">-&gt;</span> <span class="n">apiSecret</span><span class="o">,</span> <span class="s">&quot;accessToken&quot;</span> <span class="o">-&gt;</span> <span class="n">accessToken</span><span class="o">,</span> <span class="s">&quot;accessTokenSecret&quot;</span> <span class="o">-&gt;</span> <span class="n">accessTokenSecret</span><span class="o">)</span>
+  <span class="n">println</span><span class="o">(</span><span class="s">&quot;Configuring Twitter OAuth&quot;</span><span class="o">)</span>
+  <span class="n">configs</span><span class="o">.</span><span class="n">foreach</span><span class="o">{</span> <span class="k">case</span><span class="o">(</span><span class="n">key</span><span class="o">,</span> <span class="n">value</span><span class="o">)</span> <span class="k">=&gt;</span>
+    <span class="k">if</span> <span class="o">(</span><span class="n">value</span><span class="o">.</span><span class="n">trim</span><span class="o">.</span><span class="n">isEmpty</span><span class="o">)</span> <span class="o">{</span>
+      <span class="k">throw</span> <span class="k">new</span> <span class="nc">Exception</span><span class="o">(</span><span class="s">&quot;Error setting authentication - value for &quot;</span> <span class="o">+</span> <span class="n">key</span> <span class="o">+</span> <span class="s">&quot; not set&quot;</span><span class="o">)</span>
+    <span class="o">}</span>
+    <span class="k">val</span> <span class="n">fullKey</span> <span class="k">=</span> <span class="s">&quot;twitter4j.oauth.&quot;</span> <span class="o">+</span> <span class="n">key</span><span class="o">.</span><span class="n">replace</span><span class="o">(</span><span class="s">&quot;api&quot;</span><span class="o">,</span> <span class="s">&quot;consumer&quot;</span><span class="o">)</span>
+    <span class="nc">System</span><span class="o">.</span><span class="n">setProperty</span><span class="o">(</span><span class="n">fullKey</span><span class="o">,</span> <span class="n">value</span><span class="o">.</span><span class="n">trim</span><span class="o">)</span>
+    <span class="n">println</span><span class="o">(</span><span class="s">&quot;\tProperty &quot;</span> <span class="o">+</span> <span class="n">fullKey</span> <span class="o">+</span> <span class="s">&quot; set as [&quot;</span> <span class="o">+</span> <span class="n">value</span><span class="o">.</span><span class="n">trim</span> <span class="o">+</span> <span class="s">&quot;]&quot;</span><span class="o">)</span>
+  <span class="o">}</span>
+  <span class="n">println</span><span class="o">()</span>
+<span class="o">}</span>
+
+<span class="c1">// Configure Twitter credentials</span>
+<span class="k">val</span> <span class="n">apiKey</span> <span class="k">=</span> <span class="s">&quot;xxxxxxxxxxxxxxxxxxxxxxxxx&quot;</span>
+<span class="k">val</span> <span class="n">apiSecret</span> <span class="k">=</span> <span class="s">&quot;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&quot;</span>
+<span class="k">val</span> <span class="n">accessToken</span> <span class="k">=</span> <span class="s">&quot;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&quot;</span>
+<span class="k">val</span> <span class="n">accessTokenSecret</span> <span class="k">=</span> <span class="s">&quot;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&quot;</span>
+<span class="n">configureTwitterCredentials</span><span class="o">(</span><span class="n">apiKey</span><span class="o">,</span> <span class="n">apiSecret</span><span class="o">,</span> <span class="n">accessToken</span><span class="o">,</span> <span class="n">accessTokenSecret</span><span class="o">)</span>
+
+<span class="k">import</span> <span class="nn">org.apache.spark.streaming.twitter._</span>
+<span class="k">val</span> <span class="n">ssc</span> <span class="k">=</span> <span class="k">new</span> <span class="nc">StreamingContext</span><span class="o">(</span><span class="n">sc</span><span class="o">,</span> <span class="nc">Seconds</span><span class="o">(</span><span class="mi">2</span><span class="o">))</span>
+<span class="k">val</span> <span class="n">tweets</span> <span class="k">=</span> <span class="nc">TwitterUtils</span><span class="o">.</span><span class="n">createStream</span><span class="o">(</span><span class="n">ssc</span><span class="o">,</span> <span class="nc">None</span><span class="o">)</span>
+<span class="k">val</span> <span class="n">twt</span> <span class="k">=</span> <span class="n">tweets</span><span class="o">.</span><span class="n">window</span><span class="o">(</span><span class="nc">Seconds</span><span class="o">(</span><span class="mi">60</span><span class="o">))</span>
+
+<span class="k">case</span> <span class="k">class</span> <span class="nc">Tweet</span><span class="o">(</span><span class="n">createdAt</span><span class="k">:</span><span class="kt">Long</span><span class="o">,</span> <span class="n">text</span><span class="k">:</span><span class="kt">String</span><span class="o">)</span>
+<span class="n">twt</span><span class="o">.</span><span class="n">map</span><span class="o">(</span><span class="n">status</span><span class="k">=&gt;</span>
+  <span class="nc">Tweet</span><span class="o">(</span><span class="n">status</span><span class="o">.</span><span class="n">getCreatedAt</span><span class="o">().</span><span class="n">getTime</span><span class="o">()/</span><span class="mi">1000</span><span class="o">,</span> <span class="n">status</span><span class="o">.</span><span class="n">getText</span><span class="o">())</span>
+<span class="o">).</span><span class="n">foreachRDD</span><span class="o">(</span><span class="n">rdd</span><span class="k">=&gt;</span>
+  <span class="c1">// Below line works only in spark 1.3.0.</span>
+  <span class="c1">// For spark 1.1.x and spark 1.2.x,</span>
+  <span class="c1">// use rdd.registerTempTable(&quot;tweets&quot;) instead.</span>
+  <span class="n">rdd</span><span class="o">.</span><span class="n">toDF</span><span class="o">().</span><span class="n">registerAsTable</span><span class="o">(</span><span class="s">&quot;tweets&quot;</span><span class="o">)</span>
+<span class="o">)</span>
+
+<span class="n">twt</span><span class="o">.</span><span class="n">print</span>
+
+<span class="n">ssc</span><span class="o">.</span><span class="n">start</span><span class="o">()</span>
+</code></pre></div>
+<h3>Data Retrieval</h3>
+
+<p>For each following script, every time you click run button you will see different result since it is based on real-time data.</p>
+
+<p>Let&#39;s begin by extracting maximum 10 tweets which contain the word <strong>girl</strong>.</p>
+<div class="highlight"><pre><code class="sql language-sql" data-lang="sql"><span class="o">%</span><span class="k">sql</span> <span class="k">select</span> <span class="o">*</span> <span class="k">from</span> <span class="n">tweets</span> <span class="k">where</span> <span class="nb">text</span> <span class="k">like</span> <span class="s1">&#39;%girl%&#39;</span> <span class="k">limit</span> <span class="mi">10</span>
+</code></pre></div>
+<p>This time suppose we want to see how many tweets have been created per sec during last 60 sec. To do this, run:</p>
+<div class="highlight"><pre><code class="sql language-sql" data-lang="sql"><span class="o">%</span><span class="k">sql</span> <span class="k">select</span> <span class="n">createdAt</span><span class="p">,</span> <span class="k">count</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="k">from</span> <span class="n">tweets</span> <span class="k">group</span> <span class="k">by</span> <span class="n">createdAt</span> <span class="k">order</span> <span class="k">by</span> <span class="n">createdAt</span>
+</code></pre></div>
+<p>You can make user-defined function and use it in Spark SQL. Let&#39;s try it by making function named <code>sentiment</code>. This function will return one of the three attitudes( positive, negative, neutral ) towards the parameter.</p>
+<div class="highlight"><pre><code class="scala language-scala" data-lang="scala"><span class="k">def</span> <span class="n">sentiment</span><span class="o">(</span><span class="n">s</span><span class="k">:</span><span class="kt">String</span><span class="o">)</span> <span class="k">:</span> <span class="kt">String</span> <span class="o">=</span> <span class="o">{</span>
+    <span class="k">val</span> <span class="n">positive</span> <span class="k">=</span> <span class="nc">Array</span><span class="o">(</span><span class="s">&quot;like&quot;</span><span class="o">,</span> <span class="s">&quot;love&quot;</span><span class="o">,</span> <span class="s">&quot;good&quot;</span><span class="o">,</span> <span class="s">&quot;great&quot;</span><span class="o">,</span> <span class="s">&quot;happy&quot;</span><span class="o">,</span> <span class="s">&quot;cool&quot;</span><span class="o">,</span> <span class="s">&quot;the&quot;</span><span class="o">,</span> <span class="s">&quot;one&quot;</span><span class="o">,</span> <span class="s">&quot;that&quot;</span><span class="o">)</span>
+    <span class="k">val</span> <span class="n">negative</span> <span class="k">=</span> <span class="nc">Array</span><span class="o">(</span><span class="s">&quot;hate&quot;</span><span class="o">,</span> <span class="s">&quot;bad&quot;</span><span class="o">,</span> <span class="s">&quot;stupid&quot;</span><span class="o">,</span> <span class="s">&quot;is&quot;</span><span class="o">)</span>
+
+    <span class="k">var</span> <span class="n">st</span> <span class="k">=</span> <span class="mi">0</span><span class="o">;</span>
+
+    <span class="k">val</span> <span class="n">words</span> <span class="k">=</span> <span class="n">s</span><span class="o">.</span><span class="n">split</span><span class="o">(</span><span class="s">&quot; &quot;</span><span class="o">)</span>    
+    <span class="n">positive</span><span class="o">.</span><span class="n">foreach</span><span class="o">(</span><span class="n">p</span> <span class="k">=&gt;</span>
+        <span class="n">words</span><span class="o">.</span><span class="n">foreach</span><span class="o">(</span><span class="n">w</span> <span class="k">=&gt;</span>
+            <span class="k">if</span><span class="o">(</span><span class="n">p</span><span class="o">==</span><span class="n">w</span><span class="o">)</span> <span class="n">st</span> <span class="k">=</span> <span class="n">st</span><span class="o">+</span><span class="mi">1</span>
+        <span class="o">)</span>
+    <span class="o">)</span>
+
+    <span class="n">negative</span><span class="o">.</span><span class="n">foreach</span><span class="o">(</span><span class="n">p</span><span class="k">=&gt;</span>
+        <span class="n">words</span><span class="o">.</span><span class="n">foreach</span><span class="o">(</span><span class="n">w</span><span class="k">=&gt;</span>
+            <span class="k">if</span><span class="o">(</span><span class="n">p</span><span class="o">==</span><span class="n">w</span><span class="o">)</span> <span class="n">st</span> <span class="k">=</span> <span class="n">st</span><span class="o">-</span><span class="mi">1</span>
+        <span class="o">)</span>
+    <span class="o">)</span>
+    <span class="k">if</span><span class="o">(</span><span class="n">st</span><span class="o">&gt;</span><span class="mi">0</span><span class="o">)</span>
+        <span class="s">&quot;positivie&quot;</span>
+    <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="n">st</span><span class="o">&lt;</span><span class="mi">0</span><span class="o">)</span>
+        <span class="s">&quot;negative&quot;</span>
+    <span class="k">else</span>
+        <span class="s">&quot;neutral&quot;</span>
+<span class="o">}</span>
+
+<span class="c1">// Below line works only in spark 1.3.0.</span>
+<span class="c1">// For spark 1.1.x and spark 1.2.x,</span>
+<span class="c1">// use sqlc.registerFunction(&quot;sentiment&quot;, sentiment _) instead.</span>
+<span class="n">sqlc</span><span class="o">.</span><span class="n">udf</span><span class="o">.</span><span class="n">register</span><span class="o">(</span><span class="s">&quot;sentiment&quot;</span><span class="o">,</span> <span class="n">sentiment</span> <span class="k">_</span><span class="o">)</span>
+</code></pre></div>
+<p>To check how people think about girls using <code>sentiment</code> function we&#39;ve made above, run this:</p>
+<div class="highlight"><pre><code class="sql language-sql" data-lang="sql"><span class="o">%</span><span class="k">sql</span> <span class="k">select</span> <span class="n">sentiment</span><span class="p">(</span><span class="nb">text</span><span class="p">),</span> <span class="k">count</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="k">from</span> <span class="n">tweets</span> <span class="k">where</span> <span class="nb">text</span> <span class="k">like</span> <span class="s1">&#39;%girl%&#39;</span> <span class="k">group</span> <span class="k">by</span> <span class="n">sentiment</span><span class="p">(</span><span class="nb">text</span><span class="p">)</span>
+</code></pre></div>
+  </div>
+</div>
+
+
+      <hr>
+      <footer>
+        <!-- <p>&copy; 2017 The Apache Software Foundation</p>-->
+      </footer>
+    </div>
+
+    
+
+
+  <script type="text/javascript">
+  (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');
+
+  ga('create', 'UA-45176241-5', 'zeppelin.apache.org');
+  ga('require', 'linkid', 'linkid.js');
+  ga('send', 'pageview');
+
+</script>
+
+
+
+  </body>
+</html>
+