13 days agoUpdate Livy repo URLs. master
Marcelo Vanzin [Mon, 7 Jan 2019 23:18:28 +0000 (15:18 -0800)] 
Update Livy repo URLs.

Author: Marcelo Vanzin <>

Closes #137 from vanzin/gitbox_update.

2 weeks ago[LIVY-538] Add integration tests for thriftserver
mark91 [Thu, 3 Jan 2019 20:32:48 +0000 (12:32 -0800)] 
[LIVY-538] Add integration tests for thriftserver

## What changes were proposed in this pull request?

Added a new module containing ITs for the thriftserver. The current tests contain only simple queries which ensure that the thriftserver is working correctly in the distributed environment. Specific checks of functionalities are already tested in the related UTs

## How was this patch tested?

added tests

Author: mark91 <>
Author: Marco Gaido <>

Closes #131 from mgaido91/LIVY-538.

4 weeks ago[LIVY-479] Enable livy.rsc.launcher.address configuration
Tao Li [Wed, 19 Dec 2018 22:17:51 +0000 (14:17 -0800)] 
[LIVY-479] Enable livy.rsc.launcher.address configuration

## What changes were proposed in this pull request?
In current code we are setting livy.rsc.launcher.address to RPC server and ignoring whatever is specified in configs. However in some scenarios there is a need for the user to be able to explicitly configure it. For example, the IP address for an active Livy server might change over the time, so rather than using the fixed IP address, we need to specify this setting to a more generic host name. For this reason, we want to enable the capability of user side configurations.


## How was this patch tested?
Manual tests by changing "livy.rsc.launcher.address" and verified the setting took effect

Author: Tao Li <>

Closes #101 from taoliseki/LIVY-479.

4 weeks ago[LIVY-543] Clean thriftserver dependencies from Hive's jetty
Marco Gaido [Wed, 19 Dec 2018 00:28:54 +0000 (16:28 -0800)] 
[LIVY-543] Clean thriftserver dependencies from Hive's jetty

## What changes were proposed in this pull request?

Hive 3.0 uses Jetty 9.3.8. So there are some jars coming from hive dependency which are conflicting with our Jetty dependencies which were upgraded in LIVY-526. Hence we should ignore the dependencies Hive has on Jetty and use our own version. After the refactor which has been done in the thriftserver, this should be easy. This can cause issue when running the server (not always, though, which makes it hard to debug and reproduce).

The PR removes also an extra-dependency which was left in the thriftserver-server module which is not needed anymore after the refactor which created the thriftserver-session module.

## How was this patch tested?

manual tests, checking the generated JARs

Please review before opening a pull request.

Author: Marco Gaido <>

Closes #134 from mgaido91/LIVY-543.

6 weeks ago[LIVY-539] Fix incorrect default value in livy-client.conf.template
Adrian Petrescu [Tue, 4 Dec 2018 22:36:49 +0000 (14:36 -0800)] 
[LIVY-539] Fix incorrect default value in livy-client.conf.template

## What changes were proposed in this pull request?
The template for `livy-client.conf` implies that the default value of `livy.rsc.launcher.port.range` is `10000~10110`, but this is in fact incorrect - the real default value is `10000~10010`, as you can [see here]( This is really confusing, especially since:
  * 10110 is wrong on the Spark side, the default configuration there won't open that many ports
  * 10010 and 10110 look very similar to the human eye so it can take a long time to notice the discrepancy

This PR modifies the default conf template to reflect the real default value.

## How was this patch tested?

No testing applicable, it's a configuration template fix.

Author: Adrian Petrescu <>

Closes #132 from apetresc/patch-1.

6 weeks ago[LIVY-533] Use setJobGroup/cancelJobGroup to cancel bypass jobs
Bjoern Lohrmann [Mon, 3 Dec 2018 23:33:56 +0000 (15:33 -0800)] 
[LIVY-533] Use setJobGroup/cancelJobGroup to cancel bypass jobs

## What changes were proposed in this pull request?

This PR fixes [LIVY-533](

The proposed fix invokes setJobGroup() in the worker thread before calling job code, and cancelJobGroup() when another thread tries to cancel job execution. synchronized blocks are employed to guard against race conditions.

Also, this PR removes some unused code from the JobWrapper class.

## How was this patch tested?

Manual as well as Livy test suite. No new tests were added, since the code is covered by existing tests.

Author: Bjoern Lohrmann <>

Closes #128 from bjoernlohrmann/master.

7 weeks ago[LIVY-502] Remove dependency on hive-exec
Marco Gaido [Fri, 30 Nov 2018 23:57:16 +0000 (15:57 -0800)] 
[LIVY-502] Remove dependency on hive-exec

## What changes were proposed in this pull request?

This PR removes the dependency on `hive-exec`. Only modules of Hive which are used after this PR are `hive-service-rpc` and `hive-service`. This drastically reduces the amount of JARs needed by the thriftserver module.

The PR takes the Hive classes which we were using and adapts them when necessary (or simpify when we don't need something) in order to work in the Livy thriftserver.

Most of the classes are just migrated replacing all occurrences of `HiveConf`, `HiveSession` and other Hive specific classes. Only one class has a quite different logic than Hive's and it is `AuthFactory`, as we are using a different UGI handling from Hive (as we are not running the TS in a standalone JVM).

The functionalities we are taking from Hive are:
 - the thrift protocol endpoints (the classes in the `cli` package), ie. the classes handling lower level details about the communication with the client;
 - the authentication layer (classes in the `auth` package, which are used in the ones in `cli`), despite this PR leaves LDAP and PAM as out of scope as they are not trivial to be ported and not needed for a working solution. We can add them later;
  - the classes in the `operation` package which are used to answer to metadata queries by the JDBC driver.

## How was this patch tested?

existing UTs + manual tests

Author: Marco Gaido <>

Closes #117 from mgaido91/LIVY-502.

7 weeks ago[LIVY-503] Separate thrift server session code in separate module.
Marcelo Vanzin [Thu, 29 Nov 2018 18:09:42 +0000 (10:09 -0800)] 
[LIVY-503] Separate thrift server session code in separate module.

This change creates a new module ("livy-thriftserver-session") with
the code related to the Thrift server that is expected to run inside
a Spark session. The module contains a few Job implementations that
are used by the Thrift server to run SQL statements on the session
side, plus some internal bookkeeping code.

The new module is a re-implementation of the current Scala code in
Java; Java is chosen because it becomes simpler to support different
Scala versions, for a couple of reasons:

- no need to compile the module separately for different Scala versions,
  for when that becomes an issue.
- better control of serialization, instead of relying on Scala types that
  may not be compatible across versions (imagine the Livy server and the
  Spark session using different Scala versions).

The change also removes the "jarLocation" configuration; in a release
package, the session jars would be available with the rest of the RSC
jars; for development, some code was added to the RSC to add the
thrift server jars to the session when a local build is detected.

Also included is a small change in the RSC pom so that the shaded jar
is generated in the correct target directory and later copied into the
staging directory; this solves an issue with using the RSC in test code
in other modules (such as the one being added).

Author: Marcelo Vanzin <>

Closes #118 from vanzin/LIVY-503.

7 weeks ago[LIVY-537] Add hiveconf for setting the num of executors in thrift sessions
Marco Gaido [Wed, 28 Nov 2018 21:48:58 +0000 (13:48 -0800)] 
[LIVY-537] Add hiveconf for setting the num of executors in thrift sessions

## What changes were proposed in this pull request?

We missed to add a parameter to set the number of executors when creating a session through the thrift API. See

## How was this patch tested?

Manual tests.

Author: Marco Gaido <>

Closes #130 from mgaido91/LIVY-537.

8 weeks ago[LIVY-535] Fix non-atomic session creation
Alexey Romanenko [Mon, 26 Nov 2018 17:21:09 +0000 (09:21 -0800)] 
[LIVY-535] Fix non-atomic session creation

## What changes were proposed in this pull request?

All steps, that include check for too many sessions and creating new
session, should be atomic operation to avoid concurrent access of
several threads to different part of this code in the same time.

## How was this patch tested?
If was tested manually on local virtual cluster with this different values of config option `livy.server.session.max-creation`: 1, 2 and 3

Then I run the following command to make sure that only allowed number of sessions were created in the same time and others were rejected:
`for i in {1..5}; do curl -X POST --data '{"file": "/tmp/spark-examples-2.jar", "className": "org.apache.spark.examples.SparkPi"}' -H "Content-Type: application/json" http://localhost:8999/batches; done`

Author: Alexey Romanenko <>

Closes #129 from aromanenko-dev/LIVY-535-session-max-creation.

2 months ago[LIVY-518][BUILD] Support Spark 2.4
hyukjinkwon [Wed, 7 Nov 2018 17:16:37 +0000 (09:16 -0800)] 
[LIVY-518][BUILD] Support Spark 2.4

## What changes were proposed in this pull request?

This PR proposes to support Spark 2.4 in Livy.

## How was this patch tested?

Unit tests and manual tests.

Author: hyukjinkwon <>
Author: Hyukjin Kwon <>

Closes #121 from HyukjinKwon/spark24-support.

2 months ago[LIVY-525] SessionServlet: Convert response body for error messages to json
ingo [Mon, 5 Nov 2018 17:36:12 +0000 (09:36 -0800)] 
[LIVY-525] SessionServlet: Convert response body for error messages to json

## What changes were proposed in this pull request?
SessionServlet is supposed to deliver json responses. This is not the case in some error cases today. This pull requests converts the response bodies for NotFound, BadRequest and Forbidden to json

## How was this patch tested?
manual tests since this is a trivial fix.

Author: ingo <>

Closes #127 from IngoSchuster/json_fix.

2 months ago[LIVY-495] Add thriftserver UI
Marco Gaido [Thu, 25 Oct 2018 19:44:20 +0000 (12:44 -0700)] 
[LIVY-495] Add thriftserver UI

## What changes were proposed in this pull request?

The PR adds a new table in the Session tab dedicated to thrift-server sessions. The table contains the active sessions with a link to the corresponding Livy session.

Moreover, the same information is also exposed through a REST endpoint (`"thriftserver/sessions"`).

## How was this patch tested?

Manual tests. A screenshot of the UI is:

![screen shot 2018-10-09 at 11 32 18 am](

Author: Marco Gaido <>

Closes #114 from mgaido91/LIVY-495.

2 months ago[LIVY-531][BUILD] Update spark-2.3 default version to 2.3.2
Lantao Jin [Thu, 25 Oct 2018 19:35:25 +0000 (12:35 -0700)] 
[LIVY-531][BUILD] Update spark-2.3 default version to 2.3.2

## What changes were proposed in this pull request?

Due to spark 2.3.2 is highly recommended version to upgrade for all 2.3.x users which contains many stability bug fixes.

## How was this patch tested?

Existing UTs.

Author: Lantao Jin <>

Closes #124 from LantaoJin/LIVY-531.

3 months ago[LIVY-529][DOCS] Fix supported Python version from 2.6+ to 2.7+ in documentation
itholic [Tue, 16 Oct 2018 20:59:49 +0000 (13:59 -0700)] 
[LIVY-529][DOCS] Fix supported Python version from 2.6+ to 2.7+ in documentation

## What changes were proposed in this pull request?

As of Spark 2.2, Python 2.6 is officially dropped(

Since Livy support Spark 2.2+, looks this limitation is inheritted.

Currently, Livy doc ( notes Python 2.6+ is required.

It looks this should be changed to 2.7+

## How was this patch tested?


Author: itholic <>

Closes #122 from itholic/LIVY-529.

3 months ago[MINOR] There is some typo in PULL_REQUEST_TEMPLATE
itholic [Tue, 16 Oct 2018 20:55:00 +0000 (13:55 -0700)] 
[MINOR] There is some typo in PULL_REQUEST_TEMPLATE

## What changes were proposed in this pull request?


> `Iinclude` a link to the associated JIRA and make sure to add a link to this pr on the JIRA as well)

So i suggest this typo fix to `(include`

## How was this patch tested?


Author: itholic <>

Closes #123 from itholic/MINOR.

3 months ago[LIVY-526] Upgrade jetty version
Arun Mahadevan [Sat, 13 Oct 2018 07:47:18 +0000 (15:47 +0800)] 
[LIVY-526] Upgrade jetty version

## What changes were proposed in this pull request?

Upgrade the jetty patch version to a more recent version that has fixes for a few security issues.

## How was this patch tested?

Existing unit tests

Author: Arun Mahadevan <>

Closes #120 from arunmahadevan/jetty-upgrade.

3 months ago[LIVY-500] Add beeline client for dev
Marco Gaido [Fri, 5 Oct 2018 20:06:21 +0000 (13:06 -0700)] 
[LIVY-500] Add beeline client for dev

## What changes were proposed in this pull request?

The PR adds a new `thriftserver/client` module and a `beeline` script which are useful to have a client for the thriftserver during local testing. Both things are intended for dev usage only and are not shipped with the distribution.

## How was this patch tested?

manual test

Author: Marco Gaido <>

Closes #113 from mgaido91/LIVY-500.

3 months ago[LIVY-520] Add log when session is GC-ed
Marco Gaido [Mon, 1 Oct 2018 20:38:29 +0000 (13:38 -0700)] 
[LIVY-520] Add log when session is GC-ed

## What changes were proposed in this pull request?

When a session is inactive for a long time, it is GC-ed, ie. it is closed. Currently this operation is not logged, so it is not easy to understand why a session was closed.

The PR proposes to add a log in order to explain what happened.

## How was this patch tested?

manual tests

Author: Marco Gaido <>

Closes #116 from mgaido91/LIVY-520.

3 months ago[LIVY-511][LIVY-512] Remove support for old Spark, Scala versions.
Marcelo Vanzin [Thu, 27 Sep 2018 17:18:38 +0000 (10:18 -0700)] 
[LIVY-511][LIVY-512] Remove support for old Spark, Scala versions.

This change restricts Livy support to Spark 2.2+ and Scala 2.11.  Both changes
are made together because by supporting Spark 2.2+ only, it becomes impossible
to test Scala 2.10.

As part of the change, a lot of code that used reflection to support different
versions of Spark could be cleaned up and directly call Spark APIs.

The Scala 2.10 parts of the builds also have been removed, but the actual
support for building and running with different Scala versions (and related
tests) have been left as is. This will allow us to support 2.12 in the future.

This change intentionally does not touch the public API (the "api/" module).
There are things that could be cleaned up now that Spark 1.x is not supported,
but that would mean an API breakage so I chose to leave those alone for now.

The test matrix and build profiles have also been simplified a lot.  There are
now two profiles to choose from (for Spark 2.2 and 2.3); integration tests can
be run against a different version of Spark by running just the integration
test module with the desired profile.

Tested with Spark 2.2 and 2.3, and also by building against 2.2 and running
integration tests against 2.3.

Author: Marcelo Vanzin <>

Closes #112 from vanzin/LIVY-511.

3 months ago[LIVY-494] Add thriftserver to Livy server
Marco Gaido [Mon, 24 Sep 2018 22:39:07 +0000 (15:39 -0700)] 
[LIVY-494] Add thriftserver to Livy server

## What changes were proposed in this pull request?

The PR adds a configuration parameter in order to startup also the thriftserver when starting Livy server.

Apart from this trivial change, other 3 main things were needed and are present in this PR:

 - Add the thriftserver JARs to the assembly and the livy-server script;
 - A small refactor in order to enforce impersonation in the `*Session` classes, instead of in the `*Servlet` ones, so that it is picked up by the thriftserver module too (this change is not strictly needed, but I consider it a better option that duplicating this logic in the thriftserver module too);
 - Creating a UGI from the configured keytab. This is needed because the thriftserver requires the UGI to be created from a keytab in order to work properly and previously Livy was using a UGI generated from the cached TGT (created by the `kinit` command).

## How was this patch tested?

Manual test: starting the server and having it up for more than 9 days.

Author: Marco Gaido <>

Closes #107 from mgaido91/LIVY-494.

4 months ago[LIVY-510] Remove support for JDK7.
Marcelo Vanzin [Thu, 20 Sep 2018 03:49:22 +0000 (11:49 +0800)] 
[LIVY-510] Remove support for JDK7.

With this change Livy will only build and run with JDK8. While this
doesn't necessarily preclude using Java 7 for running Spark itself,
that is not encouraged due to possible issues with serialization.

There are a few small changes elsewhere that I made so tests would pass,
but aren't related to the java 8 change:

- a small tweak to the fallback code that initializes the python
  interpreter, which was failing with a weird reflection error.

- expose the user's home directory in the MiniYarnCluster, to allow
  the tests to see pip packages installed in the user's home.

- tweak the python API tests so that the pytest cache does not pollute
  the source directory.

- changed Travis to use Oracle's JDK, since the Open JDK path was
  mixing Java 8 and 9 and causing errors.

- updated jacoco to latest stable.

Author: Marcelo Vanzin <>

Closes #111 from vanzin/LIVY-510.

4 months ago[MINOR] Update version of ffi.
Marcelo Vanzin [Tue, 11 Sep 2018 18:11:57 +0000 (11:11 -0700)] 
[MINOR] Update version of ffi.

The other updates were made when building the docs, more exactly when
trying to fix "bundle install", since things wouldn't build with the
existing dependencies.

Author: Marcelo Vanzin <>

Closes #108 from vanzin/ffi-update.

4 months ago[MINOR] Remove unneded repos from root pom.
Marcelo Vanzin [Tue, 11 Sep 2018 05:36:46 +0000 (13:36 +0800)] 
[MINOR] Remove unneded repos from root pom.

Also a minor indentation fix.

Author: Marcelo Vanzin <>

Closes #109 from vanzin/pom-cleanup.

4 months ago[LIVY-491][LIVY-492][LIVY-493] Add Thriftserver module and implementation
Marco Gaido [Mon, 10 Sep 2018 03:42:10 +0000 (11:42 +0800)] 
[LIVY-491][LIVY-492][LIVY-493] Add Thriftserver module and implementation

## What changes were proposed in this pull request?

The PR contains an implementation of a JDBC API for Livy server based on the Hive Thriftserver. The implementation is based on the version 3.0 of Hive Thriftserver.

This initial PR contains the thriftserver module added to Livy and its implementation. It doesn't contain any binding for starting it, this will be added later.

Some Hive classes have been ported here because they needed come modifications in order to works properly in Livy. Long term solution is to get of them all by re-implementing the needed parts in the Livy thriftserver itself, without relying on Hive code (other than the PRC interface) anymore. Those classes/changes can be summarized in three categories:

 1. Changes to make the Hive classes easy to extend: for instance, some visibility modifiers were changes (moving from `private` or `package private` to `protected` or `public`);
 2. Changes in order to reduce the dependencies on Hive modules/classes: for instance all the classes in the `operation` package were modified in order to get rid of the usage of `HiveSession` and the `HiveServer2` was changed in order not to use `CLIService`.
 3. The UGI management which is currently performed in Livy is definitely very different from the Hive one, this required changes to the `HiveAuthFactory` in order not to interfere with the existing codebase.

## How was this patch tested?

added integration tests as UTs

Author: Marco Gaido <>

Closes #104 from mgaido91/LIVY-491.

5 months ago[LIVY-498][REPL] Fix Windows CRLF line ending issue in SparkR interpreter
jerryshao [Wed, 22 Aug 2018 02:48:33 +0000 (10:48 +0800)] 
[LIVY-498][REPL] Fix Windows CRLF line ending issue in SparkR interpreter

## What changes were proposed in this pull request?

If the issued query contains CRLF EOL, it will be failed to execute on *nix machine. This happens when submitting queries from Windows machine and executing on Linux machine.

So here propose to convert statement to match system's EOL.

## How was this patch tested?

New UT added.

Author: jerryshao <>

Closes #105 from jerryshao/LIVY-498.

7 months ago[HOTFIX] Fix Base64 not existed in jdk7 issue
jerryshao [Wed, 13 Jun 2018 03:42:40 +0000 (11:42 +0800)] 
[HOTFIX] Fix Base64 not existed in jdk7 issue

7 months ago[Security] Update to support pyspark and sparkr changes in Spark 2.3.1
jerryshao [Tue, 12 Jun 2018 12:06:16 +0000 (20:06 +0800)] 
[Security] Update to support pyspark and sparkr changes in Spark 2.3.1

7 months ago[LIVY-477][BUILD] Upgrade Scala version to 2.11.12
jerryshao [Tue, 12 Jun 2018 12:52:52 +0000 (20:52 +0800)] 
[LIVY-477][BUILD] Upgrade Scala version to 2.11.12

## What changes were proposed in this pull request?

Scala version below 2.11.12 has CVE (, and Spark will also upgrade its supported version to 2.11.12.

So here upgrading Livy's Scala version also.

## How was this patch tested?

Existing tests.

Author: jerryshao <>

Closes #100 from jerryshao/LIVY-477.

7 months ago[LIVY-475] Support of Hadoop CredentialProvider API
Ivan Dzikovsky [Thu, 31 May 2018 11:53:25 +0000 (19:53 +0800)] 
[LIVY-475] Support of Hadoop CredentialProvider API

In this PR I've added following option to livy.conf:
to allow to specify path to Hadoop Credential Provider, which than used in `WebServer.scala` to set Keystore password and Key password to JKS that used to enable SSL encryption.

Also before trying to use Hadoop CredentialProvider API I'm checking if it available (as it was not available in Hadoop < 2.6) using the same [method that used in Oozie](

To use this, you will need to generate Credential Provider containing "livy.keystore.password" and/or "livy.key-password" in the common way:
hadoop credential create "livy.keystore.password" -value "keystore_secret" -provider jceks://
hadoop credential create "livy.key-password" -value "key_secret" -provider jceks://

Author: Ivan Dzikovsky <>

Closes #99 from idzikovsky/LIVY-475.

Change-Id: Iae60550900067e61a37a6f74acb5e299005f3397

7 months ago[LIVY-473][TEST] Minor refactor of integration test to remove legacy code
jerryshao [Tue, 29 May 2018 05:51:20 +0000 (13:51 +0800)] 
[LIVY-473][TEST] Minor refactor of integration test to remove legacy code

Integration test has some legacy codes related to different cluster type (mini or real). Since now we already use real Spark package to do test and partially removed that code, we should refactor to remove all the unused legacy code.

Existing tests.

Author: jerryshao <>

Closes #97 from jerryshao/LIVY-473.

Change-Id: I7ca6c69884f7ed11a34cde5a6e1fc9bfcd141cbb

7 months ago[LIVY-472][SERVER] Improve the logs for fail-to-create session
jerryshao [Fri, 25 May 2018 01:36:03 +0000 (09:36 +0800)] 
[LIVY-472][SERVER] Improve the logs for fail-to-create session

## What changes were proposed in this pull request?

Livy currently doesn't give a very clear log about the fail-to-create session, it only says that session related app tag cannot be found in RM, but doesn't tell user how to search and get the true root cause. So here change the logs to make it more clear.

## How was this patch tested?

Local verification.

Author: jerryshao <>

Closes #96 from jerryshao/LIVY-472.

8 months ago[LIVY-468] Reverse proxy support
M Wcislo [Wed, 23 May 2018 02:23:22 +0000 (19:23 -0700)] 
[LIVY-468] Reverse proxy support

## What changes were proposed in this pull request?
Implements reverse proxy support, by adding basePath/URL concept, configurable using livy.conf

Resolves: [LIVY-468](

## How was this patch tested?
Tested manually with Kong 0.11 and Spark 2.1.0 in cluster mode (using spark dispatcher).

Author: M Wcislo <>

Closes #93 from m-wcislo/LIVY-468_reverse_proxy_support.

8 months ago[LIVY-452] Differentiate FAILED and KILLED states
Alexey Romanenko [Mon, 21 May 2018 01:25:04 +0000 (09:25 +0800)] 
[LIVY-452] Differentiate FAILED and KILLED states

Currently, it's not possible to distinguish between two states - SparkApp.State.KILLED and SparkApp.State.FAILED. In both cases the session state will be SessionState.Dead(). This patch adds new SessionState.Killed() which will be used when job was actually killed by user.

- Corresponding unit test was adjusted
- Tested manually on YARN cluster with `livy.spark.deploy-mode=cluster`

Author: Alexey Romanenko <>

Closes #92 from aromanenko-dev/LIVY-452-SessionState-Killed.

Change-Id: Ia18808d7954e20653e152d8bf6748f43c2707b18

8 months ago[LIVY-466][RSC] Fix RSCDriver exception during RPC shutdown
jerryshao [Thu, 3 May 2018 06:37:07 +0000 (14:37 +0800)] 
[LIVY-466][RSC] Fix RSCDriver exception during RPC shutdown

## What changes were proposed in this pull request?

During RSCDriver's shutdown, it will first shutdown RPC server, and then all the RPC clients. When RPC client is closed, it will register a timeout to avoid orphaned RSCDriver, but this is not necessary during RSCDriver's shutdown, so here fixing this issue. The details can be seen in [JIRA](

## How was this patch tested?

Local verification.

Author: jerryshao <>

Closes #90 from jerryshao/LIVY-466.

8 months ago[LIVY-460][SERVER] Remove misleading log prefix
jerryshao [Thu, 26 Apr 2018 01:36:47 +0000 (09:36 +0800)] 
[LIVY-460][SERVER] Remove misleading log prefix

## What changes were proposed in this pull request?

Removing misleading log prefix "stdout: " for the captured stdout/stderr of spark-submit process

## How was this patch tested?


Author: jerryshao <>

Closes #89 from jerryshao/LIVY-460.

9 months ago[LIVY-458][BUILD] Upgrade jackson version to 2.9.5
jerryshao [Wed, 18 Apr 2018 08:51:36 +0000 (16:51 +0800)] 
[LIVY-458][BUILD] Upgrade jackson version to 2.9.5

## What changes were proposed in this pull request?

Due to several security issues of jackson databind module (CVE-2018-5968, CVE-2017-17485, CVE-2018-7489), here propose to upgrade jackson version 2.9.5.

## How was this patch tested?

Existing UTs.

Author: jerryshao <>

Closes #87 from jerryshao/LIVY-458.

9 months ago[LIVY-457][REPL] Fix SQLContext is not initialized correctly issue
jerryshao [Wed, 18 Apr 2018 02:29:34 +0000 (10:29 +0800)] 
[LIVY-457][REPL] Fix SQLContext is not initialized correctly issue

## What changes were proposed in this pull request?

The signature of SQLContext's constructor is changed in Spark2, but we're still using the Spark1's signature, which will throw an exception when using this object.

## How was this patch tested?

UT and local verification.

Author: jerryshao <>

Closes #86 from jerryshao/LIVY-457.

9 months ago[LIVY-455][REPL] Fix json4s doesn't support java.math.BigDecimal issue
jerryshao [Wed, 11 Apr 2018 02:24:20 +0000 (10:24 +0800)] 
[LIVY-455][REPL] Fix json4s doesn't support java.math.BigDecimal issue

## What changes were proposed in this pull request?

Livy's SQLInterpreter will throw exception when rows contain java.math.BigDecimal data. This is because current version of json4s doesn't treat java.math.BigDecimal type as primitive type. On the contrary, json4s supports Scala BigDecimal as primitive type. So the fix is to convert java BigDecimal to Scala BigDecimal.

## How was this patch tested?

Unit test is added.

Author: jerryshao <>

Closes #85 from jerryshao/LIVY-455.

9 months ago[MINOR] Fix travis builds
Wieland Hoffmann [Mon, 9 Apr 2018 05:47:36 +0000 (13:47 +0800)] 
[MINOR] Fix travis builds

Each individual commit has a more detailed description of what's being changed and why.

At the moment, Travis builds don't work:

* - the `sudo pip3 install --upgrade pip "setuptools < 36"` command fails with `sudo: pip3: command not found`.
* fixing that, the `failing the org.apache.rat:apache-rat-plugin:0.12:check` maven goal fails because it sees `.pytest_cache` folders that it doesn't know about (, failure in, check the raw log).

This pull request works around the pip3 failures by just using pip as a callable module (possible since Python 3.4) and adding `.pytest_cache` to raw-excludes, as well as showing the contents of `rat.txt` files in the `after_failure` step. I concede that the pip change is more of a workaround, but I don't know how else to fix it and unblock testing.

Running the tests on travis.

Please review before opening a pull request.

Author: Wieland Hoffmann <>

Closes #84 from mineo/rat.

10 months ago[LIVY-446][BUILD] Livy to Support Spark 2.3
jerryshao [Mon, 12 Mar 2018 02:37:28 +0000 (10:37 +0800)] 
[LIVY-446][BUILD] Livy to Support Spark 2.3

## What changes were proposed in this pull request?

This PR aims to support Spark 2.3 in Livy, several changes due to internal changes of Spark 2.3

## How was this patch tested?

Existing UTs.

Author: jerryshao <>

Closes #81 from jerryshao/LIVY-446.

10 months ago[LIVY-448] Assembly format is duplicated in pom.xml and assembly.xml
Meisam [Thu, 8 Mar 2018 00:56:01 +0000 (08:56 +0800)] 
[LIVY-448] Assembly format is duplicated in pom.xml and assembly.xml

## What changes were proposed in this pull request?
The assembly format for Livy is specified twice:
1 in `assembly/pom.xml`:
2 in `assembly/assembly.xml`
But only one is enough. Also in `assembly/assembly.xml`, the format is hard coded as zip, but is should be based

## How was this patch tested?
All the unit tests and ITs pass as usual. Moreover, I tested that  `targz` profile builds a tar.gz archive and the default profile builds a zip archive.

For example,
this builds the zip archive:
mvn -am -pl assembly package
And this builds the tar.gz artifact:
mvn -Ptargz -am -pl assembly package


Author: Meisam <meisam@Hachinohe.local>

Closes #83 from meisam/LIVY-448.

10 months ago[MINOR] Addressed Docs dependency security vulnerability followup
Alex Bozarth [Wed, 7 Mar 2018 20:29:06 +0000 (12:29 -0800)] 
[MINOR] Addressed Docs dependency security vulnerability followup

Followup to 26428c56f20ba5ea608038ed8c2e11d8f04665d4

Author: Alex Bozarth <>

Closes #82 from ajbozarth/gem.

11 months ago[MINOR][BUILD] Improve release-build script
Alex Bozarth [Fri, 9 Feb 2018 22:10:10 +0000 (14:10 -0800)] 
[MINOR][BUILD] Improve release-build script

Improved based on the 0.5.0-incubating release process.


- Instead of forcing user to set env it prompts for required info, this also protects password inout
- Creates temp dir to hold files created in release process and makes sure git ignores it

Author: Alex Bozarth <>

Closes #76 from ajbozarth/script.

11 months ago[LIVY-440] Update copyright year to 2018
Alex Bozarth [Tue, 6 Feb 2018 22:09:04 +0000 (14:09 -0800)] 
[LIVY-440] Update copyright year to 2018

Author: Alex Bozarth <>

Closes #79 from ajbozarth/440.

11 months ago[MINOR] Addressed Docs dependency security vulnerability
Alex Bozarth [Thu, 25 Jan 2018 22:46:35 +0000 (14:46 -0800)] 
[MINOR] Addressed Docs dependency security vulnerability

Addressed issue raised on mailing list:

More info on the vulnerability:

Author: Alex Bozarth <>

Closes #75 from ajbozarth/fix.

11 months ago[LIVY-434][BUILD] Update master to version 0.6.0-incubating-SNAPSHOT
Alex Bozarth [Tue, 23 Jan 2018 21:10:26 +0000 (13:10 -0800)] 
[LIVY-434][BUILD] Update master to version 0.6.0-incubating-SNAPSHOT

11 months ago[LIVY-141][LIVY-175][DOCS] Update javadocs and scaladocs and include in Docs build
Alex Bozarth [Tue, 23 Jan 2018 20:21:27 +0000 (12:21 -0800)] 
[LIVY-141][LIVY-175][DOCS] Update javadocs and scaladocs and include in Docs build

[LIVY-141]( [LIVY-175](

Adding javadocs to Livy:
- Add ability to build Livy javadocs
- Update current javadoc comments to address build errors and warnings
- Add more javadoc comments to fully describe API
- Include public API javadocs and scaladocs in Livy Documentation

Noted Remaining Issues:
- Since only the public javadocs are build with the Livy Docs not all javadoc warnings in other modules have been addressed.
- There are still some warnings in the Scala API scaladocs build due to the docs not linking to an external lib for referenced scala lib classes, this does not break the build in any way.
- Scaladocs is not supported for Livy as a whole. With the update to Scala 2.11 many scaladoc warnings were upgraded to error and Livy fundamentally can't fix them.

Author: Alex Bozarth <>

Closes #38 from ajbozarth/javadoc.

12 months ago[LIVY-104][CORE] Update Livy build to Scala 2.11
Alex Bozarth [Thu, 18 Jan 2018 00:27:04 +0000 (16:27 -0800)] 
[LIVY-104][CORE] Update Livy build to Scala 2.11


Livy currently builds using Scala 2.10 which has been EOL for a couple years. This update switches the build to use 2.11 instead.
This does not drop Livy support for Scala 2.10, it only updates the version used to build Livy itself.
We are holding off updating to Scala 2.12 since Livy still supports Spark 1.6, which doesn't support 2.12 and such an update would break UTs for 1.6, any update to 2.12 will have to wait until Spark 1.6 support is dropped.

This update also addresses any new deprecation warning raised in the update as well as updates various ITs to pass.

This locally passes both UTs and ITs build withe all supported versions of Spark.

Author: Alex Bozarth <>

Closes #72 from ajbozarth/scala211.

12 months ago[LIVY-429] preserve url fragment in spark.yarn.dist.archives
Artem Plotnikov [Thu, 4 Jan 2018 02:22:40 +0000 (10:22 +0800)] 
[LIVY-429] preserve url fragment in spark.yarn.dist.archives

## What changes were proposed in this pull request?

Preserve url fragment identifier in spark.yarn.dist.archives setting when there is no schema specified. Current code truncates url fragment, as a result Spark just copies archives to job local dir without extracting it.

## How was this patch tested?

Added case to existing unit test

Author: Artem Plotnikov <>

Closes #71 from broartem/LIVY-429.

13 months ago[LIVY-19][REPL] Add SQL interpreter for Livy interactive session
jerryshao [Tue, 5 Dec 2017 01:29:57 +0000 (09:29 +0800)] 
[LIVY-19][REPL] Add SQL interpreter for Livy interactive session

## What changes were proposed in this pull request?

With the requirement to support executing SQL query in Livy interactive session. Here propose to add this new interpreter for SQL specific usage.

This interpreter will honor a new code kind "SQL", and pass query to SparkSession/SQLContext to get executed. The returned format is json format with schema included, each type is properly mapped a related json type.

## How was this patch tested?

Add new UTs and ITs.

Author: jerryshao <>

Closes #68 from jerryshao/LIVY-19.

13 months ago[LIVY-415][CORE][FOLLOWUP] Fix static object creation issue for SessionState
jerryshao [Wed, 29 Nov 2017 04:49:39 +0000 (12:49 +0800)] 
[LIVY-415][CORE][FOLLOWUP] Fix static object creation issue for SessionState

## What changes were proposed in this pull request?

In LIVY-415, we changed `SessionState` to static object instead of case class. This is OK for `SessionState`, but for `FinishedSessionState`, it requires `time` field to be set during object creation. Using static object will never reflect the actual `time` when object is created. So here propose to fix it.

CC aa8y please take a review, this is introduced in your changes.

## How was this patch tested?

Existing tests.

Author: jerryshao <>

Closes #67 from jerryshao/LIVY-415-followup.

13 months ago[LIVY-399][TEST] Enable real test for PySpark and SparkR interpreters
jerryshao [Mon, 27 Nov 2017 08:25:52 +0000 (16:25 +0800)] 
[LIVY-399][TEST] Enable real test for PySpark and SparkR interpreters

Currently because we lack pyspark and sparkr dependencies in our environment, so we neglect the pyspark and sparkr integration tests, here propose a way to enable these integration tests. The solution is mainly borrowed from Zeppelin - to download Spark binary before integration tests, so that we will have a complete Spark environment to do the test. Because of this several modules like minicluster-dependencies are not required, so here removed such modules.

Besides, we proposed to remove real test implementations, since we never used real test before and it mainly did what scripts should do with Scala code, which makes it hard to maintain. Also for now mini-cluster test is quite close to real test, so it is not so useful to still keep real test.

Author: jerryshao <>

Closes #49 from jerryshao/LIVY-399.

13 months ago[LIVY-299][REPL] Output multiple lines in one statement block
jerryshao [Fri, 24 Nov 2017 05:31:38 +0000 (13:31 +0800)] 
[LIVY-299][REPL] Output multiple lines in one statement block

## What changes were proposed in this pull request?

Livy Scala Interpreter doesn't support output multiple lines in one code block, this will miss some outputs, so here change the logic to support it.

## How was this patch tested?

Add new unit tests.

Author: jerryshao <>

Closes #66 from jerryshao/LIVY-299.

13 months ago[LIVY-416] Upgrade the version of Jackson from 2.4.4 to 2.9.2
Keiji Yoshida [Thu, 23 Nov 2017 05:19:53 +0000 (13:19 +0800)] 
[LIVY-416] Upgrade the version of Jackson from 2.4.4 to 2.9.2

## What changes were proposed in this pull request?

`com.fasterxml.jackson.core.JsonGenerationException` is sometimes thrown. The full stack trace is show on [JsonGenerationException.txt](

This is because of the Jackson's bug ( which was fixed at Jackson 2.7.7.

To fix this issue, the version of Jackson should be updated from 2.4.4 to the latest one (2.9.2).

In addition, `` was added to the dependencies because it was removed from the dependencies of `com.fasterxml.jackson.module:jackson-module-scala_{2.10,2.11}:2.9.2`.

* [com.fasterxml.jackson.module:jackson-module-scala_2.10:2.4.4](
* [com.fasterxml.jackson.module:jackson-module-scala_2.11:2.4.4](
* [com.fasterxml.jackson.module:jackson-module-scala_2.10:2.9.2](
* [com.fasterxml.jackson.module:jackson-module-scala_2.11:2.9.2](

## How was this patch tested?
By executing `mvn clean package`.

Author: Keiji Yoshida <>

Closes #64 from kjmrknsn/LIVY-416.

13 months ago[LIVY-418] Respect spark.pyspark.python for PythonInterpreter
Jeff Zhang [Thu, 23 Nov 2017 02:14:15 +0000 (10:14 +0800)] 
[LIVY-418] Respect spark.pyspark.python for PythonInterpreter

## What changes were proposed in this pull request?

`spark.pyspark.python` is introduced in spark 2.1, livy also need to update its code for choosing python version

## How was this patch tested?

Manually verified.

Author: Jeff Zhang <>

Closes #65 from zjffdu/LIVY-418.

14 months ago[LIVY-415] Use objects and abstract classes in for Kind and SessionState.
Arun Allamsetty [Wed, 15 Nov 2017 03:42:45 +0000 (11:42 +0800)] 
[LIVY-415] Use objects and abstract classes in for Kind and SessionState.

## What changes were proposed in this pull request?

- Use a singleton (object) rather than having a case class and creating an object of only one type whenever we need an object of the type. Using an object helps with code efficiency and readability.
- Use abstract classes to set up methods with default definitions to follow the DRY principles.

## How was this patch tested?

All the existing tests were modified to use the new changes. The changes were then tested on Travis with existing settings to make sure it's compatible with the the upstream repository.

Please review before opening a pull request.

I have read through the page and felt like this change does not require a JIRA. If you feel otherwise, I can create a JIRA and then attach it to the PR.

Author: Arun Allamsetty <>

Closes #62 from aa8y/singleton.

14 months ago[LIVY-412][SERVER] Reject create session request if too more sessions are creating.
沈洪 [Tue, 7 Nov 2017 08:29:32 +0000 (16:29 +0800)] 
[LIVY-412][SERVER] Reject create session request if too more sessions are creating.

## What changes were proposed in this pull request?

In our cluster, livy server run with spark yarn cluster mode, when createSession request is too frequently, livyServer will start too more spark-submit child process, it will cause the machine oom.

Reject the create session request when there are too many spark-submit child process.

## How was this patch tested?

Add two testcase, test create interactive and batch session when reach the max creating sessions, the request should failed.

Please review before opening a pull request.

Author: 沈洪 <>

Closes #58 from shenh062326/livy-412.

14 months ago[MINOR] Missed Doc update during 0.4 release
Alex Bozarth [Tue, 31 Oct 2017 18:23:27 +0000 (11:23 -0700)] 
[MINOR] Missed Doc update during 0.4 release

We missed a note in the Docs referencing a pre-apache release workaround

Author: Alex Bozarth <>

Closes #61 from ajbozarth/patch-1.

14 months ago[MINOR] Doc Typos
Alex Bozarth [Thu, 26 Oct 2017 21:30:44 +0000 (14:30 -0700)] 
[MINOR] Doc Typos

Fixed a some typos in the REST API Documentation

Author: Alex Bozarth <>

Closes #59 from ajbozarth/patch-1.

14 months ago[MINOR][HOTFIX] Fix python code style issue
jerryshao [Thu, 26 Oct 2017 03:41:34 +0000 (11:41 +0800)] 
[MINOR][HOTFIX] Fix python code style issue

## What changes were proposed in this pull request?

Travis complains "E722 do not use bare except" in python-client style check. Minor changes to fix it.

Author: jerryshao <>

Closes #60 from jerryshao/python-style-fix.

15 months ago[LIVY-245][RSC] Add support shared variables across Jobs
jerryshao [Fri, 20 Oct 2017 06:58:22 +0000 (14:58 +0800)] 
[LIVY-245][RSC] Add support shared variables across Jobs

Currently we cannot share variables across different Jobs in Livy, so here propose to add a cache layer in RSC to store shared objects. This cache followed LRU, the least not used will be removed when exceeding limits.

This work is based on alex-the-man 's work.

Author: jerryshao <>

Closes #19 from jerryshao/LIVY-245.

15 months ago[LIVY-411][REPL] Fix session cannot start issue when python or r package is missing
jerryshao [Fri, 20 Oct 2017 03:10:43 +0000 (11:10 +0800)] 
[LIVY-411][REPL] Fix session cannot start issue when python or r package is missing

## What changes were proposed in this pull request?

In Livy 0.5.0, we supported multiple languages in one session, but it requires that all the packages should be available before session creation, such as R package and Python package, otherwise session will be failed to create. However, in some cases python or R package may be missing in Spark distro, this will make Livy fail to creation interactive session.

To fix this issue, we should not force such restriction on session creation, but delay the check until related interpreter is used. If such packaging is missing, we should make the related execution failure and return user the cause of issue, but don't affect other correctly started interpreters.

## How was this patch tested?

Existing test and manually verification on local cluster.

Author: jerryshao <>

Closes #56 from jerryshao/LIVY-411.

15 months ago[LIVY-409] Livy shell UX improvements
Eric Perry [Fri, 20 Oct 2017 02:04:12 +0000 (10:04 +0800)] 
[LIVY-409] Livy shell UX improvements

I'm not sure how large of an audience the livy-shell has, but I've come to use it quite a bit in my testing/use of Livy and added a few small improvements that have made it a bit easier to use for me (and may help others):

* Replaced the use of httplib with requests to fix dropped connection issues (and a few other robustness issues).
* Added some context to the REPL prompt, by including the session `kind` and ID.
* Ignore `SIGINT` signal so that users can type `CTRL-C` to cancel out a command.

I know the use of `requests` is pretty ubiquitous but I included `livy-shell-requirements.txt` just in case 1) someone doesn't have it installed or 2) more dependencies are added down the road.

Author: Eric Perry <>

Closes #55 from ericjperry/feature/livy-shell-improvements.

15 months ago[LIVY-7] added autocompletion api and implementation for scala
Pascal Pellmont [Tue, 10 Oct 2017 00:39:00 +0000 (08:39 +0800)] 
[LIVY-7] added autocompletion api and implementation for scala

I started an implementation of the very old feature request (LIVY-7) for code autocompletion.
This implementation works with scala 2.11 and scala 2.10.

I'd be happy if somebody could review and comment it.

As for the API: I chose a synchronous call because resolving the code options shouldn't be a very long process (and if it were it wouldn't make sense anyway).

Author: Pascal Pellmont <>

Closes #51 from pellmont/master.

15 months ago[MINOR] Adding a PR Template
Alex Bozarth [Mon, 9 Oct 2017 22:18:02 +0000 (15:18 -0700)] 
[MINOR] Adding a PR Template

Added a pull request template like Spark's to help new Livy devs

Author: Alex Bozarth <>

Closes #54 from ajbozarth/pr-template.

15 months ago[LIVY-408][RSC] Update Netty version to 4.0.37.Final
jerryshao [Fri, 29 Sep 2017 02:05:58 +0000 (10:05 +0800)] 
[LIVY-408][RSC] Update Netty version to 4.0.37.Final

Netty version below 4.0.37.Final has some potential security issue (, it is fixed in this version. So propose to upgrade Netty to avoid such issue.

Author: jerryshao <>

Closes #53 from jerryshao/LIVY-408.

15 months ago[LIVY-406][LIVY-406][FOLLOWUP][SERVER] Fix UT failure in branch 0.4 and apply to...
jerryshao [Tue, 26 Sep 2017 13:07:39 +0000 (21:07 +0800)] 
[LIVY-406][LIVY-406][FOLLOWUP][SERVER] Fix UT failure in branch 0.4 and apply to Master branch for consistency

Because we changed the AppState logic in #39 , so the UT which passed in master branch will be failed in branch 0.4, here to fix this issue.

Also apply this PR to master branch for the consistency, it should also be worked in master branch.

Author: jerryshao <>

Closes #52 from jerryshao/LIVY-406-followup.

15 months ago[LIVY-406][SERVER] Fix Livy cannot app id in yarn client mode issue
jerryshao [Tue, 26 Sep 2017 05:25:11 +0000 (13:25 +0800)] 
[LIVY-406][SERVER] Fix Livy cannot app id in yarn client mode issue

In our `SparkYarnApp` logic, we have to wait for process to exit before to query app id. Since the process is never exited in yarn client mode, so it will block follow-up logic to get app id and other yarn application information.

So here propose to remove this logic, also because now we will query app id ever since app is launched, so we should increase the look-up time to avoid timeout.

Author: jerryshao <>

Closes #50 from jerryshao/LIVY-406.

16 months ago[LIVY-398][DOC] Update rest API to reflect the changes of shared context session
jerryshao [Fri, 22 Sep 2017 05:30:53 +0000 (13:30 +0800)] 
[LIVY-398][DOC] Update rest API to reflect the changes of shared context session

LIVY-194 changes the semantics of session in Livy and add supports of shared context for Livy session, so here change the docs in REST API to reflect the changes of LIVY-194.

Author: jerryshao <>

Closes #47 from jerryshao/LIVY-398.

16 months ago[LIVY-396] Livy does not map YARN app states correctly
Fathi Salmi, Meisam(mfathisalmi) [Mon, 18 Sep 2017 08:36:03 +0000 (16:36 +0800)] 
[LIVY-396] Livy does not map YARN app states correctly

Make sure that the invalid combinations of `state` and `finalStatus` do
not occur, and if they do, put the application in the `FAILED` state.


Author: Fathi Salmi, Meisam(mfathisalmi) <>

Closes #39 from meisam/LIVY-396.

Change-Id: I839ef9f617cb08463f37eff803dbb99d681f852a

16 months ago[MINOR] Update Travis Python Requests version to fix build error
jerryshao [Fri, 15 Sep 2017 06:51:26 +0000 (14:51 +0800)] 
[MINOR] Update Travis Python Requests version to fix build error

The issue is from #39 , seems like `requests` version doesn't meet, so here update `requests` version to fix it.

Author: jerryshao <>

Closes #46 from jerryshao/travis-python-fix.

Change-Id: Id4713eaa3d72a68c776181542b0f9506924b6578

16 months ago[MINOR] Disable hive in integration test
Jeff Zhang [Tue, 5 Sep 2017 22:48:50 +0000 (06:48 +0800)] 
[MINOR] Disable hive in integration test

Straightforward change to disable hive in integration test, because there's no hive related setup in integration test, (no hive-site.xml and no datanulear jars uploaded)

Author: Jeff Zhang <>

Closes #43 from zjffdu/hive.

16 months ago[LIVY-400][BUILD] Add script to handle Livy apache release process
jerryshao [Mon, 4 Sep 2017 01:30:06 +0000 (09:30 +0800)] 
[LIVY-400][BUILD] Add script to handle Livy apache release process

This PR adds script to handle Livy apache release process.

Author: jerryshao <>

Closes #42 from jerryshao/LIVY-400.

Change-Id: Id1dca5bdec85012cf997a224cd34f5e54e286ac7

16 months ago[LIVY-394][BUILD] Update Livy master to 0.5.0-incubating-SNAPSHOT
jerryshao [Fri, 1 Sep 2017 06:05:18 +0000 (14:05 +0800)] 
[LIVY-394][BUILD] Update Livy master to 0.5.0-incubating-SNAPSHOT

This PR updates Livy master branch version to 0.5.0-incubating-SNAPSHOT, also changes the Livy package name to livy-<version>

Author: jerryshao <>

Closes #40 from jerryshao/master-version-update.

Change-Id: If76e823a740e5178bb1e0efb4d39c3ba95dba9de

16 months ago[LIVY-194][REPL] Add shared language support for Livy interactive session
jerryshao [Thu, 31 Aug 2017 13:07:42 +0000 (21:07 +0800)] 
[LIVY-194][REPL] Add shared language support for Livy interactive session

This is a ongoing work. Putting it here to leverage travis to test.

In the current Livy when we create a new session we need to specify session kind, which represents the interpreter kind bound with this session. User could choose either `spark` or `pyspark` or `sparkr`, Livy internally will create a related interpreter with current session. Also in Livy each session represents a complete Spark application / SparkContext.

This brings a limitation that user can only choose one language along with its own Spark application. Furthermore, data generated by `pyspark` interpreter cannot be shared with `spark` interpreter. So to improve the usability of Livy we propose to add multiple interpreters support in one session.

Author: jerryshao <>

Closes #28 from jerryshao/LIVY-194.

Change-Id: I743871c80ccb5c16101236e052d5f31662382667

16 months ago[LIVY-393][MINOR] Update httpclient to 4.5.3
Alex Bozarth [Thu, 24 Aug 2017 06:43:42 +0000 (14:43 +0800)] 
[LIVY-393][MINOR] Update httpclient to 4.5.3

Currently the httpclient version in the root pom is 4.5.2 and in the client-http module it is 4.5.1

Now both use a common version and it's been updated to the latest version 4.5.3

Author: Alex Bozarth <>

Closes #37 from ajbozarth/hc-version.

Change-Id: I986acdb633e3b67d5b6ac164fb3c0d7191f32ce1

17 months ago[LIVY-389][BUILD][FOLLOWUP] Enable generating third-party license by profile
jerryshao [Tue, 15 Aug 2017 08:01:09 +0000 (16:01 +0800)] 
[LIVY-389][BUILD][FOLLOWUP] Enable generating third-party license by profile

Move `license-maven-plugin` to a specific profile which can only be enabled by `-Dlicense-maven-plugin` to avoid generating every time in packaging.

Author: jerryshao <>

Closes #35 from jerryshao/change-pom.

17 months ago[LIVY-389][BUILD] Add maven plugin to generate license for all the dependencies
jerryshao [Tue, 15 Aug 2017 05:40:54 +0000 (13:40 +0800)] 
[LIVY-389][BUILD] Add maven plugin to generate license for all the dependencies

This change will generate a THIRD-PARTY file with license of all dependencies in `${execution.root}` folder, and will copy it to release assembly's root dir.

lresende ajbozarth can you please review the current solution, is it OK for an Apache way.

Here is the snippet of this THIRD-PARTY file:



The Apache Livy binary distribution includes a number of subcomponents
with separate copyright notices and license terms. Your use of the
code for the these subcomponents is subject to the terms and
conditions of the following licenses.


We have listed all of these third party libraries and their licenses
below. This file can be regenerated at any time by simply running:

    mvn clean package

Third party Java libraries listed by License type.

PLEASE NOTE: Some dependencies may be listed under multiple licenses if they
are dual-licensed. This is especially true of anything listed as
"GNU General Public Library" below.


    * json4s-ast (org.json4s:json4s-ast_2.10:3.2.10 -
    * json4s-core (org.json4s:json4s-core_2.10:3.2.10 -
    * json4s-jackson (org.json4s:json4s-jackson_2.10:3.2.10 -

  Apache 2:

    * Apache Derby Database Engine and Embedded JDBC Driver (org.apache.derby:derby: -
    * JDO API (javax.jdo:jdo-api:3.0.1 -
    * JavaEWAH (com.googlecode.javaewah:JavaEWAH:0.3.2 -
    * Joda-Convert (org.joda:joda-convert:1.6 -
    * Joda-Time (joda-time:joda-time:2.3 -
    * Objenesis (org.objenesis:objenesis:1.2 -
    * RoaringBitmap (org.roaringbitmap:RoaringBitmap:0.5.11 -
    * breeze (org.scalanlp:breeze_2.10:0.11.2 -
    * breeze-macros (org.scalanlp:breeze-macros_2.10:0.11.2 -
    * chill (com.twitter:chill_2.10:0.5.0 -
    * chill-java (com.twitter:chill-java:0.5.0 -
    * metrics-scala (nl.grons:metrics-scala_2.10:3.3.0_a2.3 -
    * opencsv (net.sf.opencsv:opencsv:2.3 -
    * scala-ssh (com.decodified:scala-ssh_2.10:0.7.0 -
    * sshj (net.schmizz:sshj:0.10.0 -

  Apache 2.0 License:

    * Spark Project Bagel (org.apache.spark:spark-bagel_2.10:1.6.2 -
    * Spark Project Catalyst (org.apache.spark:spark-catalyst_2.10:1.6.2 -
    * Spark Project Core (org.apache.spark:spark-core_2.10:1.6.2 -
    * Spark Project GraphX (org.apache.spark:spark-graphx_2.10:1.6.2 -
    * Spark Project Hive (org.apache.spark:spark-hive_2.10:1.6.2 -
    * Spark Project Launcher (org.apache.spark:spark-launcher_2.10:1.6.2 -
    * Spark Project ML Library (org.apache.spark:spark-mllib_2.10:1.6.2 -
    * Spark Project Networking (org.apache.spark:spark-network-common_2.10:1.6.2 -
    * Spark Project REPL (org.apache.spark:spark-repl_2.10:1.6.2 -
    * Spark Project SQL (org.apache.spark:spark-sql_2.10:1.6.2 -
    * Spark Project Shuffle Streaming Service (org.apache.spark:spark-network-shuffle_2.10:1.6.2 -
    * Spark Project Streaming (org.apache.spark:spark-streaming_2.10:1.6.2 -
    * Spark Project Unsafe (org.apache.spark:spark-unsafe_2.10:1.6.2 -
    * Spark Project YARN (org.apache.spark:spark-yarn_2.10:1.6.2 -

  Apache License:

    * HttpClient (commons-httpclient:commons-httpclient:3.1 -
    * Tachyon Clients - Distribution (org.tachyonproject:tachyon-client:0.8.2 -
    * Tachyon Under File System - HDFS (org.tachyonproject:tachyon-underfs-hdfs:0.8.2 -
    * Tachyon Under File System - Local FS (org.tachyonproject:tachyon-underfs-local:0.8.2 -
    * Tachyon Under File System - S3 (org.tachyonproject:tachyon-underfs-s3:0.8.2 -

Author: jerryshao <>

Closes #34 from jerryshao/LIVY-389-third-party.

17 months ago[MINOR] Fix two version number issues in doc
jerryshao [Tue, 8 Aug 2017 01:44:13 +0000 (09:44 +0800)] 
[MINOR] Fix two version number issues in doc

Two super nit fix regarding to version number, "incubating" should be added in version number.

CC ajbozarth .

Author: jerryshao <>

Closes #33 from jerryshao/fix-doc-issue.

17 months ago[LIVY-389][BUILD] Change POM and packaging to meet Apache Criteria
jerryshao [Mon, 7 Aug 2017 01:05:17 +0000 (09:05 +0800)] 
[LIVY-389][BUILD] Change POM and packaging to meet Apache Criteria

Change LIvy POM and assembly xml to meet Apache Criteria:

1. Add Apache parent POM to Livy POM.
2. Add LICENSE/NOTICE/DISCLAIMER to artifact's META-INF and package folder.

CC ajbozarth lresende please help to review.

Author: jerryshao <>

Closes #32 from jerryshao/LIVY-389.

17 months ago[LIVY-384][DOCS] Added ability to build Livy Docs
Alex Bozarth [Fri, 4 Aug 2017 06:18:41 +0000 (14:18 +0800)] 
[LIVY-384][DOCS] Added ability to build Livy Docs


Included a minimized copy of the Livy website template files so we can use Jekyll to build the Livy Documentation.
I have also included a README that has instructions on how to build and deploy the Docs to the website.

Paired with apache/incubator-livy-website#7

Author: Alex Bozarth <>

Closes #26 from ajbozarth/docs.

17 months ago[MINOR] Add License header to configuration templates
Luciano Resende [Fri, 4 Aug 2017 04:08:27 +0000 (21:08 -0700)] 
[MINOR] Add License header to configuration templates

17 months ago[MINOR] Add License header to extra configuration files
Luciano Resende [Fri, 4 Aug 2017 03:50:13 +0000 (20:50 -0700)] 
[MINOR] Add License header to extra configuration files

17 months ago[MINOR] Remove extension from NOTICE file
Luciano Resende [Fri, 4 Aug 2017 03:47:41 +0000 (20:47 -0700)] 
[MINOR] Remove extension from NOTICE file

17 months ago[MINOR] Add Incubating DISCLAIMER file
Luciano Resende [Fri, 4 Aug 2017 03:44:37 +0000 (20:44 -0700)] 
[MINOR] Add Incubating DISCLAIMER file

17 months ago[LIVY-389][MINOR] Pom updates
Alex Bozarth [Fri, 4 Aug 2017 02:18:43 +0000 (10:18 +0800)] 
[LIVY-389][MINOR] Pom updates

Updated pom.xml to match other Apache and Apache Incubator projects

Author: Alex Bozarth <>

Closes #31 from ajbozarth/pom.

17 months ago[LIVY-390][BUILD] Only using JDK8 to build with Spark 2.2
jerryshao [Thu, 3 Aug 2017 03:23:28 +0000 (11:23 +0800)] 
[LIVY-390][BUILD] Only using JDK8 to build with Spark 2.2

Because Spark 2.2 removes JDK7 support but Livy still supports JDK7, so updating travis file to use JDK8 to build against Spark 2.2, whereas still using JDK7 to build with Spark 2.2-.

Author: jerryshao <>

Closes #30 from jerryshao/LIVY-390.

17 months ago[LIVY-380] Livy should overwrite spark.sql.catalogImplementation if Hive classes...
Min Shen [Thu, 3 Aug 2017 00:48:04 +0000 (08:48 +0800)] 
[LIVY-380] Livy should overwrite spark.sql.catalogImplementation if Hive classes are not present on classpath

In SparkContextInitializer.spark2CreateContext, livy checks for whether catalog implementation is "hive" or "in-memory" to properly initialize the SparkSession.
If the config is set to "hive" (this is the case if livy.repl.enable-hive-context is set to "true"), livy will further check if hive classes are present or not.
It only invokes the enableHiveSupport method of SparkSession.Builder if hive classes are found.
If not, it proceeds to initializing a SparkSession without Hive support enabled.
However, in Spark's code base, when creating SparkSession, it checks for spark.sql.catalogImplementation to determine which session state to initialize.
If spark.sql.catalogImplementation is set to "hive", it will initialize a HiveSessionState.
However, since Livy has already checked that hive classes are not present, it should not go ahead invoking SparkSession.builder.getOrCreate without overwriting spark.sql.catalogImplementation to "in-memory".

Author: Min Shen <>

Closes #24 from Victsm/master.

17 months ago[MINOR] Clean some old package name left in code and configuration file
jerryshao [Thu, 3 Aug 2017 00:46:57 +0000 (08:46 +0800)] 
[MINOR] Clean some old package name left in code and configuration file

Looks like we still left some old package name uncleaned, so search and modify them again.

Author: jerryshao <>

Closes #29 from jerryshao/clean-code.

17 months ago[LIVY-387][WEB UI] Update Log page to split apart different logs
Alex Bozarth [Wed, 2 Aug 2017 08:48:41 +0000 (16:48 +0800)] 
[LIVY-387][WEB UI] Update Log page to split apart different logs


Added javascript string parsing that finds the stdout, stderr, and YARN Diagnostics sections of the log and displays them in separate scrollable `<pre>` tags.

The `<pre>` tags are set to `max-height: 80%`, this makes scrolling down to each log easy so there is no need for an anchor link at the top of the page, also 80% allows a good sized viewing window. Each log is also set to scroll to the bottom on page load.

Manually Tested

![screen shot 2017-08-01 at 2 58 50 pm](
[more will be added tomorrow when I can use my desktop monitor for different sized screenshots, I'm currently working from my laptop]

Author: Alex Bozarth <>

Closes #27 from ajbozarth/log2.

17 months ago[LIVY-344][WEB UI] Create Session Log Page
Alex Bozarth [Tue, 1 Aug 2017 13:41:17 +0000 (21:41 +0800)] 
[LIVY-344][WEB UI] Create Session Log Page


Created a Session Log page for viewing the session log.
Updated All Sessions Page and Session Page with links to the Log Page.
Log Page exists for both Interactive Sessions and Batches.

Tested Manually, screenshots below

![screen shot 2017-07-26 at 1 30 35 pm](
![screen shot 2017-07-26 at 1 30 40 pm](
![screen shot 2017-07-26 at 1 30 44 pm](

Author: Alex Bozarth <>

Closes #25 from ajbozarth/log-ui.

17 months ago[LIVY-376][DOCS] Update README with new naming and links and move Docs into separate...
Alex Bozarth [Thu, 27 Jul 2017 03:12:19 +0000 (11:12 +0800)] 
[LIVY-376][DOCS] Update README with new naming and links and move Docs into separate files


 * The README has been updated to match our new Apache naming and links.
 * The API Documentation has been split into separate files
 * Examples have been moved to the website

This PR will be followed up with a way to build out the Docs for the website

Author: Alex Bozarth <>

Closes #21 from ajbozarth/readme.

17 months ago[MINOR] Fix some potential security leak issue
jerryshao [Thu, 27 Jul 2017 02:54:17 +0000 (10:54 +0800)] 
[MINOR] Fix some potential security leak issue

Fix two potential security leak issue based on the security code scan:

1. Add file name checking code in `RSCDriverBootstrapper`'s main method argument to avoid malicious file.
2. Avoid dumping exception stack to output.

CC yanboliang zjffdu please help to review.

Author: jerryshao <>

Closes #22 from jerryshao/security-issue.

17 months ago[LIVY-381] Bump supported Spark version to 2.2
Weiqing Yang [Wed, 26 Jul 2017 06:25:56 +0000 (14:25 +0800)] 
[LIVY-381] Bump supported Spark version to 2.2

Spark 2.2 has been released. It's better for us to update the max version supported.

Author: Weiqing Yang <>

Closes #18 from weiqingy/LIVY-381.

17 months ago[MINOR] Add LICENSE and NOTICE files
Alex Bozarth [Wed, 26 Jul 2017 01:35:59 +0000 (09:35 +0800)] 

Added Apache LICENSE and NOTICE files to the base directory of the repo.

This was split off of for commit clarity

Author: Alex Bozarth <>

Closes #23 from ajbozarth/license.

17 months ago[LIVY-348] Improve the ACLs in Livy
jerryshao [Mon, 24 Jul 2017 06:24:58 +0000 (14:24 +0800)] 
[LIVY-348] Improve the ACLs in Livy

This PR propose to improve current Livy's access control mechanism with fine-grained control:

1. If `livy.server.access-control.enabled` is disabled, which means ACLs is disabled, any user could send any request to Livy.
2. If `livy.server.access-control.enabled` is enabled, then this ACL mechanism divides users into 3 groups:
    1. view accessible users: users could get session, statement data, but cannot POST any queries.
    2. modify accessible users: users could submit new statements, kill sessions.
    3. super users: this is the same as previous, super user could impersonate any user.

    In the meanwhile, modify accessible users automatically have the view accessibility, and super user has all the permissions.

Also add new configuration `livy.server.access-control.allowed-users`, this is the same as previous `livy.server.access-control.users`, when ACLs is enabled only users in the allowed list could issue REST queries to Livy server, other users will get 403.

Please review and comment.

Author: jerryshao <>

Closes #15 from jerryshao/LIVY-348.

18 months ago[MINOR] Change Livy commit message style from LIVY-xxx. to [LIVY-xxx]
jerryshao [Fri, 21 Jul 2017 00:13:02 +0000 (17:13 -0700)] 
[MINOR] Change Livy commit message style from LIVY-xxx. to [LIVY-xxx]

According to discussion, changing the commit message style from LIVY-xxx. to [LIVY-xxx].

Author: jerryshao <>

Closes #17 from jerryshao/update-merge-script.

18 months agoLIVY-343. Web UI: Create Session Page
Alex Bozarth [Tue, 18 Jul 2017 04:21:22 +0000 (21:21 -0700)] 
LIVY-343. Web UI: Create Session Page


Created a Session Summery Page for Interactive Sessions. Batch Sessions do not have Session Summery Pages because all relevant info is displayed on the All Sessions page Batches table.

The Session Summery Page displays session info (same as in All Sessions table) at the top of the page similar to the Job or Stage Pages in Spark. Below the session info section is a statements table. The statements table contains statement information including statement output. The statement output columns account for empty, error, and data output.

Other new features and updates include:
 - Added a link to the Session Page in the Interactive Sessions table on the All Sessions Page
 - Reorganized static files into a standard directory structure
 - Added bootstrap fonts to fix jQuery DataTables Column headers
 - Added link to the Yarn driver logs to All Sessions tables
 - Updated CSS to use full page width like Spark (was causing issues with statements table)
 - Added a 404 page to the UI

Point of Discussion:
 - Should I change the column order in the Statements table? I played around with it for a while before setting on the current ordering.

Tested manually and passed Livy tests locally.


Author: Alex Bozarth <>

Closes #16 from ajbozarth/session-ui.

18 months agoLIVY-364. livy-server writes one log file when set LIVY_MAX_LOG_FILE…
davidxdh [Wed, 12 Jul 2017 16:41:20 +0000 (09:41 -0700)] 
LIVY-364. livy-server writes one log file when set LIVY_MAX_LOG_FILE…

When set LIVY_MAX_LOG_FILES to 0, livy-server renames old log file to livy-root-server.out.0 while startup. So there has one log file which is inconsistent with LIVY_MAX_LOG_FILES value 0.

Author: davidxdh <>

Closes #10 from davidxdh/dev364.