http://git-wip-us.apache.org/repos/asf/incubator-predictionio-site/blob/0bdbf8fe/resources/intellij/index.html
----------------------------------------------------------------------
diff --git a/resources/intellij/index.html b/resources/intellij/index.html
new file mode 100644
index 0000000..e39bdc6
--- /dev/null
+++ b/resources/intellij/index.html
@@ -0,0 +1,69 @@
+<!DOCTYPE html><html><head><title>Developing Engines with IntelliJ 
IDEA</title><meta charset="utf-8"/><meta content="IE=edge,chrome=1" 
http-equiv="X-UA-Compatible"/><meta name="viewport" 
content="width=device-width, initial-scale=1.0"/><meta class="swiftype" 
name="title" data-type="string" content="Developing Engines with IntelliJ 
IDEA"/><link rel="canonical" 
href="https://docs.prediction.io/resources/intellij/"/><link 
href="/images/favicon/normal-b330020a.png" rel="shortcut icon"/><link 
href="/images/favicon/apple-c0febcf2.png" rel="apple-touch-icon"/><link 
href="//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800"
 rel="stylesheet"/><link 
href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" 
rel="stylesheet"/><link href="/stylesheets/application-a2a2f408.css" 
rel="stylesheet" type="text/css"/><script 
src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.2/html5shiv.min.js"></script><script
 src="//cdn
 
.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script><script
 src="//use.typekit.net/pqo0itb.js"></script><script>try{Typekit.load({ async: 
true });}catch(e){}</script></head><body><div id="global"><header><div 
class="container" id="header-wrapper"><div class="row"><div 
class="col-sm-12"><div id="logo-wrapper"><span id="drawer-toggle"></span><a 
href="#"></a><a href="http://predictionio.incubator.apache.org/";><img 
alt="PredictionIO" id="logo" 
src="/images/logos/logo-ee2b9bb3.png"/></a></div><div id="menu-wrapper"><div 
id="pill-wrapper"><a class="pill left" 
href="/gallery/template-gallery">TEMPLATES</a> <a class="pill right" 
href="//github.com/apache/incubator-predictionio/">OPEN 
SOURCE</a></div></div><img class="mobile-search-bar-toggler hidden-md 
hidden-lg" 
src="/images/icons/search-glass-704bd4ff.png"/></div></div></div></header><div 
id="search-bar-row-wrapper"><div class="container-fluid" 
id="search-bar-row"><div class="row"><div class="col-md-9 col-sm-11 c
 ol-xs-11"><div class="hidden-md hidden-lg" 
id="mobile-page-heading-wrapper"><p>PredictionIO Docs</p><h4>Developing Engines 
with IntelliJ IDEA</h4></div><h4 class="hidden-sm hidden-xs">PredictionIO 
Docs</h4></div><div class="col-md-3 col-sm-1 col-xs-1 hidden-md hidden-lg"><img 
id="left-menu-indicator" 
src="/images/icons/down-arrow-dfe9f7fe.png"/></div><div class="col-md-3 
col-sm-12 col-xs-12 swiftype-wrapper"><div class="swiftype"><form 
class="search-form"><img class="search-box-toggler hidden-xs hidden-sm" 
src="/images/icons/search-glass-704bd4ff.png"/><div class="search-box"><img 
src="/images/icons/search-glass-704bd4ff.png"/><input type="text" 
id="st-search-input" class="st-search-input" placeholder="Search 
Doc..."/></div><img class="swiftype-row-hider hidden-md hidden-lg" 
src="/images/icons/drawer-toggle-active-fcbef12a.png"/></form></div></div><div 
class="mobile-left-menu-toggler hidden-md 
hidden-lg"></div></div></div></div><div id="page" class="container-fluid"><div 
class="row"
 ><div id="left-menu-wrapper" class="col-md-3"><nav id="nav-main"><ul><li 
 >class="level-1"><a class="expandible" href="/"><span>Apache PredictionIO 
 >(incubating) Documentation</span></a><ul><li class="level-2"><a class="final" 
 >href="/"><span>Welcome to Apache PredictionIO 
 >(incubating)</span></a></li></ul></li><li class="level-1"><a 
 >class="expandible" href="#"><span>Getting Started</span></a><ul><li 
 >class="level-2"><a class="final" href="/start/"><span>A Quick 
 >Intro</span></a></li><li class="level-2"><a class="final" 
 >href="/install/"><span>Installing Apache PredictionIO 
 >(incubating)</span></a></li><li class="level-2"><a class="final" 
 >href="/start/download/"><span>Downloading an Engine 
 >Template</span></a></li><li class="level-2"><a class="final" 
 >href="/start/deploy/"><span>Deploying Your First Engine</span></a></li><li 
 >class="level-2"><a class="final" href="/start/customize/"><span>Customizing 
 >the Engine</span></a></li></ul></li><li class="level-1"><a class="expandible" 
 >href="#"><span>In
 tegrating with Your App</span></a><ul><li class="level-2"><a class="final" 
href="/appintegration/"><span>App Integration Overview</span></a></li><li 
class="level-2"><a class="expandible" href="/sdk/"><span>List of 
SDKs</span></a><ul><li class="level-3"><a class="final" 
href="/sdk/java/"><span>Java & Android SDK</span></a></li><li 
class="level-3"><a class="final" href="/sdk/php/"><span>PHP 
SDK</span></a></li><li class="level-3"><a class="final" 
href="/sdk/python/"><span>Python SDK</span></a></li><li class="level-3"><a 
class="final" href="/sdk/ruby/"><span>Ruby SDK</span></a></li><li 
class="level-3"><a class="final" href="/sdk/community/"><span>Community Powered 
SDKs</span></a></li></ul></li></ul></li><li class="level-1"><a 
class="expandible" href="#"><span>Deploying an Engine</span></a><ul><li 
class="level-2"><a class="final" href="/deploy/"><span>Deploying as a Web 
Service</span></a></li><li class="level-2"><a class="final" 
href="/cli/#engine-commands"><span>Engine Command-line Inte
 rface</span></a></li><li class="level-2"><a class="final" 
href="/deploy/monitoring/"><span>Monitoring Engine</span></a></li><li 
class="level-2"><a class="final" href="/deploy/engineparams/"><span>Setting 
Engine Parameters</span></a></li><li class="level-2"><a class="final" 
href="/deploy/enginevariants/"><span>Deploying Multiple Engine 
Variants</span></a></li></ul></li><li class="level-1"><a class="expandible" 
href="#"><span>Customizing an Engine</span></a><ul><li class="level-2"><a 
class="final" href="/customize/"><span>Learning DASE</span></a></li><li 
class="level-2"><a class="final" href="/customize/dase/"><span>Implement 
DASE</span></a></li><li class="level-2"><a class="final" 
href="/customize/troubleshooting/"><span>Troubleshooting Engine 
Development</span></a></li><li class="level-2"><a class="final" 
href="/api/current/#package"><span>Engine Scala 
APIs</span></a></li></ul></li><li class="level-1"><a class="expandible" 
href="#"><span>Collecting and Analyzing Data</span></a><ul><
 li class="level-2"><a class="final" href="/datacollection/"><span>Event Server 
Overview</span></a></li><li class="level-2"><a class="final" 
href="/cli/#event-server-commands"><span>Event Server Command-line 
Interface</span></a></li><li class="level-2"><a class="final" 
href="/datacollection/eventapi/"><span>Collecting Data with 
REST/SDKs</span></a></li><li class="level-2"><a class="final" 
href="/datacollection/eventmodel/"><span>Events Modeling</span></a></li><li 
class="level-2"><a class="final" 
href="/datacollection/webhooks/"><span>Unifying Multichannel Data with 
Webhooks</span></a></li><li class="level-2"><a class="final" 
href="/datacollection/channel/"><span>Channel</span></a></li><li 
class="level-2"><a class="final" 
href="/datacollection/batchimport/"><span>Importing Data in 
Batch</span></a></li><li class="level-2"><a class="final" 
href="/datacollection/analytics/"><span>Using Analytics 
Tools</span></a></li></ul></li><li class="level-1"><a class="expandible" 
href="#"><span>Choos
 ing an Algorithm(s)</span></a><ul><li class="level-2"><a class="final" 
href="/algorithm/"><span>Built-in Algorithm Libraries</span></a></li><li 
class="level-2"><a class="final" href="/algorithm/switch/"><span>Switching to 
Another Algorithm</span></a></li><li class="level-2"><a class="final" 
href="/algorithm/multiple/"><span>Combining Multiple 
Algorithms</span></a></li><li class="level-2"><a class="final" 
href="/algorithm/custom/"><span>Adding Your Own 
Algorithms</span></a></li></ul></li><li class="level-1"><a class="expandible" 
href="#"><span>ML Tuning and Evaluation</span></a><ul><li class="level-2"><a 
class="final" href="/evaluation/"><span>Overview</span></a></li><li 
class="level-2"><a class="final" 
href="/evaluation/paramtuning/"><span>Hyperparameter Tuning</span></a></li><li 
class="level-2"><a class="final" 
href="/evaluation/evaluationdashboard/"><span>Evaluation 
Dashboard</span></a></li><li class="level-2"><a class="final" 
href="/evaluation/metricchoose/"><span>Choosing Evalua
 tion Metrics</span></a></li><li class="level-2"><a class="final" 
href="/evaluation/metricbuild/"><span>Building Evaluation 
Metrics</span></a></li></ul></li><li class="level-1"><a class="expandible" 
href="#"><span>System Architecture</span></a><ul><li class="level-2"><a 
class="final" href="/system/"><span>Architecture Overview</span></a></li><li 
class="level-2"><a class="final" href="/system/anotherdatastore/"><span>Using 
Another Data Store</span></a></li></ul></li><li class="level-1"><a 
class="expandible" href="#"><span>Engine Template Gallery</span></a><ul><li 
class="level-2"><a class="final" 
href="/gallery/template-gallery/"><span>Browse</span></a></li><li 
class="level-2"><a class="final" 
href="/community/submit-template/"><span>Submit your Engine as a 
Template</span></a></li></ul></li><li class="level-1"><a class="expandible" 
href="#"><span>Demo Tutorials</span></a><ul><li class="level-2"><a 
class="final" href="/demo/tapster/"><span>Comics Recommendation 
Demo</span></a></li><li c
 lass="level-2"><a class="final" href="/demo/community/"><span>Community 
Contributed Demo</span></a></li><li class="level-2"><a class="final" 
href="/demo/textclassification/"><span>Text Classification Engine 
Tutorial</span></a></li></ul></li><li class="level-1"><a class="expandible" 
href="/community/"><span>Getting Involved</span></a><ul><li class="level-2"><a 
class="final" href="/community/contribute-code/"><span>Contribute 
Code</span></a></li><li class="level-2"><a class="final" 
href="/community/contribute-documentation/"><span>Contribute 
Documentation</span></a></li><li class="level-2"><a class="final" 
href="/community/contribute-sdk/"><span>Contribute a SDK</span></a></li><li 
class="level-2"><a class="final" 
href="/community/contribute-webhook/"><span>Contribute a 
Webhook</span></a></li><li class="level-2"><a class="final" 
href="/community/projects/"><span>Community 
Projects</span></a></li></ul></li><li class="level-1"><a class="expandible" 
href="#"><span>Getting Help</span></a><
 ul><li class="level-2"><a class="final" 
href="/resources/faq/"><span>FAQs</span></a></li><li class="level-2"><a 
class="final" href="/support/"><span>Support</span></a></li></ul></li><li 
class="level-1"><a class="expandible" 
href="#"><span>Resources</span></a><ul><li class="level-2"><a class="final 
active" href="/resources/intellij/"><span>Developing Engines with IntelliJ 
IDEA</span></a></li><li class="level-2"><a class="final" 
href="/resources/upgrade/"><span>Upgrade Instructions</span></a></li><li 
class="level-2"><a class="final" 
href="/resources/glossary/"><span>Glossary</span></a></li></ul></li></ul></nav></div><div
 class="col-md-9 col-sm-12"><div class="content-header hidden-md 
hidden-lg"><div id="breadcrumbs" class="hidden-sm hidden xs"><ul><li><a 
href="#">Resources</a><span class="spacer">&gt;</span></li><li><span 
class="last">Developing Engines with IntelliJ IDEA</span></li></ul></div><div 
id="page-title"><h1>Developing Engines with IntelliJ IDEA</h1></div></div><div 
id="tabl
 e-of-content-wrapper"><h5>On this page</h5><aside id="table-of-contents"><ul> 
<li> <a href="#prerequisites">Prerequisites</a> </li> <li> <a 
href="#preparing-intellij-for-engine-development">Preparing IntelliJ for Engine 
Development</a> </li> <li> <a 
href="#running-and-debugging-in-intellij-idea">Running and Debugging in 
IntelliJ IDEA</a> </li> <li> <a 
href="#loading-a-template-into-intellij-idea">Loading a Template Into Intellij 
IDEA</a> </li> </ul> </aside><hr/><a id="edit-page-link" 
href="https://github.com/apache/incubator-predictionio/tree/livedoc/docs/manual/source/resources/intellij.html.md.erb";><img
 src="/images/icons/edit-pencil-d6c1bb3d.png"/>Edit this page</a></div><div 
class="content-header hidden-sm hidden-xs"><div id="breadcrumbs" 
class="hidden-sm hidden xs"><ul><li><a href="#">Resources</a><span 
class="spacer">&gt;</span></li><li><span class="last">Developing Engines with 
IntelliJ IDEA</span></li></ul></div><div id="page-title"><h1>Developing Engines 
with IntelliJ IDEA
 </h1></div></div><div class="content"><h2 id='prerequisites' 
class='header-anchors'>Prerequisites</h2><p>This documentation assumes that you 
have a fully functional PredictionIO setup. If you have not installed 
PredictionIO yet, please follow <a href="/install/">these 
instructions</a>.</p><h2 id='preparing-intellij-for-engine-development' 
class='header-anchors'>Preparing IntelliJ for Engine Development</h2><h3 
id='installing-intellij-scala-plugin' class='header-anchors'>Installing 
IntelliJ Scala Plugin</h3><p>First of all, you will need to install the <a 
href="https://plugins.jetbrains.com/plugin/?id=1347";>Scala plugin</a> if you 
have not already done so.</p><p>Go to the <em>Preferences</em> menu item, and 
look for <em>Plugins</em>. You should see the following screen.</p><p><img 
alt="IntelliJ Plugins" 
src="/images/intellij/intelliJ-scala-plugin-09ee074a.png"/></p><p>Click 
<em>Install JetBrains plugin...</em>, the search for <em>Scala</em>. You should 
arrive at something similar to 
 the following.</p><p><img alt="Scala Plugin" 
src="/images/intellij/intellij-scala-plugin-2-592c697f.png"/></p><p>Click the 
green <em>Install plugin</em> button to install the plugin. Restart IntelliJ 
IDEA if asked to do so.</p><h3 id='setting-up-the-engine-directory' 
class='header-anchors'>Setting Up the Engine Directory</h3><div 
class="alert-message info"><p>It is very important to run at least <code>pio 
build</code> once in your engine directory so that the project correctly 
recognizes the version of PredictionIO that you are using. If you upgraded your 
PredictionIO installation later, you will need to run <code>pio build</code> 
again in order for the engine to pick up the latest version of 
PredictionIO.</p></div><p>Create an engine directory from a template. This 
requires that you install a template that you wish to start from or modify. 
Follow template <a href="/start/download">install</a> and <a 
href="/start/deploy">deploy</a> instructions or go through the <a 
href="/templates/
 recommendation/quickstart/">Quick Start</a> if you are planning to modify a 
recommender. Make sure to build, train, and deploy the engine to make sure all 
is configured properly.</p><p>From IntelliJ IDEA, choose <em>File</em> &gt; 
<em>New</em> &gt; <em>Project from Existing Sources...</em>. When asked to 
select a directory to import, browse to the engine directory that you 
downloaded too and proceed. Make sure you pick <em>Import project from external 
model</em> &gt; <em>SBT</em>, then proceed to finish.</p><p>You should be able 
to build the project at this point. To run and debug PredictionIO server, 
continue on to the rest of the steps.</p><div class="alert-message info"><p>If 
you are running on OS X, you will need to do the following due to this <a 
href="http://bit.ly/12Abtvn";>known issue</a>.</p></div><p>Edit 
<code>build.sbt</code> and add the following under 
<code>libraryDependencies</code></p><div class="highlight shell"><table 
style="border-spacing: 0"><tbody><tr><td class="g
 utter gl" style="text-align: right"><pre class="lineno">1</pre></td><td 
class="code"><pre><span class="s2">"org.xerial.snappy"</span> % <span 
class="s2">"snappy-java"</span> % <span class="s2">"1.1.1.7"</span>
+</pre></td></tr></tbody></table> </div> <p><img alt="Updating build.sbt" 
src="/images/intellij/intellij-buildsbt-05cfd141.png"/></p><p>When you are done 
editing, IntelliJ should either refresh the project automatically or prompt you 
to refresh.</p><h3 id='dependencies' 
class='header-anchors'>Dependencies</h3><p>IntelliJ has the annoying tendency 
to drop some dependencies when you refresh your build.sbt after any changes. To 
avoid this we put any jars that must be available at runtime into a separate 
empty module in the project then we make the main engine project depend on this 
dummy module for runtime classes.</p><p>Right click on the project and click 
<em>Open Module Settings</em>. In the second modules column hit 
<strong>+</strong> and create a new Scala module. Name it pio-runtime-jars and 
add these assemblies under the module dependencies tab and remember to change 
the scope of the jars to <strong>runtime</strong>:</p> <ul> <li><p> 
<code>pio-assembly-0.10.0-incubating.jar</code
 ></p><p>This JAR can be found inside the <code>assembly</code> or 
 ><code>lib</code> directory of your PredictionIO installation 
 >directory.</p></li> <li><p> 
 ><code>spark-assembly-1.5.2-hadoop2.4.0.jar</code></p><p>This JAR can be found 
 >inside the <code>assembly</code> or <code>lib</code> directory of your Apache 
 >Spark installation directory.</p></li> </ul> <p><img alt="Create empty module 
 >and add dependencies" 
 >src="/images/intellij/pio-runtime-jar-deps-3f3c99d9.png"/></p><p>Now make 
 >your engine module dependent on the pio-runtime-jars module for scope = 
 >runtime. </p><p><img alt="Create empty module and add dependencies" 
 >src="/images/intellij/pio-runtime-jars-266e8c1b.png"/></p><h2 
 >id='running-and-debugging-in-intellij-idea' class='header-anchors'>Running 
 >and Debugging in IntelliJ IDEA</h2><h3 id='simulating-<code>pio-train</code>' 
 >class='header-anchors' >Simulating <code>pio train</code></h3><p>Create a new 
 ><em>Run/Debug Configuration</em> by going to <em>Run</em> &gt; <em>Edit 
 >Configu
 rations...</em>. Click on the <strong>+</strong> button and select 
<em>Application</em>. Name it <code>pio train</code> and put in the 
following.</p><div class="highlight shell"><table style="border-spacing: 
0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre 
class="lineno">1
+2
+3</pre></td><td class="code"><pre>Main class: 
org.apache.predictionio.workflow.CreateWorkflow
+VM options: -Dspark.master<span class="o">=</span><span 
class="nb">local</span> -Dlog4j.configuration<span 
class="o">=</span>file:/<span 
class="k">**</span>replace_with_your_PredictionIO_path<span 
class="k">**</span>/conf/log4j.properties
+Program arguments: --engine-id dummy --engine-version dummy --engine-variant 
engine.json
+</pre></td></tr></tbody></table> </div> <p>Click the <strong>...</strong> 
button to the right of <em>Environment variables</em>, and paste the 
following.</p><div class="highlight shell"><table style="border-spacing: 
0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre 
class="lineno">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21</pre></td><td class="code"><pre><span class="nv">SPARK_HOME</span><span 
class="o">=</span>/<span 
class="k">**</span>reaplce_w_your_spark_binary_path<span class="k">**</span>
+<span class="nv">PIO_FS_BASEDIR</span><span class="o">=</span>/<span 
class="k">**</span>replace_w_your_path_to<span class="k">**</span>/.pio_store
+<span class="nv">PIO_FS_ENGINESDIR</span><span class="o">=</span>/<span 
class="k">**</span>replace_w_your_path_to<span 
class="k">**</span>/.pio_store/engines
+<span class="nv">PIO_FS_TMPDIR</span><span class="o">=</span>/<span 
class="k">**</span>replace_w_your_path_to<span class="k">*</span>/.pio_store/tmp
+<span class="nv">PIO_STORAGE_REPOSITORIES_METADATA_NAME</span><span 
class="o">=</span>predictionio_metadata
+<span class="nv">PIO_STORAGE_REPOSITORIES_METADATA_SOURCE</span><span 
class="o">=</span>ELASTICSEARCH
+<span class="nv">PIO_STORAGE_REPOSITORIES_MODELDATA_NAME</span><span 
class="o">=</span>pio_
+<span class="nv">PIO_STORAGE_REPOSITORIES_MODELDATA_SOURCE</span><span 
class="o">=</span>LOCALFS
+<span class="nv">PIO_STORAGE_REPOSITORIES_APPDATA_NAME</span><span 
class="o">=</span>predictionio_appdata
+<span class="nv">PIO_STORAGE_REPOSITORIES_APPDATA_SOURCE</span><span 
class="o">=</span>ELASTICSEARCH
+<span class="nv">PIO_STORAGE_REPOSITORIES_EVENTDATA_NAME</span><span 
class="o">=</span>predictionio_eventdata
+<span class="nv">PIO_STORAGE_REPOSITORIES_EVENTDATA_SOURCE</span><span 
class="o">=</span>HBASE
+<span class="nv">PIO_STORAGE_SOURCES_ELASTICSEARCH_TYPE</span><span 
class="o">=</span>elasticsearch
+<span class="nv">PIO_STORAGE_SOURCES_ELASTICSEARCH_HOSTS</span><span 
class="o">=</span>localhost
+<span class="nv">PIO_STORAGE_SOURCES_ELASTICSEARCH_PORTS</span><span 
class="o">=</span>9300
+<span class="nv">PIO_STORAGE_SOURCES_LOCALFS_TYPE</span><span 
class="o">=</span>localfs
+<span class="nv">PIO_STORAGE_SOURCES_LOCALFS_HOSTS</span><span 
class="o">=</span>/<span class="k">**</span>replace_w_your_path_to<span 
class="k">**</span>/.pio_store/models
+<span class="nv">PIO_STORAGE_SOURCES_LOCALFS_PORTS</span><span 
class="o">=</span>0
+<span class="nv">PIO_STORAGE_SOURCES_HBASE_TYPE</span><span 
class="o">=</span>hbase
+<span class="nv">PIO_STORAGE_SOURCES_HBASE_HOSTS</span><span 
class="o">=</span>0
+<span class="nv">PIO_STORAGE_SOURCES_HBASE_PORTS</span><span 
class="o">=</span>0
+</pre></td></tr></tbody></table> </div> <div class="alert-message 
info"><p>Remember to replace all paths that start with <code>**replace</code> 
with actual values. The directory <code>.pio_store</code> typically locates 
inside your home directory.</p></div><p>The end result should look something 
similar to this.</p><p><img alt="Run Configuration" 
src="/images/intellij/intellij-config-48c05039.png"/></p><p>Save and you can 
run or debug <code>pio train</code> with the new configuration!</p><h3 
id='simulating-<code>pio-deploy</code>' class='header-anchors' >Simulating 
<code>pio deploy</code></h3><p>For <code>pio deploy</code>, simply duplicate 
the previous configuration and replace with the following.</p><div 
class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td 
class="gutter gl" style="text-align: right"><pre class="lineno">1
+2</pre></td><td class="code"><pre>Main class: 
org.apache.predictionio.workflow.CreateServer
+Program Arguments: --engineInstanceId <span 
class="k">**</span>replace_with_the_id_from_pio_train<span class="k">**</span>
+</pre></td></tr></tbody></table> </div> <h3 id='executing-a-query' 
class='header-anchors'>Executing a Query</h3><p>You can execute a query with 
the correct SDK. For a recommender that has been trained with the sample 
MovieLens dataset perhaps the easiest query is a curl one. Start by running or 
debuging your <code>deploy</code> config so the service is waiting for the 
query. Then go to the &quot;Terminal&quot; tab at the very bottom of the IDEA 
window and enter the curl request:</p><p><code>$ curl -H &quot;Content-Type: 
application/json&quot; -d &#39;{ &quot;user&quot;: &quot;1&quot;, 
&quot;num&quot;: 4 }&#39; http://localhost:8000/queries.json</code></p><p>This 
should return something like:</p><div class="highlight shell"><table 
style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: 
right"><pre class="lineno">1
+2
+3
+4
+5
+6</pre></td><td class="code"><pre><span class="o">{</span><span 
class="s2">"itemScores"</span>:[
+  <span class="o">{</span><span class="s2">"item"</span>:<span 
class="s2">"52"</span>,<span class="s2">"score"</span>:9.582509402541834<span 
class="o">}</span>,
+  <span class="o">{</span><span class="s2">"item"</span>:<span 
class="s2">"95"</span>,<span class="s2">"score"</span>:8.017236650368387<span 
class="o">}</span>,
+  <span class="o">{</span><span class="s2">"item"</span>:<span 
class="s2">"89"</span>,<span class="s2">"score"</span>:6.975951244053634<span 
class="o">}</span>,
+  <span class="o">{</span><span class="s2">"item"</span>:<span 
class="s2">"34"</span>,<span class="s2">"score"</span>:6.857457277981334<span 
class="o">}</span>
+<span class="o">]}</span>
+</pre></td></tr></tbody></table> </div> <div class="alert-message info"><p>If 
you hit a breakpoint you are likely to get a connection timeout. To see the 
data that would have been returned, just place a breakpoint where the response 
is created or run the query with no breakpoints.</p></div><h2 
id='loading-a-template-into-intellij-idea' class='header-anchors'>Loading a 
Template Into Intellij IDEA</h2><p>To customize an existing <a 
href="/gallery/template-gallery">template</a> using Intellij IDEA, first pull 
it from the template gallery:</p><div class="highlight shell"><table 
style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: 
right"><pre class="lineno">1</pre></td><td class="code"><pre><span class="gp">$ 
</span>pio template get &lt;Template Source&gt; &lt;New Engine Directory&gt;
+</pre></td></tr></tbody></table> </div> <p>Now, before opening the template 
with Intellij, run the following command in the new engine template 
directory</p><div class="highlight shell"><table style="border-spacing: 
0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre 
class="lineno">1</pre></td><td class="code"><pre><span class="gp">$ </span>pio 
build
+</pre></td></tr></tbody></table> </div> <p>This should update the pioVersion 
key in SBT to the version of PredictionIO you have installed, so that Intellij 
loads the correct JARS via its Auto-Import feature. Now, you can go ahead and 
open the file <code>build.sbt</code> with Intellij IDEA. You are now ready to 
<a href="/customize/">customize</a> your new engine 
template.</p></div></div></div></div><footer><div class="container"><div 
class="seperator"></div><div class="row"><div class="col-md-6 col-xs-6 
footer-link-column"><div 
class="footer-link-column-row"><h4>Community</h4><ul><li><a 
href="//docs.prediction.io/install/" target="blank">Download</a></li><li><a 
href="//docs.prediction.io/" target="blank">Docs</a></li><li><a 
href="//github.com/apache/incubator-predictionio" 
target="blank">GitHub</a></li><li><a 
href="mailto:user-subscr...@predictionio.incubator.apache.org"; 
target="blank">Subscribe to User Mailing List</a></li><li><a 
href="//stackoverflow.com/questions/tagged/prediction
 io" target="blank">Stackoverflow</a></li></ul></div></div><div class="col-md-6 
col-xs-6 footer-link-column"><div 
class="footer-link-column-row"><h4>Contribute</h4><ul><li><a 
href="//predictionio.incubator.apache.org/community/contribute-code/" 
target="blank">Contribute</a></li><li><a 
href="//github.com/apache/incubator-predictionio" target="blank">Source 
Code</a></li><li><a href="//issues.apache.org/jira/browse/PIO" 
target="blank">Bug Tracker</a></li><li><a 
href="mailto:dev-subscr...@predictionio.incubator.apache.org"; 
target="blank">Subscribe to Development Mailing 
List</a></li></ul></div></div></div></div><div id="footer-bottom"><div 
class="container"><div class="row"><div class="col-md-12"><div 
id="footer-logo-wrapper"><img alt="PredictionIO" 
src="/images/logos/logo-white-d1e9c6e6.png"/></div><div 
id="social-icons-wrapper"><a class="github-button" 
href="https://github.com/apache/incubator-predictionio"; data-style="mega" 
data-count-href="/apache/incubator-predictionio/stargazers" d
 ata-count-api="/repos/apache/incubator-predictionio#stargazers_count" 
data-count-aria-label="# stargazers on GitHub" aria-label="Star 
apache/incubator-predictionio on GitHub">Star</a> <a class="github-button" 
href="https://github.com/apache/incubator-predictionio/fork"; 
data-icon="octicon-git-branch" data-style="mega" 
data-count-href="/apache/incubator-predictionio/network" 
data-count-api="/repos/apache/incubator-predictionio#forks_count" 
data-count-aria-label="# forks on GitHub" aria-label="Fork 
apache/incubator-predictionio on GitHub">Fork</a> <script id="github-bjs" 
async="" defer="" src="https://buttons.github.io/buttons.js";></script><a 
href="//www.facebook.com/predictionio" target="blank"><img alt="PredictionIO on 
Twitter" src="/images/icons/twitter-ea9dc152.png"/></a> <a 
href="//twitter.com/predictionio" target="blank"><img alt="PredictionIO on 
Facebook" src="/images/icons/facebook-5c57939c.png"/></a> 
</div></div></div></div></div></footer></div><script>(function(w,d,t,u,n,s,e)
 {w['SwiftypeObject']=n;w[n]=w[n]||function(){
+(w[n].q=w[n].q||[]).push(arguments);};s=d.createElement(t);
+e=d.getElementsByTagName(t)[0];s.async=1;s.src=u;e.parentNode.insertBefore(s,e);
+})(window,document,'script','//s.swiftypecdn.com/install/v1/st.js','_st');
+
+_st('install','HaUfpXXV87xoB_zzCQ45');</script><script 
src="/javascripts/application-280db181.js"></script></body></html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-predictionio-site/blob/0bdbf8fe/resources/intellij/index.html.gz
----------------------------------------------------------------------
diff --git a/resources/intellij/index.html.gz b/resources/intellij/index.html.gz
new file mode 100644
index 0000000..177ea3b
Binary files /dev/null and b/resources/intellij/index.html.gz differ

http://git-wip-us.apache.org/repos/asf/incubator-predictionio-site/blob/0bdbf8fe/resources/upgrade/index.html
----------------------------------------------------------------------
diff --git a/resources/upgrade/index.html b/resources/upgrade/index.html
new file mode 100644
index 0000000..212dda5
--- /dev/null
+++ b/resources/upgrade/index.html
@@ -0,0 +1,278 @@
+<!DOCTYPE html><html><head><title>Upgrade Instructions</title><meta 
charset="utf-8"/><meta content="IE=edge,chrome=1" 
http-equiv="X-UA-Compatible"/><meta name="viewport" 
content="width=device-width, initial-scale=1.0"/><meta class="swiftype" 
name="title" data-type="string" content="Upgrade Instructions"/><link 
rel="canonical" href="https://docs.prediction.io/resources/upgrade/"/><link 
href="/images/favicon/normal-b330020a.png" rel="shortcut icon"/><link 
href="/images/favicon/apple-c0febcf2.png" rel="apple-touch-icon"/><link 
href="//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800"
 rel="stylesheet"/><link 
href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" 
rel="stylesheet"/><link href="/stylesheets/application-a2a2f408.css" 
rel="stylesheet" type="text/css"/><script 
src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.2/html5shiv.min.js"></script><script
 src="//cdn.mathjax.org/mathjax/latest/MathJax
 .js?config=TeX-AMS-MML_HTMLorMML"></script><script 
src="//use.typekit.net/pqo0itb.js"></script><script>try{Typekit.load({ async: 
true });}catch(e){}</script></head><body><div id="global"><header><div 
class="container" id="header-wrapper"><div class="row"><div 
class="col-sm-12"><div id="logo-wrapper"><span id="drawer-toggle"></span><a 
href="#"></a><a href="http://predictionio.incubator.apache.org/";><img 
alt="PredictionIO" id="logo" 
src="/images/logos/logo-ee2b9bb3.png"/></a></div><div id="menu-wrapper"><div 
id="pill-wrapper"><a class="pill left" 
href="/gallery/template-gallery">TEMPLATES</a> <a class="pill right" 
href="//github.com/apache/incubator-predictionio/">OPEN 
SOURCE</a></div></div><img class="mobile-search-bar-toggler hidden-md 
hidden-lg" 
src="/images/icons/search-glass-704bd4ff.png"/></div></div></div></header><div 
id="search-bar-row-wrapper"><div class="container-fluid" 
id="search-bar-row"><div class="row"><div class="col-md-9 col-sm-11 
col-xs-11"><div class="hidden-md hid
 den-lg" id="mobile-page-heading-wrapper"><p>PredictionIO Docs</p><h4>Upgrade 
Instructions</h4></div><h4 class="hidden-sm hidden-xs">PredictionIO 
Docs</h4></div><div class="col-md-3 col-sm-1 col-xs-1 hidden-md hidden-lg"><img 
id="left-menu-indicator" 
src="/images/icons/down-arrow-dfe9f7fe.png"/></div><div class="col-md-3 
col-sm-12 col-xs-12 swiftype-wrapper"><div class="swiftype"><form 
class="search-form"><img class="search-box-toggler hidden-xs hidden-sm" 
src="/images/icons/search-glass-704bd4ff.png"/><div class="search-box"><img 
src="/images/icons/search-glass-704bd4ff.png"/><input type="text" 
id="st-search-input" class="st-search-input" placeholder="Search 
Doc..."/></div><img class="swiftype-row-hider hidden-md hidden-lg" 
src="/images/icons/drawer-toggle-active-fcbef12a.png"/></form></div></div><div 
class="mobile-left-menu-toggler hidden-md 
hidden-lg"></div></div></div></div><div id="page" class="container-fluid"><div 
class="row"><div id="left-menu-wrapper" class="col-md-3"><nav i
 d="nav-main"><ul><li class="level-1"><a class="expandible" 
href="/"><span>Apache PredictionIO (incubating) Documentation</span></a><ul><li 
class="level-2"><a class="final" href="/"><span>Welcome to Apache PredictionIO 
(incubating)</span></a></li></ul></li><li class="level-1"><a class="expandible" 
href="#"><span>Getting Started</span></a><ul><li class="level-2"><a 
class="final" href="/start/"><span>A Quick Intro</span></a></li><li 
class="level-2"><a class="final" href="/install/"><span>Installing Apache 
PredictionIO (incubating)</span></a></li><li class="level-2"><a class="final" 
href="/start/download/"><span>Downloading an Engine Template</span></a></li><li 
class="level-2"><a class="final" href="/start/deploy/"><span>Deploying Your 
First Engine</span></a></li><li class="level-2"><a class="final" 
href="/start/customize/"><span>Customizing the 
Engine</span></a></li></ul></li><li class="level-1"><a class="expandible" 
href="#"><span>Integrating with Your App</span></a><ul><li class="lev
 el-2"><a class="final" href="/appintegration/"><span>App Integration 
Overview</span></a></li><li class="level-2"><a class="expandible" 
href="/sdk/"><span>List of SDKs</span></a><ul><li class="level-3"><a 
class="final" href="/sdk/java/"><span>Java & Android SDK</span></a></li><li 
class="level-3"><a class="final" href="/sdk/php/"><span>PHP 
SDK</span></a></li><li class="level-3"><a class="final" 
href="/sdk/python/"><span>Python SDK</span></a></li><li class="level-3"><a 
class="final" href="/sdk/ruby/"><span>Ruby SDK</span></a></li><li 
class="level-3"><a class="final" href="/sdk/community/"><span>Community Powered 
SDKs</span></a></li></ul></li></ul></li><li class="level-1"><a 
class="expandible" href="#"><span>Deploying an Engine</span></a><ul><li 
class="level-2"><a class="final" href="/deploy/"><span>Deploying as a Web 
Service</span></a></li><li class="level-2"><a class="final" 
href="/cli/#engine-commands"><span>Engine Command-line 
Interface</span></a></li><li class="level-2"><a class="f
 inal" href="/deploy/monitoring/"><span>Monitoring Engine</span></a></li><li 
class="level-2"><a class="final" href="/deploy/engineparams/"><span>Setting 
Engine Parameters</span></a></li><li class="level-2"><a class="final" 
href="/deploy/enginevariants/"><span>Deploying Multiple Engine 
Variants</span></a></li></ul></li><li class="level-1"><a class="expandible" 
href="#"><span>Customizing an Engine</span></a><ul><li class="level-2"><a 
class="final" href="/customize/"><span>Learning DASE</span></a></li><li 
class="level-2"><a class="final" href="/customize/dase/"><span>Implement 
DASE</span></a></li><li class="level-2"><a class="final" 
href="/customize/troubleshooting/"><span>Troubleshooting Engine 
Development</span></a></li><li class="level-2"><a class="final" 
href="/api/current/#package"><span>Engine Scala 
APIs</span></a></li></ul></li><li class="level-1"><a class="expandible" 
href="#"><span>Collecting and Analyzing Data</span></a><ul><li 
class="level-2"><a class="final" href="/datacolle
 ction/"><span>Event Server Overview</span></a></li><li class="level-2"><a 
class="final" href="/cli/#event-server-commands"><span>Event Server 
Command-line Interface</span></a></li><li class="level-2"><a class="final" 
href="/datacollection/eventapi/"><span>Collecting Data with 
REST/SDKs</span></a></li><li class="level-2"><a class="final" 
href="/datacollection/eventmodel/"><span>Events Modeling</span></a></li><li 
class="level-2"><a class="final" 
href="/datacollection/webhooks/"><span>Unifying Multichannel Data with 
Webhooks</span></a></li><li class="level-2"><a class="final" 
href="/datacollection/channel/"><span>Channel</span></a></li><li 
class="level-2"><a class="final" 
href="/datacollection/batchimport/"><span>Importing Data in 
Batch</span></a></li><li class="level-2"><a class="final" 
href="/datacollection/analytics/"><span>Using Analytics 
Tools</span></a></li></ul></li><li class="level-1"><a class="expandible" 
href="#"><span>Choosing an Algorithm(s)</span></a><ul><li class="level-2
 "><a class="final" href="/algorithm/"><span>Built-in Algorithm 
Libraries</span></a></li><li class="level-2"><a class="final" 
href="/algorithm/switch/"><span>Switching to Another 
Algorithm</span></a></li><li class="level-2"><a class="final" 
href="/algorithm/multiple/"><span>Combining Multiple 
Algorithms</span></a></li><li class="level-2"><a class="final" 
href="/algorithm/custom/"><span>Adding Your Own 
Algorithms</span></a></li></ul></li><li class="level-1"><a class="expandible" 
href="#"><span>ML Tuning and Evaluation</span></a><ul><li class="level-2"><a 
class="final" href="/evaluation/"><span>Overview</span></a></li><li 
class="level-2"><a class="final" 
href="/evaluation/paramtuning/"><span>Hyperparameter Tuning</span></a></li><li 
class="level-2"><a class="final" 
href="/evaluation/evaluationdashboard/"><span>Evaluation 
Dashboard</span></a></li><li class="level-2"><a class="final" 
href="/evaluation/metricchoose/"><span>Choosing Evaluation 
Metrics</span></a></li><li class="level-2"><a c
 lass="final" href="/evaluation/metricbuild/"><span>Building Evaluation 
Metrics</span></a></li></ul></li><li class="level-1"><a class="expandible" 
href="#"><span>System Architecture</span></a><ul><li class="level-2"><a 
class="final" href="/system/"><span>Architecture Overview</span></a></li><li 
class="level-2"><a class="final" href="/system/anotherdatastore/"><span>Using 
Another Data Store</span></a></li></ul></li><li class="level-1"><a 
class="expandible" href="#"><span>Engine Template Gallery</span></a><ul><li 
class="level-2"><a class="final" 
href="/gallery/template-gallery/"><span>Browse</span></a></li><li 
class="level-2"><a class="final" 
href="/community/submit-template/"><span>Submit your Engine as a 
Template</span></a></li></ul></li><li class="level-1"><a class="expandible" 
href="#"><span>Demo Tutorials</span></a><ul><li class="level-2"><a 
class="final" href="/demo/tapster/"><span>Comics Recommendation 
Demo</span></a></li><li class="level-2"><a class="final" href="/demo/communit
 y/"><span>Community Contributed Demo</span></a></li><li class="level-2"><a 
class="final" href="/demo/textclassification/"><span>Text Classification Engine 
Tutorial</span></a></li></ul></li><li class="level-1"><a class="expandible" 
href="/community/"><span>Getting Involved</span></a><ul><li class="level-2"><a 
class="final" href="/community/contribute-code/"><span>Contribute 
Code</span></a></li><li class="level-2"><a class="final" 
href="/community/contribute-documentation/"><span>Contribute 
Documentation</span></a></li><li class="level-2"><a class="final" 
href="/community/contribute-sdk/"><span>Contribute a SDK</span></a></li><li 
class="level-2"><a class="final" 
href="/community/contribute-webhook/"><span>Contribute a 
Webhook</span></a></li><li class="level-2"><a class="final" 
href="/community/projects/"><span>Community 
Projects</span></a></li></ul></li><li class="level-1"><a class="expandible" 
href="#"><span>Getting Help</span></a><ul><li class="level-2"><a class="final" 
href="/resou
 rces/faq/"><span>FAQs</span></a></li><li class="level-2"><a class="final" 
href="/support/"><span>Support</span></a></li></ul></li><li class="level-1"><a 
class="expandible" href="#"><span>Resources</span></a><ul><li 
class="level-2"><a class="final" href="/resources/intellij/"><span>Developing 
Engines with IntelliJ IDEA</span></a></li><li class="level-2"><a class="final 
active" href="/resources/upgrade/"><span>Upgrade 
Instructions</span></a></li><li class="level-2"><a class="final" 
href="/resources/glossary/"><span>Glossary</span></a></li></ul></li></ul></nav></div><div
 class="col-md-9 col-sm-12"><div class="content-header hidden-md 
hidden-lg"><div id="breadcrumbs" class="hidden-sm hidden xs"><ul><li><a 
href="#">Resources</a><span class="spacer">&gt;</span></li><li><span 
class="last">Upgrade Instructions</span></li></ul></div><div 
id="page-title"><h1>Upgrade Instructions</h1></div></div><div 
id="table-of-content-wrapper"><h5>On this page</h5><aside 
id="table-of-contents"><ul> <li> <a 
 href="#how-to-upgrade">How to upgrade</a> </li> <li> <a 
href="#additional-notes-for-specific-versions-upgrade">Additional Notes for 
Specific Versions Upgrade</a> <ul> <li> <a href="#upgrade-to-0-9-2">Upgrade to 
0.9.2</a> </li> <li> <a href="#upgrade-to-0-9-0">Upgrade to 0.9.0</a> </li> 
<li> <a href="#upgrade-to-0-8-4">Upgrade to 0.8.4</a> </li> <li> <a 
href="#upgrade-from-0-8-2-to-0-8-3">Upgrade from 0.8.2 to 0.8.3</a> </li> <li> 
<a href="#schema-changes-in-0-8-2">Schema Changes in 0.8.2</a> </li> <li> <a 
href="#experimental-upgrade-tool-upgrade-hbase-schema-from-0-8-0-0-8-1-to-0-8-2">Experimental
 upgrade tool (Upgrade HBase schema from 0.8.0/0.8.1 to 0.8.2)</a> </li> </ul> 
</li> </ul> </aside><hr/><a id="edit-page-link" 
href="https://github.com/apache/incubator-predictionio/tree/livedoc/docs/manual/source/resources/upgrade.html.md";><img
 src="/images/icons/edit-pencil-d6c1bb3d.png"/>Edit this page</a></div><div 
class="content-header hidden-sm hidden-xs"><div id="breadcrumbs" class="
 hidden-sm hidden xs"><ul><li><a href="#">Resources</a><span 
class="spacer">&gt;</span></li><li><span class="last">Upgrade 
Instructions</span></li></ul></div><div id="page-title"><h1>Upgrade 
Instructions</h1></div></div><div class="content"><p>This page highlights major 
changes in each version and upgrade tools.</p><h1 id='how-to-upgrade' 
class='header-anchors'>How to upgrade</h1><p>To upgrade and use new version of 
PredictionIO, do the following:</p> <ul> <li>Download and unzip the new 
PredictionIO binary (the download path can be found in the <a 
href="/install/install-linux/#method-2:-manual-install">Download PredictionIO 
section</a>)</li> <li>Retain the setting from current 
PredictionIO/conf/pio-env.sh to the new PredictionIO/conf/pio-env.sh.</li> 
<li>If you have added PredictionIO/bin to your <code>PATH</code> environment 
variable before, change it to the new PredictionIO/bin as well.</li> </ul> <h1 
id='additional-notes-for-specific-versions-upgrade' 
class='header-anchors'>Additi
 onal Notes for Specific Versions Upgrade</h1><p>In addition, please take notes 
of the following for specific version upgrade.</p><h2 id='upgrade-to-0.9.2' 
class='header-anchors'>Upgrade to 0.9.2</h2><p>The Spark dependency has been 
upgraded to version 1.3.0. All engines must be rebuilt against it in order to 
work.</p><p>Open and edit <code>build.sbt</code> of your engine, and look for 
these two lines:</p><div class="highlight scala"><table style="border-spacing: 
0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre 
class="lineno">1
+2
+3</pre></td><td class="code"><pre><span class="s">"org.apache.spark"</span> 
<span class="o">%%</span> <span class="s">"spark-core"</span>    <span 
class="o">%</span> <span class="s">"1.2.0"</span> <span class="o">%</span> 
<span class="s">"provided"</span>
+
+<span class="s">"org.apache.spark"</span> <span class="o">%%</span> <span 
class="s">"spark-mllib"</span>   <span class="o">%</span> <span 
class="s">"1.2.0"</span> <span class="o">%</span> <span 
class="s">"provided"</span>
+</pre></td></tr></tbody></table> </div> <p>Change <code>1.2.0</code> to 
<code>1.3.0</code>, and do a clean rebuild by <code>pio build --clean</code>. 
Your engine should now work with the latest Apache Spark.</p><h3 
id='new-peventstore-and-leventstore-api' class='header-anchors'>New PEventStore 
and LEventStore API</h3><p>In addition, new PEventStore and LEventStore API are 
introduced so that appName can be used as parameters in engine.json to access 
Event Store.</p><div class="alert-message note"><p>The following changes are 
not required for using 0.9.2 but it&#39;s recommended to upgrade your engine 
code as described below because the old API will be deprecated.</p></div><h4 
id='1.-in-<strong>datasource.scala</strong>:' class='header-anchors' >1. In 
<strong>DataSource.scala</strong>:</h4> <ul> <li><p>remove this line of 
code:</p><div class="highlight scala"><table style="border-spacing: 
0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre 
class="lineno">1</pre></td><td
  class="code"><pre><span class="k">import</span> <span 
class="nn">org.apache.predictionio.data.storage.Storage</span>
+</pre></td></tr></tbody></table> </div> <p>and replace it by</p><div 
class="highlight scala"><table style="border-spacing: 0"><tbody><tr><td 
class="gutter gl" style="text-align: right"><pre class="lineno">1</pre></td><td 
class="code"><pre><span class="k">import</span> <span 
class="nn">org.apache.predictionio.data.store.PEventStore</span>
+</pre></td></tr></tbody></table> </div></li> <li><p>Change <code>appId: 
Int</code> to <code>appName: String</code> in DataSourceParams</p><p>For 
example,</p><div class="highlight scala"><table style="border-spacing: 
0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre 
class="lineno">1</pre></td><td class="code"><pre><span class="k">case</span> 
<span class="k">class</span> <span class="nc">DataSourceParams</span><span 
class="o">(</span><span class="n">appName</span><span class="k">:</span> <span 
class="kt">String</span><span class="o">)</span> <span class="k">extends</span> 
<span class="nc">Params</span>
+</pre></td></tr></tbody></table> </div></li> <li><p>remove this line of code: 
<code>val eventsDb = Storage.getPEvents()</code></p></li> <li><p>locate where 
<code>eventsDb.aggregateProperties()</code> is used, change it to 
<code>PEventStore.aggregateProperties()</code>:</p><p>For example,</p><div 
class="highlight scala"><table style="border-spacing: 0"><tbody><tr><td 
class="gutter gl" style="text-align: right"><pre class="lineno">1
+2
+3
+4
+5
+6</pre></td><td class="code"><pre>
+  <span class="k">val</span> <span class="n">usersRDD</span><span 
class="k">:</span> <span class="kt">RDD</span><span class="o">[(</span><span 
class="kt">String</span>, <span class="kt">User</span><span class="o">)]</span> 
<span class="k">=</span> <span class="nc">PEventStore</span><span 
class="o">.</span><span class="n">aggregateProperties</span><span 
class="o">(</span> <span class="c1">// CHANGED
+</span>    <span class="n">appName</span> <span class="k">=</span> <span 
class="n">dsp</span><span class="o">.</span><span class="n">appName</span><span 
class="o">,</span> <span class="c1">// CHANGED: use appName
+</span>    <span class="n">entityType</span> <span class="k">=</span> <span 
class="s">"user"</span>
+  <span class="o">)(</span><span class="n">sc</span><span 
class="o">).</span><span class="n">map</span> <span class="o">{</span> <span 
class="o">...</span> <span class="o">}</span>
+
+</pre></td></tr></tbody></table> </div></li> <li><p>locate where 
<code>eventsDb.find()</code>is used, change it to 
<code>PEventStore.find()</code></p><p>For example,</p><div class="highlight 
scala"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" 
style="text-align: right"><pre class="lineno">1
+2
+3
+4
+5
+6</pre></td><td class="code"><pre>
+  <span class="k">val</span> <span class="n">viewEventsRDD</span><span 
class="k">:</span> <span class="kt">RDD</span><span class="o">[</span><span 
class="kt">ViewEvent</span><span class="o">]</span> <span class="k">=</span> 
<span class="nc">PEventStore</span><span class="o">.</span><span 
class="n">find</span><span class="o">(</span> <span class="c1">// CHANGED
+</span>    <span class="n">appName</span> <span class="k">=</span> <span 
class="n">dsp</span><span class="o">.</span><span class="n">appName</span><span 
class="o">,</span> <span class="c1">// CHANGED: use appName
+</span>    <span class="n">entityType</span> <span class="k">=</span> <span 
class="nc">Some</span><span class="o">(</span><span 
class="s">"user"</span><span class="o">),</span>
+    <span class="o">...</span>
+
+</pre></td></tr></tbody></table> </div></li> </ul> <h4 
id='2.-in-<strong>xxxalgorithm.scala</strong>:' class='header-anchors' >2. In 
<strong>XXXAlgorithm.scala</strong>:</h4><p>If Storage.getLEvents() is also 
used in Algorithm (such as ALSAlgorithm of E-Commerce Recommendation template), 
you also need to do following:</p><div class="alert-message note"><p>If 
<code>org.apache.predictionio.data.storage.Storage</code> is not used at all 
(such as Recommendation, Similar Product, Classification, Lead Scoring, Product 
Ranking template), there is no need to change Algorithm and can go to the later 
<strong>engine.json</strong> section.</p></div> <ul> <li>remove <code>import 
org.apache.predictionio.data.storage.Storage</code> and replace it by 
<code>import org.apache.predictionio.data.store.LEventStore</code></li> 
<li>change <code>appId</code> to <code>appName</code> in the XXXAlgorithmParams 
class.</li> <li>remove this line of code: <code>@transient lazy val lEventsDb = 
Storage.getLEvents()
 </code></li> <li><p>locate where <code>LEventStore.findByEntity()</code> is 
used, change it to <code>LEventStore.findByEntity()</code>:</p><p>For example, 
change following code</p><div class="highlight scala"><table 
style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: 
right"><pre class="lineno">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16</pre></td><td class="code"><pre>  <span class="o">...</span>
+  <span class="k">val</span> <span class="n">seenEvents</span><span 
class="k">:</span> <span class="kt">Iterator</span><span 
class="o">[</span><span class="kt">Event</span><span class="o">]</span> <span 
class="k">=</span> <span class="n">lEventsDb</span><span 
class="o">.</span><span class="n">findSingleEntity</span><span 
class="o">(</span>
+    <span class="n">appId</span> <span class="k">=</span> <span 
class="n">ap</span><span class="o">.</span><span class="n">appId</span><span 
class="o">,</span>
+    <span class="n">entityType</span> <span class="k">=</span> <span 
class="s">"user"</span><span class="o">,</span>
+    <span class="n">entityId</span> <span class="k">=</span> <span 
class="n">query</span><span class="o">.</span><span class="n">user</span><span 
class="o">,</span>
+    <span class="n">eventNames</span> <span class="k">=</span> <span 
class="nc">Some</span><span class="o">(</span><span class="n">ap</span><span 
class="o">.</span><span class="n">seenEvents</span><span class="o">),</span>
+    <span class="n">targetEntityType</span> <span class="k">=</span> <span 
class="nc">Some</span><span class="o">(</span><span class="nc">Some</span><span 
class="o">(</span><span class="s">"item"</span><span class="o">)),</span>
+    <span class="c1">// set time limit to avoid super long DB access
+</span>    <span class="n">timeout</span> <span class="k">=</span> <span 
class="nc">Duration</span><span class="o">(</span><span 
class="mi">200</span><span class="o">,</span> <span 
class="s">"millis"</span><span class="o">)</span>
+  <span class="o">)</span> <span class="k">match</span> <span 
class="o">{</span>
+    <span class="k">case</span> <span class="nc">Right</span><span 
class="o">(</span><span class="n">x</span><span class="o">)</span> <span 
class="k">=&gt;</span> <span class="n">x</span>
+    <span class="k">case</span> <span class="nc">Left</span><span 
class="o">(</span><span class="n">e</span><span class="o">)</span> <span 
class="k">=&gt;</span> <span class="o">{</span>
+      <span class="n">logger</span><span class="o">.</span><span 
class="n">error</span><span class="o">(</span><span class="n">s</span><span 
class="s">"Error when read seen events: ${e}"</span><span class="o">)</span>
+      <span class="nc">Iterator</span><span class="o">[</span><span 
class="kt">Event</span><span class="o">]()</span>
+    <span class="o">}</span>
+  <span class="o">}</span>
+</pre></td></tr></tbody></table> </div> <p>to</p><div class="highlight 
scala"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" 
style="text-align: right"><pre class="lineno">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19</pre></td><td class="code"><pre>  <span class="k">val</span> <span 
class="n">seenEvents</span><span class="k">:</span> <span 
class="kt">Iterator</span><span class="o">[</span><span 
class="kt">Event</span><span class="o">]</span> <span class="k">=</span> <span 
class="k">try</span> <span class="o">{</span> <span class="c1">// CHANGED: try 
catch block is used
+</span>    <span class="nc">LEventStore</span><span class="o">.</span><span 
class="n">findByEntity</span><span class="o">(</span> <span class="c1">// 
CHANGED: new API
+</span>      <span class="n">appName</span> <span class="k">=</span> <span 
class="n">ap</span><span class="o">.</span><span class="n">appName</span><span 
class="o">,</span> <span class="c1">// CHANGED: use appName
+</span>      <span class="n">entityType</span> <span class="k">=</span> <span 
class="s">"user"</span><span class="o">,</span>
+      <span class="n">entityId</span> <span class="k">=</span> <span 
class="n">query</span><span class="o">.</span><span class="n">user</span><span 
class="o">,</span>
+      <span class="n">eventNames</span> <span class="k">=</span> <span 
class="nc">Some</span><span class="o">(</span><span class="n">ap</span><span 
class="o">.</span><span class="n">seenEvents</span><span class="o">),</span>
+      <span class="n">targetEntityType</span> <span class="k">=</span> <span 
class="nc">Some</span><span class="o">(</span><span class="nc">Some</span><span 
class="o">(</span><span class="s">"item"</span><span class="o">)),</span>
+      <span class="c1">// set time limit to avoid super long DB access
+</span>      <span class="n">timeout</span> <span class="k">=</span> <span 
class="nc">Duration</span><span class="o">(</span><span 
class="mi">200</span><span class="o">,</span> <span 
class="s">"millis"</span><span class="o">)</span>
+    <span class="o">)</span>
+  <span class="o">}</span> <span class="k">catch</span> <span 
class="o">{</span> <span class="c1">// CHANGED: try catch block is used
+</span>    <span class="k">case</span> <span class="n">e</span><span 
class="k">:</span> <span class="kt">scala.concurrent.TimeoutException</span> 
<span class="o">=&gt;</span>
+      <span class="n">logger</span><span class="o">.</span><span 
class="n">error</span><span class="o">(</span><span class="n">s</span><span 
class="s">"Timeout when read seen events."</span> <span class="o">+</span>
+        <span class="n">s</span><span class="s">" Empty list is used. 
${e}"</span><span class="o">)</span>
+      <span class="nc">Iterator</span><span class="o">[</span><span 
class="kt">Event</span><span class="o">]()</span>
+    <span class="k">case</span> <span class="n">e</span><span 
class="k">:</span> <span class="kt">Exception</span> <span 
class="o">=&gt;</span>
+      <span class="n">logger</span><span class="o">.</span><span 
class="n">error</span><span class="o">(</span><span class="n">s</span><span 
class="s">"Error when read seen events: ${e}"</span><span class="o">)</span>
+      <span class="k">throw</span> <span class="n">e</span>
+  <span class="o">}</span>
+</pre></td></tr></tbody></table> </div> <p>If you are using E-Commerce 
Recommendation template, please refer to the latest version for other updates 
related to <code>LEventStore.findByEntity()</code></p></li> </ul> <h4 
id='3.-in-<strong>engine.json</strong>:' class='header-anchors' >3. In 
<strong>engine.json</strong>:</h4><p>locate where <code>appId</code> is used, 
change it to <code>appName</code> and specify the name of the app 
instead.</p><p>For example:</p><div class="highlight json"><table 
style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: 
right"><pre class="lineno">1
+2
+3
+4
+5
+6
+7
+8</pre></td><td class="code"><pre><span class="w">  </span><span 
class="err">...</span><span class="w">
+
+  </span><span class="s2">"datasource"</span><span class="err">:</span><span 
class="w"> </span><span class="p">{</span><span class="w">
+    </span><span class="s2">"params"</span><span class="w"> </span><span 
class="p">:</span><span class="w"> </span><span class="p">{</span><span 
class="w">
+      </span><span class="s2">"appName"</span><span class="p">:</span><span 
class="w"> </span><span class="s2">"MyAppName"</span><span class="w">
+    </span><span class="p">}</span><span class="w">
+  </span><span class="p">}</span><span class="err">,</span><span class="w">
+
+</span></pre></td></tr></tbody></table> </div> <p>Note that other components 
such as <code>algorithms</code> may also have <code>appId</code> param (e.g. 
E-Commerce Recommendation template). Remember to change it to 
<code>appName</code> as well.</p><p>That&#39;s it! You can re-biuld your engine 
to try it out!</p><h2 id='upgrade-to-0.9.0' class='header-anchors'>Upgrade to 
0.9.0</h2><p>0.9.0 has the following new changes:</p> <ul> <li><p>The signature 
of <code>P2LAlgorithm</code> and <code>PAlgorithm</code>&#39;s 
<code>train()</code> method is changed from</p><div class="highlight 
scala"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" 
style="text-align: right"><pre class="lineno">1</pre></td><td 
class="code"><pre>  <span class="k">def</span> <span 
class="n">train</span><span class="o">(</span><span class="n">pd</span><span 
class="k">:</span> <span class="kt">PD</span><span class="o">)</span><span 
class="k">:</span> <span class="kt">M</span>
+</pre></td></tr></tbody></table> </div> <p>to</p><div class="highlight 
scala"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" 
style="text-align: right"><pre class="lineno">1</pre></td><td 
class="code"><pre>  <span class="k">def</span> <span 
class="n">train</span><span class="o">(</span><span class="n">sc</span><span 
class="k">:</span> <span class="kt">SparkContext</span><span class="o">,</span> 
<span class="n">pd</span><span class="k">:</span> <span 
class="kt">PD</span><span class="o">)</span><span class="k">:</span> <span 
class="kt">M</span>
+</pre></td></tr></tbody></table> </div> <p>which allows you to access 
SparkContext inside <code>train()</code> with this new parameter 
<code>sc</code>.</p></li> <li><p>A new SBT build plugin 
(<code>pio-build</code>) is added for engine template</p></li> </ul> <div 
class="alert-message warning"><p>If you have existing engine templates running 
with previous version of PredictionIO, you need to either download the latest 
templates which are compatible with 0.9.0, or follow the instructions below to 
modify them.</p></div><p>Follow instructions below to modify existing engine 
templates to be compatible with PredictionIO 0.9.0:</p> <ol> <li><p>Add a new 
parameter <code>sc: SparkContext</code> in the signature of 
<code>train()</code> method of algorithm in the templates.</p><p>For example, 
in Recommendation engine template, you will find the following 
<code>train()</code> function in <code>ALSAlgorithm.scala</code></p><div 
class="highlight scala"><table style="border-spacing: 0"><tbody><tr
 ><td class="gutter gl" style="text-align: right"><pre class="lineno">1
+2
+3
+4
+5
+6
+7
+8
+9</pre></td><td class="code"><pre><span class="k">class</span> <span 
class="nc">ALSAlgorithm</span><span class="o">(</span><span 
class="k">val</span> <span class="n">ap</span><span class="k">:</span> <span 
class="kt">ALSAlgorithmParams</span><span class="o">)</span>
+  <span class="k">extends</span> <span class="n">P2LAlgorithm</span><span 
class="o">[</span><span class="kt">PreparedData</span>, <span 
class="kt">ALSModel</span>, <span class="kt">Query</span>, <span 
class="kt">PredictedResult</span><span class="o">]</span> <span 
class="o">{</span>
+
+  <span class="o">...</span>
+
+  <span class="k">def</span> <span class="n">train</span><span 
class="o">(</span><span class="n">data</span><span class="k">:</span> <span 
class="kt">PreparedData</span><span class="o">)</span><span class="k">:</span> 
<span class="kt">ALSModel</span> <span class="o">=</span> <span 
class="o">...</span>
+
+  <span class="o">...</span>
+<span class="o">}</span>
+</pre></td></tr></tbody></table> </div> <p>Simply add the new parameter 
<code>sc: SparkContext,</code> to <code>train()</code> function 
signature:</p><div class="highlight scala"><table style="border-spacing: 
0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre 
class="lineno">1
+2
+3
+4
+5
+6
+7
+8
+9</pre></td><td class="code"><pre><span class="k">class</span> <span 
class="nc">ALSAlgorithm</span><span class="o">(</span><span 
class="k">val</span> <span class="n">ap</span><span class="k">:</span> <span 
class="kt">ALSAlgorithmParams</span><span class="o">)</span>
+  <span class="k">extends</span> <span class="n">P2LAlgorithm</span><span 
class="o">[</span><span class="kt">PreparedData</span>, <span 
class="kt">ALSModel</span>, <span class="kt">Query</span>, <span 
class="kt">PredictedResult</span><span class="o">]</span> <span 
class="o">{</span>
+
+  <span class="o">...</span>
+
+  <span class="k">def</span> <span class="n">train</span><span 
class="o">(</span><span class="n">sc</span><span class="k">:</span> <span 
class="kt">SparkContext</span><span class="o">,</span> <span 
class="n">data</span><span class="k">:</span> <span 
class="kt">PreparedData</span><span class="o">)</span><span class="k">:</span> 
<span class="kt">ALSModel</span> <span class="o">=</span> <span 
class="o">...</span>
+
+  <span class="o">...</span>
+<span class="o">}</span>
+</pre></td></tr></tbody></table> </div> <p>You need to add the following 
import for your algorithm as well if it is not there:</p><div class="highlight 
scala"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" 
style="text-align: right"><pre class="lineno">1</pre></td><td 
class="code"><pre><span class="k">import</span> <span 
class="nn">org.apache.spark.SparkContext</span>
+</pre></td></tr></tbody></table> </div></li> <li><p>Modify the file 
<code>build.sbt</code> in your template directory to use 
<code>pioVersion.value</code> as the version of org.apache.predictionio.core 
dependency:</p><p>Under your template&#39;s root directory, you should see a 
file <code>build.sbt</code> which has the following content:</p><div 
class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td 
class="gutter gl" style="text-align: right"><pre class="lineno">1
+2
+3
+4</pre></td><td class="code"><pre>libraryDependencies ++<span 
class="o">=</span> Seq<span class="o">(</span>
+  <span class="s2">"org.apache.predictionio"</span>    %% <span 
class="s2">"core"</span>          % <span class="s2">"0.8.6"</span> % <span 
class="s2">"provided"</span>,
+  <span class="s2">"org.apache.spark"</span> %% <span 
class="s2">"spark-core"</span>    % <span class="s2">"1.2.0"</span> % <span 
class="s2">"provided"</span>,
+  <span class="s2">"org.apache.spark"</span> %% <span 
class="s2">"spark-mllib"</span>   % <span class="s2">"1.2.0"</span> % <span 
class="s2">"provided"</span><span class="o">)</span>
+</pre></td></tr></tbody></table> </div> <p>Change the version of 
<code>&quot;org.apache.predictionio&quot; &amp;&amp; &quot;core&quot;</code> to 
<code>pioVersion.value</code>:</p><div class="highlight shell"><table 
style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: 
right"><pre class="lineno">1
+2
+3
+4</pre></td><td class="code"><pre>libraryDependencies ++<span 
class="o">=</span> Seq<span class="o">(</span>
+  <span class="s2">"org.apache.predictionio"</span>    %% <span 
class="s2">"core"</span>          % pioVersion.value % <span 
class="s2">"provided"</span>,
+  <span class="s2">"org.apache.spark"</span> %% <span 
class="s2">"spark-core"</span>    % <span class="s2">"1.2.0"</span> % <span 
class="s2">"provided"</span>,
+  <span class="s2">"org.apache.spark"</span> %% <span 
class="s2">"spark-mllib"</span>   % <span class="s2">"1.2.0"</span> % <span 
class="s2">"provided"</span><span class="o">)</span>
+</pre></td></tr></tbody></table> </div></li> <li><p>Create a new file 
<code>pio-build.sbt</code> in template&#39;s <strong>project/</strong> 
directory with the following content:</p><div class="highlight shell"><table 
style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: 
right"><pre class="lineno">1</pre></td><td class="code"><pre>addSbtPlugin<span 
class="o">(</span><span class="s2">"org.apache.predictionio"</span> % <span 
class="s2">"pio-build"</span> % <span class="s2">"0.9.0"</span><span 
class="o">)</span>
+</pre></td></tr></tbody></table> </div> <p>Then, you should see the following 
two files in the <strong>project/</strong> directory:</p><div class="highlight 
shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" 
style="text-align: right"><pre class="lineno">1
+2</pre></td><td class="code"><pre><span class="gp">your_template_directory$ 
</span>ls project/
+assembly.sbt  pio-build.sbt
+</pre></td></tr></tbody></table> </div></li> <li><p>Create a new file 
<code>template.json</code> file in the engine template&#39;s root directory 
with the following content:</p><div class="highlight shell"><table 
style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: 
right"><pre class="lineno">1</pre></td><td class="code"><pre><span 
class="o">{</span><span class="s2">"pio"</span>: <span class="o">{</span><span 
class="s2">"version"</span>: <span class="o">{</span> <span 
class="s2">"min"</span>: <span class="s2">"0.9.0"</span> <span 
class="o">}}}</span>
+</pre></td></tr></tbody></table> </div> <p>This is to specify the minium 
PredictionIO version which the engine can run with.</p></li> <li><p>Lastly, you 
can add <code>/pio.sbt</code> into your engine template&#39;s 
<code>.gitignore</code>. <code>pio.sbt</code> is automatically generated by 
<code>pio build</code>.</p></li> </ol> <p>That&#39;s it! Now you can run 
<code>pio build</code>, <code>pio train</code> and <code>pio deploy</code> with 
PredictionIO 0.9.0 in the same way as before!</p><h2 id='upgrade-to-0.8.4' 
class='header-anchors'>Upgrade to 0.8.4</h2><p><strong>engine.json</strong> has 
slightly changed its format in 0.8.4 in order to make engine more flexible. If 
you are upgrading to 0.8.4, engine.json needs to have the <code>params</code> 
field for <em>datasource</em>, <em>preparator</em>, and <em>serving</em>. Here 
is the sample engine.json from 
templates/scala-parallel-recommendation-custom-preparator that demonstrate the 
change for <em>datasource</em> (line 7).</p><div cla
 ss="highlight shell"><table style="border-spacing: 0"><tbody><tr><td 
class="gutter gl" style="text-align: right"><pre class="lineno">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19</pre></td><td class="code"><pre>In 0.8.3
+<span class="o">{</span>
+  <span class="s2">"id"</span>: <span class="s2">"default"</span>,
+  <span class="s2">"description"</span>: <span class="s2">"Default 
settings"</span>,
+  <span class="s2">"engineFactory"</span>: <span 
class="s2">"org.template.recommendation.RecommendationEngine"</span>,
+  <span class="s2">"datasource"</span>: <span class="o">{</span>
+    <span class="s2">"appId"</span>: 1
+  <span class="o">}</span>,
+  <span class="s2">"algorithms"</span>: <span class="o">[</span>
+    <span class="o">{</span>
+      <span class="s2">"name"</span>: <span class="s2">"als"</span>,
+      <span class="s2">"params"</span>: <span class="o">{</span>
+        <span class="s2">"rank"</span>: 10,
+        <span class="s2">"numIterations"</span>: 20,
+        <span class="s2">"lambda"</span>: 0.01
+      <span class="o">}</span>
+    <span class="o">}</span>
+  <span class="o">]</span>
+<span class="o">}</span>
+</pre></td></tr></tbody></table> </div> <div class="highlight shell"><table 
style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: 
right"><pre class="lineno">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20</pre></td><td class="code"><pre>In 0.8.4
+<span class="o">{</span>
+  <span class="s2">"id"</span>: <span class="s2">"default"</span>,
+  <span class="s2">"description"</span>: <span class="s2">"Default 
settings"</span>,
+  <span class="s2">"engineFactory"</span>: <span 
class="s2">"org.template.recommendation.RecommendationEngine"</span>,
+  <span class="s2">"datasource"</span>: <span class="o">{</span>
+    <span class="s2">"params"</span> : <span class="o">{</span>
+      <span class="s2">"appId"</span>: 1
+    <span class="o">}</span>
+  <span class="o">}</span>,
+  <span class="s2">"algorithms"</span>: <span class="o">[</span>
+    <span class="o">{</span>
+      <span class="s2">"name"</span>: <span class="s2">"als"</span>,
+      <span class="s2">"params"</span>: <span class="o">{</span>
+        <span class="s2">"rank"</span>: 10,
+        <span class="s2">"numIterations"</span>: 20,
+        <span class="s2">"lambda"</span>: 0.01
+      <span class="o">}</span>
+    <span class="o">}</span>
+  <span class="o">]</span>
+</pre></td></tr></tbody></table> </div> <h2 id='upgrade-from-0.8.2-to-0.8.3' 
class='header-anchors'>Upgrade from 0.8.2 to 0.8.3</h2><p>0.8.3 disallows 
entity types <strong>pio_user</strong> and <strong>pio_item</strong>. These 
types are used by default for most SDKs. They are deprecated in 0.8.3, and SDKs 
helper functions have been updated to use <strong>user</strong> and 
<strong>item</strong> instead.</p><p>If you are upgrading to 0.8.3, you can 
follow these steps to migrate your data.</p><h5 id='1.-create-a-new-app' 
class='header-anchors'>1. Create a new app</h5><div class="highlight 
shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" 
style="text-align: right"><pre class="lineno">1</pre></td><td 
class="code"><pre><span class="gp">$ </span>pio app new &lt;my app name&gt;
+</pre></td></tr></tbody></table> </div> <p>Please take note of the <new app 
id> generated for the new app.</p><h5 id='2.-run-the-upgrade-command' 
class='header-anchors'>2. Run the upgrade command</h5><div class="highlight 
shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" 
style="text-align: right"><pre class="lineno">1</pre></td><td 
class="code"><pre><span class="gp">$ </span>pio upgrade 0.8.2 0.8.3 &lt;old app 
id&gt; &lt;new app id&gt;
+</pre></td></tr></tbody></table> </div> <p>It will run a script that creates a 
new app with the new app id and migreate the data to the new app.</p><h5 
id='3.-update-<strong>engine.json</strong>-to-use-the-new-app-id.-<strong>engine.json</strong>-is-located-under-your-engine-project-directory.'
 class='header-anchors' >3. Update <strong>engine.json</strong> to use the new 
app id. <strong>Engine.json</strong> is located under your engine project 
directory.</h5><div class="highlight shell"><table style="border-spacing: 
0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre 
class="lineno">1
+2
+3</pre></td><td class="code"><pre>  <span class="s2">"datasource"</span>: 
<span class="o">{</span>
+    <span class="s2">"appId"</span>: &lt;new app id&gt;
+  <span class="o">}</span>,
+</pre></td></tr></tbody></table> </div> <h2 id='schema-changes-in-0.8.2' 
class='header-anchors'>Schema Changes in 0.8.2</h2><p>0.8.2 contains HBase and 
Elasticsearch schema changes from previous versions. If you are upgrading from 
a pre-0.8.2 version, you need to first clear HBase and ElasticSearch. These 
will clear out all data in Elasticsearch and HBase. Please be extra 
cautious.</p><div class="alert-message danger"><p><strong>ALL EXISTING DATA 
WILL BE LOST!</strong></p></div><h3 id='clearing-elasticsearch' 
class='header-anchors'>Clearing Elasticsearch</h3><p>With Elasticsearch 
running, do</p><div class="highlight shell"><table style="border-spacing: 
0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre 
class="lineno">1</pre></td><td class="code"><pre><span class="gp">$ </span>curl 
-X DELETE http://localhost:9200/_all
+</pre></td></tr></tbody></table> </div> <p>For details see <a 
href="http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-delete-index.html";>http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-delete-index.html</a>.</p><h3
 id='clearing-hbase' class='header-anchors'>Clearing HBase</h3><div 
class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td 
class="gutter gl" style="text-align: right"><pre class="lineno">1
+2
+3
+4
+5
+6</pre></td><td class="code"><pre><span class="gp">$ </span><span 
class="nv">$HBASE_HOME</span>/bin/hbase shell
+...
+<span class="gp">&gt; </span>disable_all <span 
class="s1">'predictionio.*'</span>
+...
+<span class="gp">&gt; </span>drop_all <span class="s1">'predictionio.*'</span>
+...
+</pre></td></tr></tbody></table> </div> <p>For details see <a 
href="http://wiki.apache.org/hadoop/Hbase/Shell";>http://wiki.apache.org/hadoop/Hbase/Shell</a>.</p><h2
 
id='experimental-upgrade-tool-(upgrade-hbase-schema-from-0.8.0/0.8.1-to-0.8.2)' 
class='header-anchors'>Experimental upgrade tool (Upgrade HBase schema from 
0.8.0/0.8.1 to 0.8.2)</h2><p>Create an app to store the data</p><div 
class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td 
class="gutter gl" style="text-align: right"><pre class="lineno">1</pre></td><td 
class="code"><pre><span class="gp">$ </span>bin/pio app new &lt;my app&gt;
+</pre></td></tr></tbody></table> </div> <p>Replace by the returned app ID: ( 
is the original app ID used in 0.8.0/0.8.2.)</p><div class="highlight 
shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" 
style="text-align: right"><pre class="lineno">1
+2
+3
+4</pre></td><td class="code"><pre><span class="gp">$ </span><span 
class="nb">set</span> -a
+<span class="gp">$ </span><span class="nb">source </span>conf/pio-env.sh
+<span class="gp">$ </span><span class="nb">set</span> +a
+<span class="gp">$ </span>sbt/sbt <span class="s2">"data/run-main 
org.apache.predictionio.data.storage.hbase.upgrade.Upgrade &lt;from app 
ID&gt;"</span> <span class="s2">"&lt;to app ID&gt;"</span>
+</pre></td></tr></tbody></table> </div> </div></div></div></div><footer><div 
class="container"><div class="seperator"></div><div class="row"><div 
class="col-md-6 col-xs-6 footer-link-column"><div 
class="footer-link-column-row"><h4>Community</h4><ul><li><a 
href="//docs.prediction.io/install/" target="blank">Download</a></li><li><a 
href="//docs.prediction.io/" target="blank">Docs</a></li><li><a 
href="//github.com/apache/incubator-predictionio" 
target="blank">GitHub</a></li><li><a 
href="mailto:user-subscr...@predictionio.incubator.apache.org"; 
target="blank">Subscribe to User Mailing List</a></li><li><a 
href="//stackoverflow.com/questions/tagged/predictionio" 
target="blank">Stackoverflow</a></li></ul></div></div><div class="col-md-6 
col-xs-6 footer-link-column"><div 
class="footer-link-column-row"><h4>Contribute</h4><ul><li><a 
href="//predictionio.incubator.apache.org/community/contribute-code/" 
target="blank">Contribute</a></li><li><a 
href="//github.com/apache/incubator-predictionio" ta
 rget="blank">Source Code</a></li><li><a 
href="//issues.apache.org/jira/browse/PIO" target="blank">Bug 
Tracker</a></li><li><a 
href="mailto:dev-subscr...@predictionio.incubator.apache.org"; 
target="blank">Subscribe to Development Mailing 
List</a></li></ul></div></div></div></div><div id="footer-bottom"><div 
class="container"><div class="row"><div class="col-md-12"><div 
id="footer-logo-wrapper"><img alt="PredictionIO" 
src="/images/logos/logo-white-d1e9c6e6.png"/></div><div 
id="social-icons-wrapper"><a class="github-button" 
href="https://github.com/apache/incubator-predictionio"; data-style="mega" 
data-count-href="/apache/incubator-predictionio/stargazers" 
data-count-api="/repos/apache/incubator-predictionio#stargazers_count" 
data-count-aria-label="# stargazers on GitHub" aria-label="Star 
apache/incubator-predictionio on GitHub">Star</a> <a class="github-button" 
href="https://github.com/apache/incubator-predictionio/fork"; 
data-icon="octicon-git-branch" data-style="mega" data-count-href="/
 apache/incubator-predictionio/network" 
data-count-api="/repos/apache/incubator-predictionio#forks_count" 
data-count-aria-label="# forks on GitHub" aria-label="Fork 
apache/incubator-predictionio on GitHub">Fork</a> <script id="github-bjs" 
async="" defer="" src="https://buttons.github.io/buttons.js";></script><a 
href="//www.facebook.com/predictionio" target="blank"><img alt="PredictionIO on 
Twitter" src="/images/icons/twitter-ea9dc152.png"/></a> <a 
href="//twitter.com/predictionio" target="blank"><img alt="PredictionIO on 
Facebook" src="/images/icons/facebook-5c57939c.png"/></a> 
</div></div></div></div></div></footer></div><script>(function(w,d,t,u,n,s,e){w['SwiftypeObject']=n;w[n]=w[n]||function(){
+(w[n].q=w[n].q||[]).push(arguments);};s=d.createElement(t);
+e=d.getElementsByTagName(t)[0];s.async=1;s.src=u;e.parentNode.insertBefore(s,e);
+})(window,document,'script','//s.swiftypecdn.com/install/v1/st.js','_st');
+
+_st('install','HaUfpXXV87xoB_zzCQ45');</script><script 
src="/javascripts/application-280db181.js"></script></body></html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-predictionio-site/blob/0bdbf8fe/resources/upgrade/index.html.gz
----------------------------------------------------------------------
diff --git a/resources/upgrade/index.html.gz b/resources/upgrade/index.html.gz
new file mode 100644
index 0000000..049307d
Binary files /dev/null and b/resources/upgrade/index.html.gz differ

http://git-wip-us.apache.org/repos/asf/incubator-predictionio-site/blob/0bdbf8fe/robots.txt
----------------------------------------------------------------------
diff --git a/robots.txt b/robots.txt
new file mode 100644
index 0000000..e42f0d7
--- /dev/null
+++ b/robots.txt
@@ -0,0 +1,4 @@
+User-agent: *
+Disallow:
+
+Sitemap: http://docs.prediction.io/sitemap.xml

Reply via email to