hlivy

Client library for the Apache Livy REST API -- see README.md


Keywords
library, mit, Propose Tags , Network.Livy, Network.Livy.Client.Batch, Network.Livy.Client.Batch.CreateBatch, Network.Livy.Client.Batch.GetBatch, Network.Livy.Client.Batch.GetBatchLogs, Network.Livy.Client.Batch.GetBatchState, Network.Livy.Client.Batch.GetBatches, Network.Livy.Client.Batch.KillBatch, Network.Livy.Client.Interactive, Network.Livy.Client.Interactive.CancelStatement, Network.Livy.Client.Interactive.CreateSession, Network.Livy.Client.Interactive.GetSession, Network.Livy.Client.Interactive.GetSessionLogs, Network.Livy.Client.Interactive.GetSessionState, Network.Livy.Client.Interactive.GetSessionStatement, Network.Livy.Client.Interactive.GetSessionStatements, Network.Livy.Client.Interactive.GetSessions, Network.Livy.Client.Interactive.KillSession, Network.Livy.Client.Interactive.RunStatement, Network.Livy.Client.Interactive.RunStatementCompletion, Network.Livy.Client.Internal.JSON, Network.Livy.Client.Types.Batch, Network.Livy.Client.Types.Session, Network.Livy.Client.Types.Statement, Network.Livy.Env, Network.Livy.Internal.Text, Network.Livy.Monad, Network.Livy.Request, Network.Livy.Response, Network.Livy.Types, Apache Livy, examples
License
MIT
Install
cabal install hlivy

Documentation

hlivy

Description

hlivy is a Haskell library that provides bindings to the Apache Livy REST API, which enables one to easily launch Spark applications -- either in an interactive or batch fashion -- via HTTP requests to the Livy server running on the master node of a Spark cluster.

Usage

Start with

import Network.Livy

which brings all functionality into scope. In particular, this exposes a monad Livy that has all the capabilites required to run Livy actions with runLivy. Generally, the format of a Livy action follows the pattern

send $ basicRequestObject requiredArg1 requiredArg2
     & requestLens1 ?~ optionalArg1
     & requestLens2 ?~ optionalArg2

This action is ran simply:

let req = basicRequestObject requiredArg1 requiredArg2
        & requestLens1 ?~ optionalArg1
        & requestLens2 ?~ optionalArg2
resp <- runLivy env $ send req

where env is a suitable environment. Concretely, if one wanted to create an interactive session, one would do something like this:

=> import Network.Livy=> -- Create a default environment=> env <- newEnv "localhost" 8998=> resp <- runLivy env $ send createSession

The response body, in this case a CreateSessionResponse, should contain the the Session just created.

With this Session at hand, one can run "statements" -- snippets of Spark Scala, PySpark, SparkR, or SparkSQL -- in the given session.

=> req = runStatement (SessionId 0) "val x = 1 + 1; println(x)" SparkSession=> resp <- runLivy env $ send req

This response object, in this case a RunStatementResponse, contains the information needed to check on the status of the statement or retrieve results if available.

Batch actions are organized in the Network.Livy.Client.Batch module, and are used similarly:

=> import Control.Lens=> -- Application JAR in HDFS=> req = createBatch "/user/hadoop/my-app.jar"=> resp <- runLivy env (send req & cbClassName ?~ "com.company.my_app" ?~ cbExecutorCores ?~ 4)

See examples for more example use.