[
  {
    "group": "livy",
    "name": "spark",
    "className": "org.apache.zeppelin.livy.LivySparkInterpreter",
    "defaultInterpreter": true,
    "properties": {
      "zeppelin.livy.url": {
        "envName": "ZEPPELIN_LIVY_HOST_URL",
        "propertyName": "zeppelin.livy.url",
        "defaultValue": "http://localhost:8998",
        "description": "The URL for Livy Server.",
        "type": "url"
      },
      "zeppelin.livy.session.create_timeout": {
        "envName": "ZEPPELIN_LIVY_SESSION_CREATE_TIMEOUT",
        "propertyName": "zeppelin.livy.session.create_timeout",
        "defaultValue": "120",
        "description": "Livy Server create session timeout (seconds).",
        "type": "number"
      },
      "livy.spark.driver.cores": {
        "propertyName": "livy.spark.driver.cores",
        "defaultValue": "",
        "description": "Driver cores. ex) 1, 2",
        "type": "number"
      },
      "livy.spark.driver.memory": {
        "propertyName": "livy.spark.driver.memory",
        "defaultValue": "",
        "description": "Driver memory. ex) 512m, 32g",
        "type": "string"
      },
      "livy.spark.executor.instances": {
        "propertyName": "livy.spark.executor.instances",
        "defaultValue": "",
        "description": "Executor instances. ex) 1, 4",
        "type": "number"
      },
      "livy.spark.executor.cores": {
        "propertyName": "livy.spark.executor.cores",
        "defaultValue": "",
        "description": "Num cores per executor. ex) 1, 4",
        "type": "number"
      },
      "livy.spark.executor.memory": {
        "propertyName": "livy.spark.executor.memory",
        "defaultValue": "",
        "description": "Executor memory per worker instance. ex) 512m, 32g",
        "type": "string"
      },
      "livy.spark.dynamicAllocation.enabled": {
        "propertyName": "livy.spark.dynamicAllocation.enabled",
        "defaultValue": false,
        "description": "Use dynamic resource allocation",
        "type": "checkbox"
      },
      "livy.spark.dynamicAllocation.cachedExecutorIdleTimeout": {
        "propertyName": "livy.spark.dynamicAllocation.cachedExecutorIdleTimeout",
        "defaultValue": "",
        "description": "Remove an executor which has cached data blocks",
        "type": "string"
      },
      "livy.spark.dynamicAllocation.minExecutors": {
        "propertyName": "livy.spark.dynamicAllocation.minExecutors",
        "defaultValue": "",
        "description": "Lower bound for the number of executors if dynamic allocation is enabled.",
        "type": "number"
      },
      "livy.spark.dynamicAllocation.initialExecutors": {
        "propertyName": "livy.spark.dynamicAllocation.initialExecutors",
        "defaultValue": "",
        "description": "Initial number of executors to run if dynamic allocation is enabled.",
        "type": "number"
      },
      "livy.spark.dynamicAllocation.maxExecutors": {
        "propertyName": "livy.spark.dynamicAllocation.maxExecutors",
        "defaultValue": "",
        "description": "Upper bound for the number of executors if dynamic allocation is enabled.",
        "type": "number"
      },
      "zeppelin.livy.principal": {
        "propertyName": "zeppelin.livy.principal",
        "defaultValue": "",
        "description": "Kerberos principal to authenticate livy",
        "type": "string"
      },
      "zeppelin.livy.keytab": {
        "propertyName": "zeppelin.livy.keytab",
        "defaultValue": "",
        "description": "Kerberos keytab to authenticate livy",
        "type": "textarea"
      },
      "zeppelin.livy.pull_status.interval.millis": {
        "propertyName": "zeppelin.livy.pull_status.interval.millis",
        "defaultValue": "1000",
        "description": "The interval for checking paragraph execution status",
        "type": "number"
      },
      "zeppelin.livy.maxLogLines": {
        "propertyName": "zeppelin.livy.maxLogLines",
        "defaultValue": "1000",
        "description": "Max number of lines of logs",
        "type": "number"
      },
      "livy.spark.jars.packages": {
        "propertyName": "livy.spark.jars.packages",
        "defaultValue": "",
        "description": "Adding extra libraries to livy interpreter",
        "type": "textarea"
      },
      "zeppelin.livy.displayAppInfo": {
        "propertyName": "zeppelin.livy.displayAppInfo",
        "defaultValue": true,
        "description": "Whether display app info",
        "type": "checkbox"
      },
      "zeppelin.livy.restart_dead_session": {
        "propertyName": "zeppelin.livy.restart_dead_session",
        "defaultValue": false,
        "description": "Whether restart a dead session",
        "type": "checkbox"
      }
    },
    "option": {
      "remote": true,
      "port": -1,
      "perNote": "shared",
      "perUser": "scoped",
      "isExistingProcess": false,
      "setPermission": false,
      "users": []
    },
    "editor": {
      "language": "scala",
      "editOnDblClick": false,
      "completionKey": "TAB",
      "completionSupport": true
    }
  },
  {
    "group": "livy",
    "name": "sql",
    "className": "org.apache.zeppelin.livy.LivySparkSQLInterpreter",
    "properties": {
      "zeppelin.livy.spark.sql.maxResult": {
        "envName": "ZEPPELIN_LIVY_MAXRESULT",
        "propertyName": "zeppelin.livy.spark.sql.maxResult",
        "defaultValue": "1000",
        "description": "Max number of Spark SQL result to display.",
        "type": "number"
      },
      "zeppelin.livy.spark.sql.field.truncate": {
        "propertyName": "zeppelin.livy.spark.sql.field.truncate",
        "defaultValue": true,
        "description": "If true, truncate field values longer than 20 characters.",
        "type": "checkbox"
      },
      "zeppelin.livy.concurrentSQL": {
        "propertyName": "zeppelin.livy.concurrentSQL",
        "defaultValue": false,
        "description": "Execute multiple SQL concurrently if set true.",
        "type": "checkbox"
      },
      "zeppelin.livy.tableWithUTFCharacter": {
        "propertyName": "zeppelin.livy.tableWithUTFCharacter",
        "defaultValue": false,
        "description": "If database contains UTF characters then set this as true.",
        "type": "checkbox"
      }
    },
    "option": {
      "remote": true,
      "port": -1,
      "perNote": "shared",
      "perUser": "scoped",
      "isExistingProcess": false,
      "setPermission": false,
      "users": []
    },
    "editor": {
      "language": "sql",
      "editOnDblClick": false,
      "completionKey": "TAB",
      "completionSupport": true
    }
  },
  {
    "group": "livy",
    "name": "pyspark",
    "className": "org.apache.zeppelin.livy.LivyPySparkInterpreter",
    "properties": {
    },
    "option": {
      "remote": true,
      "port": -1,
      "perNote": "shared",
      "perUser": "scoped",
      "isExistingProcess": false,
      "setPermission": false,
      "users": []
    },
    "editor": {
      "language": "python",
      "editOnDblClick": false,
      "completionKey": "TAB",
      "completionSupport": true
    }
  },
  {
    "group": "livy",
    "name": "pyspark3",
    "className": "org.apache.zeppelin.livy.LivyPySpark3Interpreter",
    "properties": {
    },
    "option": {
      "remote": true,
      "port": -1,
      "perNote": "shared",
      "perUser": "scoped",
      "isExistingProcess": false,
      "setPermission": false,
      "users": []
    },
    "editor": {
      "language": "python",
      "editOnDblClick": false,
      "completionKey": "TAB",
      "completionSupport": true
    }
  },
  {
    "group": "livy",
    "name": "sparkr",
    "className": "org.apache.zeppelin.livy.LivySparkRInterpreter",
    "properties": {
    },
    "option": {
      "remote": true,
      "port": -1,
      "perNote": "shared",
      "perUser": "scoped",
      "isExistingProcess": false,
      "setPermission": false,
      "users": []
    },
    "editor": {
      "language": "r",
      "editOnDblClick": false,
      "completionKey": "TAB",
      "completionSupport": true
    }
  },
  {
    "group": "livy",
    "name": "shared",
    "className": "org.apache.zeppelin.livy.LivySharedInterpreter",
    "properties": {
    },
    "option": {
      "remote": true,
      "port": -1,
      "perNote": "shared",
      "perUser": "scoped",
      "isExistingProcess": false,
      "setPermission": false,
      "users": []
    }
  }
]
