#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

#
# Configurations for a Livy Client, any configurations set here will override any
# livy or spark-default configurations.
#
# Before a Livy Client is able to load these configurations the folder containing
# this file must be added to the application classpath
#

#
# Configurations for Livy HTTPClient
#

# HTTP Request configurations
# How long before a request times out
# livy.client.http.connection.timeout = 10s
# How long between data packets before a request times out
# livy.client.http.connection.socket.timeout = 5m
# Whether content is compressed
# livy.client.http.content.compress.enable = true

# How long before idle connections are closed
# livy.client.http.connection.idle.timeout = 10m

# Initial interval before polling for Job results
# livy.client.http.job.initial-poll-interval = 100ms
# Maximum interval between successive polls
# livy.client.http.job.max-poll-interval = 5s

#
# Configurations for Livy RSCClient
#

# Configurations for registering a client with the rpc server
# Unique client id for connections to the rpc server
# livy.rsc.client.auth.id =
# Secret value for authenticating client connections with server
# livy.rsc.client.auth.secret =

# Timeout when stopping a rsc client
# livy.rsc.client.shutdown-timeout = 10s

# Class of the rsc driver to use
# livy.rsc.driver-class =
# The kind of rsc session. Examples: pyspark or sparkr
# livy.rsc.session.kind =

# Comma-separated list of Livy RSC jars. By default Livy will upload jars from its installation
# directory every time a session is started. By caching these files in HDFS, for example, startup
# time of sessions on YARN can be reduced.
# livy.rsc.jars =
# Location of the SparkR package for running sparkr
# livy.rsc.sparkr.package =
# Location of the PySpark package for running pyspark
# livy.rsc.pyspark.archives =

# Address for the RSC driver to connect back with it's connection info.
# livy.rsc.launcher.address =
# Port Range on which RPC will launch . Port range in inclusive of start and end port .
# livy.rsc.launcher.port.range = 10000~10010

# How long will the RSC wait for a connection for a Livy server before shutting itself down.
# livy.rsc.server.idle-timeout = 10m

# The user that should be impersonated when requesting a Livy session
# livy.rsc.proxy-user =

# Host or IP adress of the rpc server
# livy.rsc.rpc.server.address =
# How long the rsc client will wait when attempting to connect to the Livy server
# livy.rsc.server.connect.timeout = 90s

# The logging level for the rpc channel. Possible values: TRACE, DEBUG, INFO, WARN, or ERROR
# livy.rsc.channel.log.level =

# SASL configurations for authentication
# SASL mechanism used for authentication
# livy.rsc.rpc.sasl.mechanisms = DIGEST-MD5
# SASL qop used for authentication
# livy.rsc.rpc.sasl.qop =

# Time between status checks for cancelled a Job
# livy.rsc.job-cancel.trigger-interval = 100ms
# Time before a cancelled a Job is forced into a Cancelled state
# livy.rsc.job-cancel.timeout = 30s

# Number of statements kept in driver's memory
# livy.rsc.retained-statements = 100
