Modified: zeppelin/site/docs/0.7.0-SNAPSHOT/search_data.json URL: http://svn.apache.org/viewvc/zeppelin/site/docs/0.7.0-SNAPSHOT/search_data.json?rev=1774757&r1=1774756&r2=1774757&view=diff ============================================================================== --- zeppelin/site/docs/0.7.0-SNAPSHOT/search_data.json (original) +++ zeppelin/site/docs/0.7.0-SNAPSHOT/search_data.json Sat Dec 17 13:02:53 2016 @@ -477,6 +477,17 @@ + "/manual/interpreterexechooks.html": { + "title": "Interpreter Execution Hooks (Experimental)", + "content" : "<!--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 athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed 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 andlimitations under the License.-->Interpreter Execution Hooks (Experimental)OverviewApache Zeppelin allows for users to specify additional code to be executed by an interpreter at pre and post-paragraph code execution.This is primarily useful if you need to run the same set of code for all of the paragraphs within your notebook at specific times.Currently, this feature is only available for the spark and pyspark interpreters.To specify your hook code, you may use z .registerHook(). For example, enter the following into one paragraph:%pysparkz.registerHook(&quot;post_exec&quot;, &quot;print &#39;This code should be executed before the parapgraph code!&#39;&quot;)z.registerHook(&quot;pre_exec&quot;, &quot;print &#39;This code should be executed after the paragraph code!&#39;&quot;)These calls will not take into effect until the next time you run a paragraph. In another paragraph, enter%pysparkprint &quot;This code should be entered into the paragraph by the user!&quot;The output should be:This code should be executed before the paragraph code!This code should be entered into the paragraph by the user!This code should be executed after the paragraph code!If you ever need to know the hook code, use z.getHook():%pysparkprint z.getHook(&quot;post_exec&quot;)print &#39;This code should be executed after the paragraph code!&#39;Any call to z.registerHook() will automatically overw rite what was previously registered.To completely unregister a hook event, use z.unregisterHook(eventCode).Currently only &quot;post_exec&quot; and &quot;pre_exec&quot; are valid event codes for the Zeppelin Hook Registry system.Finally, the hook registry is internally shared by other interpreters in the same group.This would allow for hook code for one interpreter REPL to be set by another as follows:%sparkz.unregisterHook(&quot;post_exec&quot;, &quot;pyspark&quot;)The API is identical for both the spark (scala) and pyspark (python) implementations.CaveatsCalls to z.registerHook(&quot;pre_exec&quot;, ...) should be made with care. If there are errors in your specified hook code, this will cause the interpreter REPL to become unable to execute any code pass the pre-execute stage making it impossible for direct calls to z.unregisterHook() to take into effect. Current workarounds include calling z.unregisterHook() from a different interpreter RE PL in the same interpreter group (see above) or manually restarting the interpreter group in the UI. ", + "url": " /manual/interpreterexechooks.html", + "group": "manual", + "excerpt": "Apache Zeppelin allows for users to specify additional code to be executed by an interpreter at pre and post-paragraph code execution." + } + , + + + "/manual/interpreterinstallation.html": { "title": "Interpreter Installation in Netinst Binary Package", "content" : "<!--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 athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed 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 andlimitations under the License.-->Interpreter InstallationApache Zeppelin provides Interpreter Installation mechanism for whom downloaded Zeppelin netinst binary package, or just want to install another 3rd party interpreters. Community managed interpretersApache Zeppelin provides several interpreters as community managed interpreters. If you downloaded netinst binary package, you need to install by using below commands.Install all community managed interpreters./b in/install-interpreter.sh --allInstall specific interpreters./bin/install-interpreter.sh --name md,shell,jdbc,pythonYou can get full list of community managed interpreters by running./bin/install-interpreter.sh --listInstall interpreter built with Scala 2.10From version 0.6.1, Zeppelin support both Scala 2.10 and 2.11 for several interpreters as below: Name Maven Artifact for Scala 2.10 Maven Artifact for Scala 2.11 cassandra org.apache.zeppelin:zeppelin-cassandra_2.10:0.6.1 org.apache.zeppelin:zeppelin-cassandra_2.11:0.6.1 flink org.apache.zeppelin:zeppelin-flink_2.10:0.6.1 org.apache.zeppelin:zeppelin-flink_2.11:0.6.1 ignite org.apache.zeppelin:zeppelin-ignite_2.10:0.6.1 org.apache.zeppelin:zeppelin-ignite_2.11:0.6.1 flink org.apache.zeppelin:zeppelin-spark_2.10:0.6.1 org.apache.zeppelin:zeppelin-spark_2.11:0.6.1 If you install one of these interpreters only with --name option, installer will download interpreter buil t with Scala 2.11 by default. If you want to specify Scala version, you will need to add --artifact option. Here is the example of installing flink interpreter built with Scala 2.10../bin/install-interpreter.sh --name flink --artifact org.apache.zeppelin:zeppelin-flink_2.10:0.6.1Install Spark interpreter built with Scala 2.10Spark distribution package has been built with Scala 2.10 until 1.6.2. If you have SPARK_HOME set pointing to Spark version earlier than 2.0.0, you need to download Spark interpreter packaged with Scala 2.10. To do so, use follow command:rm -rf ./interpreter/spark./bin/install-interpreter.sh --name spark --artifact org.apache.zeppelin:zeppelin-spark_2.10:0.6.1Once you have installed interpreters, you need to restart Zeppelin. And then create interpreter setting and bind it with your notebook.3rd party interpretersYou can also install 3rd party interpreters located in the maven repository by using below commands.Install 3rd party interpreters./bin/install-interpr eter.sh --name interpreter1 --artifact groupId1:artifact1:version1The above command will download maven artifact groupId1:artifact1:version1 and all of it&#39;s transitive dependencies into interpreter/interpreter1 directory.Once you have installed interpreters, you&#39;ll need to add interpreter class name into zeppelin.interpreters property in configuration.And then restart Zeppelin, create interpreter setting and bind it with your notebook.Install multiple 3rd party interpreters at once./bin/install-interpreter.sh --name interpreter1,interpreter2 --artifact groupId1:artifact1:version1,groupId2:artifact2:version2--name and --artifact arguments will recieve comma separated list.Available community managed interpretersYou can also find the below community managed interpreter list in conf/interpreter-list file. Name Maven Artifact Description alluxio org.apache.zeppelin:zeppelin-alluxio:0.6.1 Alluxio interpreter angular org.apache.zeppelin:ze ppelin-angular:0.6.1 HTML and AngularJS view rendering bigquery org.apache.zeppelin:zeppelin-bigquery:0.6.1 BigQuery interpreter cassandra org.apache.zeppelin:zeppelin-cassandra_2.11:0.6.1 Cassandra interpreter built with Scala 2.11 elasticsearch org.apache.zeppelin:zeppelin-elasticsearch:0.6.1 Elasticsearch interpreter file org.apache.zeppelin:zeppelin-file:0.6.1 HDFS file interpreter flink org.apache.zeppelin:zeppelin-flink_2.11:0.6.1 Flink interpreter built with Scala 2.11 hbase org.apache.zeppelin:zeppelin-hbase:0.6.1 Hbase interpreter ignite org.apache.zeppelin:zeppelin-ignite_2.11:0.6.1 Ignite interpreter built with Scala 2.11 jdbc org.apache.zeppelin:zeppelin-jdbc:0.6.1 Jdbc interpreter kylin org.apache.zeppelin:zeppelin-kylin:0.6.1 Kylin interpreter lens org.apache.zeppelin:zeppelin-lens:0.6.1 Lens interpreter livy org.apache.zeppelin :zeppelin-livy:0.6.1 Livy interpreter md org.apache.zeppelin:zeppelin-markdown:0.6.1 Markdown support postgresql org.apache.zeppelin:zeppelin-postgresql:0.6.1 Postgresql interpreter python org.apache.zeppelin:zeppelin-python:0.6.1 Python interpreter shell org.apache.zeppelin:zeppelin-shell:0.6.1 Shell command ", @@ -490,7 +501,7 @@ "/manual/interpreters.html": { "title": "Interpreters in Apache Zeppelin", - "content" : "<!--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 athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed 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 andlimitations under the License.-->Interpreters in Apache ZeppelinOverviewIn this section, we will explain about the role of interpreters, interpreters group and interpreter settings in Zeppelin.The concept of Zeppelin interpreter allows any language/data-processing-backend to be plugged into Zeppelin.Currently, Zeppelin supports many interpreters such as Scala ( with Apache Spark ), Python ( with Apache Spark ), Spark SQL, JDBC, Markdown, Shell and so on.What is Ze ppelin interpreter?Zeppelin Interpreter is a plug-in which enables Zeppelin users to use a specific language/data-processing-backend. For example, to use Scala code in Zeppelin, you need %spark interpreter.When you click the +Create button in the interpreter page, the interpreter drop-down list box will show all the available interpreters on your server.What is interpreter setting?Zeppelin interpreter setting is the configuration of a given interpreter on Zeppelin server. For example, the properties are required for hive JDBC interpreter to connect to the Hive server.Properties are exported as environment variable when property name is consisted of upper characters, numbers and underscore ([A-Z_0-9]). Otherwise set properties as JVM property.Each notebook can be bound to multiple Interpreter Settings using setting icon on upper right corner of the notebook.What is interpreter group?Every Interpreter is belonged to an Interpreter Group. Interpreter Group is a unit of start/stop inter preter.By default, every interpreter is belonged to a single group, but the group might contain more interpreters. For example, Spark interpreter group is including Spark support, pySpark, Spark SQL and the dependency loader.Technically, Zeppelin interpreters from the same group are running in the same JVM. For more information about this, please checkout here.Each interpreters is belonged to a single group and registered together. All of their properties are listed in the interpreter setting like below image.Interpreter binding modeEach Interpreter Setting can choose one of &#39;shared&#39;, &#39;scoped&#39;, &#39;isolated&#39; interpreter binding mode.In &#39;shared&#39; mode, every notebook bound to the Interpreter Setting will share the single Interpreter instance. In &#39;scoped&#39; mode, each notebook will create new Interpreter instance in the same interpreter process. In &#39;isolated&#39; mode, each notebook will create new I nterpreter process.Connecting to the existing remote interpreterZeppelin users can start interpreter thread embedded in their service. This will provide flexibility to user to start interpreter on remote host. To start interpreter along with your service you have to create an instance of RemoteInterpreterServer and start it as follows:RemoteInterpreterServer interpreter=new RemoteInterpreterServer(3678); // Here, 3678 is the port on which interpreter will listen. interpreter.start() The above code will start interpreter thread inside your process. Once the interpreter is started you can configure zeppelin to connect to RemoteInterpreter by checking Connect to existing process checkbox and then provide Host and Port on which interpreter process is listening as shown in the image below:(Experimental) Interpreter Execution HooksZeppelin allows for users to specify additional code to be executed by an interpreter at pre and post-paragraph code execution. This is primarily useful if you need to run the same set of code for all of the paragraphs within your notebook at specific times. Currently, this feature is only available for the spark and pyspark interpreters. To specify your hook code, you may use &#39;z.registerHook(). For example, enter the following into one paragraph:%pysparkz.registerHook(&quot;post_exec&quot;, &quot;print &#39;This code should be executed before the parapgraph code!&#39;&quot;)z.registerHook(&quot;pre_exec&quot;, &quot;print &#39;This code should be executed after the paragraph code!&#39;&quot;)These calls will not take into effect until the next time you run a paragraph. In another paragraph, enterpython%pysparkprint &quot;This code should be entered into the paragraph by the user!&quot;The output should be:This code should be executed before the paragraph code!This code should be entered into the paragraph by the user!This code should be executed after the paragraph code!I f you ever need to know the hook code, use z.getHook():python%pysparkprint z.getHook(&quot;post_exec&quot;)print &#39;This code should be executed after the paragraph code!&#39;Any call to z.registerHook() will automatically overwrite what was previously registered. To completely unregister a hook event, use z.unregisterHook(eventCode). Currently only &quot;post_exec&quot; and &quot;pre_exec&quot; are valid event codes for the Zeppelin Hook Registry system.Finally, the hook registry is internally shared by other interpreters in the same group. This would allow for hook code for one interpreter REPL to be set by another as follows:%sparkz.unregisterHook(&quot;post_exec&quot;, &quot;pyspark&quot;)The API is identical for both the spark (scala) and pyspark (python) implementations.CaveatsCalls to z.registerHook(&quot;pre_exec&quot;, ...) should be made with care. If there are errors in your specified hook code, this will cause the interpreter REPL to become unable to execute any code pass the pre-execute stage making it impossible for direct calls to z.unregisterHook() to take into effect. Current workarounds include calling z.unregisterHook() from a different interpreter REPL in the same interpreter group (see above) or manually restarting the interpreter group in the UI. ", + "content" : "<!--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 athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed 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 andlimitations under the License.-->Interpreters in Apache ZeppelinOverviewIn this section, we will explain about the role of interpreters, interpreters group and interpreter settings in Zeppelin.The concept of Zeppelin interpreter allows any language/data-processing-backend to be plugged into Zeppelin.Currently, Zeppelin supports many interpreters such as Scala ( with Apache Spark ), Python ( with Apache Spark ), Spark SQL, JDBC, Markdown, Shell and so on.What is Ze ppelin interpreter?Zeppelin Interpreter is a plug-in which enables Zeppelin users to use a specific language/data-processing-backend. For example, to use Scala code in Zeppelin, you need %spark interpreter.When you click the +Create button in the interpreter page, the interpreter drop-down list box will show all the available interpreters on your server.What is interpreter setting?Zeppelin interpreter setting is the configuration of a given interpreter on Zeppelin server. For example, the properties are required for hive JDBC interpreter to connect to the Hive server.Properties are exported as environment variable when property name is consisted of upper characters, numbers and underscore ([A-Z_0-9]). Otherwise set properties as JVM property.Each notebook can be bound to multiple Interpreter Settings using setting icon on upper right corner of the notebook.What is interpreter group?Every Interpreter is belonged to an Interpreter Group. Interpreter Group is a unit of start/stop inter preter.By default, every interpreter is belonged to a single group, but the group might contain more interpreters. For example, Spark interpreter group is including Spark support, pySpark, Spark SQL and the dependency loader.Technically, Zeppelin interpreters from the same group are running in the same JVM. For more information about this, please checkout here.Each interpreters is belonged to a single group and registered together. All of their properties are listed in the interpreter setting like below image.Interpreter binding modeEach Interpreter Setting can choose one of &#39;shared&#39;, &#39;scoped&#39;, &#39;isolated&#39; interpreter binding mode.In &#39;shared&#39; mode, every notebook bound to the Interpreter Setting will share the single Interpreter instance. In &#39;scoped&#39; mode, each notebook will create new Interpreter instance in the same interpreter process. In &#39;isolated&#39; mode, each notebook will create new I nterpreter process.Connecting to the existing remote interpreterZeppelin users can start interpreter thread embedded in their service. This will provide flexibility to user to start interpreter on remote host. To start interpreter along with your service you have to create an instance of RemoteInterpreterServer and start it as follows:RemoteInterpreterServer interpreter=new RemoteInterpreterServer(3678); // Here, 3678 is the port on which interpreter will listen. interpreter.start() The above code will start interpreter thread inside your process. Once the interpreter is started you can configure zeppelin to connect to RemoteInterpreter by checking Connect to existing process checkbox and then provide Host and Port on which interpreter process is listening as shown in the image below:", "url": " /manual/interpreters.html", "group": "manual", "excerpt": "This document explains about the role of interpreters, interpreters group and interpreter settings in Apache Zeppelin. The concept of Zeppelin interpreter allows any language/data-processing-backend to be plugged into Zeppelin."
Modified: zeppelin/site/docs/0.7.0-SNAPSHOT/security/authentication.html URL: http://svn.apache.org/viewvc/zeppelin/site/docs/0.7.0-SNAPSHOT/security/authentication.html?rev=1774757&r1=1774756&r2=1774757&view=diff ============================================================================== --- zeppelin/site/docs/0.7.0-SNAPSHOT/security/authentication.html (original) +++ zeppelin/site/docs/0.7.0-SNAPSHOT/security/authentication.html Sat Dec 17 13:02:53 2016 @@ -94,6 +94,7 @@ <!--<li><a href="/docs/0.7.0-SNAPSHOT/manual/dynamicinterpreterload.html">Dynamic Interpreter Loading</a></li>--> <li><a href="/docs/0.7.0-SNAPSHOT/manual/dependencymanagement.html">Interpreter Dependency Management</a></li> <li><a href="/docs/0.7.0-SNAPSHOT/manual/userimpersonation.html">Interpreter User Impersonation</a></li> + <li><a href="/docs/0.7.0-SNAPSHOT/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.0-SNAPSHOT/interpreter/alluxio.html">Alluxio</a></li> Modified: zeppelin/site/docs/0.7.0-SNAPSHOT/security/datasource_authorization.html URL: http://svn.apache.org/viewvc/zeppelin/site/docs/0.7.0-SNAPSHOT/security/datasource_authorization.html?rev=1774757&r1=1774756&r2=1774757&view=diff ============================================================================== --- zeppelin/site/docs/0.7.0-SNAPSHOT/security/datasource_authorization.html (original) +++ zeppelin/site/docs/0.7.0-SNAPSHOT/security/datasource_authorization.html Sat Dec 17 13:02:53 2016 @@ -94,6 +94,7 @@ <!--<li><a href="/docs/0.7.0-SNAPSHOT/manual/dynamicinterpreterload.html">Dynamic Interpreter Loading</a></li>--> <li><a href="/docs/0.7.0-SNAPSHOT/manual/dependencymanagement.html">Interpreter Dependency Management</a></li> <li><a href="/docs/0.7.0-SNAPSHOT/manual/userimpersonation.html">Interpreter User Impersonation</a></li> + <li><a href="/docs/0.7.0-SNAPSHOT/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.0-SNAPSHOT/interpreter/alluxio.html">Alluxio</a></li> Modified: zeppelin/site/docs/0.7.0-SNAPSHOT/security/notebook_authorization.html URL: http://svn.apache.org/viewvc/zeppelin/site/docs/0.7.0-SNAPSHOT/security/notebook_authorization.html?rev=1774757&r1=1774756&r2=1774757&view=diff ============================================================================== --- zeppelin/site/docs/0.7.0-SNAPSHOT/security/notebook_authorization.html (original) +++ zeppelin/site/docs/0.7.0-SNAPSHOT/security/notebook_authorization.html Sat Dec 17 13:02:53 2016 @@ -94,6 +94,7 @@ <!--<li><a href="/docs/0.7.0-SNAPSHOT/manual/dynamicinterpreterload.html">Dynamic Interpreter Loading</a></li>--> <li><a href="/docs/0.7.0-SNAPSHOT/manual/dependencymanagement.html">Interpreter Dependency Management</a></li> <li><a href="/docs/0.7.0-SNAPSHOT/manual/userimpersonation.html">Interpreter User Impersonation</a></li> + <li><a href="/docs/0.7.0-SNAPSHOT/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.0-SNAPSHOT/interpreter/alluxio.html">Alluxio</a></li> Modified: zeppelin/site/docs/0.7.0-SNAPSHOT/security/shiroauthentication.html URL: http://svn.apache.org/viewvc/zeppelin/site/docs/0.7.0-SNAPSHOT/security/shiroauthentication.html?rev=1774757&r1=1774756&r2=1774757&view=diff ============================================================================== --- zeppelin/site/docs/0.7.0-SNAPSHOT/security/shiroauthentication.html (original) +++ zeppelin/site/docs/0.7.0-SNAPSHOT/security/shiroauthentication.html Sat Dec 17 13:02:53 2016 @@ -94,6 +94,7 @@ <!--<li><a href="/docs/0.7.0-SNAPSHOT/manual/dynamicinterpreterload.html">Dynamic Interpreter Loading</a></li>--> <li><a href="/docs/0.7.0-SNAPSHOT/manual/dependencymanagement.html">Interpreter Dependency Management</a></li> <li><a href="/docs/0.7.0-SNAPSHOT/manual/userimpersonation.html">Interpreter User Impersonation</a></li> + <li><a href="/docs/0.7.0-SNAPSHOT/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.0-SNAPSHOT/interpreter/alluxio.html">Alluxio</a></li> Modified: zeppelin/site/docs/0.7.0-SNAPSHOT/sitemap.txt URL: http://svn.apache.org/viewvc/zeppelin/site/docs/0.7.0-SNAPSHOT/sitemap.txt?rev=1774757&r1=1774756&r2=1774757&view=diff ============================================================================== --- zeppelin/site/docs/0.7.0-SNAPSHOT/sitemap.txt (original) +++ zeppelin/site/docs/0.7.0-SNAPSHOT/sitemap.txt Sat Dec 17 13:02:53 2016 @@ -45,6 +45,7 @@ http://zeppelin.apache.org/interpreter/s http://zeppelin.apache.org/manual/dependencymanagement.html http://zeppelin.apache.org/manual/dynamicform.html http://zeppelin.apache.org/manual/dynamicinterpreterload.html +http://zeppelin.apache.org/manual/interpreterexechooks.html http://zeppelin.apache.org/manual/interpreterinstallation.html http://zeppelin.apache.org/manual/interpreters.html http://zeppelin.apache.org/manual/notebookashomepage.html Modified: zeppelin/site/docs/0.7.0-SNAPSHOT/storage/storage.html URL: http://svn.apache.org/viewvc/zeppelin/site/docs/0.7.0-SNAPSHOT/storage/storage.html?rev=1774757&r1=1774756&r2=1774757&view=diff ============================================================================== --- zeppelin/site/docs/0.7.0-SNAPSHOT/storage/storage.html (original) +++ zeppelin/site/docs/0.7.0-SNAPSHOT/storage/storage.html Sat Dec 17 13:02:53 2016 @@ -94,6 +94,7 @@ <!--<li><a href="/docs/0.7.0-SNAPSHOT/manual/dynamicinterpreterload.html">Dynamic Interpreter Loading</a></li>--> <li><a href="/docs/0.7.0-SNAPSHOT/manual/dependencymanagement.html">Interpreter Dependency Management</a></li> <li><a href="/docs/0.7.0-SNAPSHOT/manual/userimpersonation.html">Interpreter User Impersonation</a></li> + <li><a href="/docs/0.7.0-SNAPSHOT/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.0-SNAPSHOT/interpreter/alluxio.html">Alluxio</a></li>
