# 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.

Source: spark-core
Section: misc
Priority: extra
Maintainer: Bigtop <dev@bigtop.apache.org>
Build-Depends: debhelper (>= 6)
Standards-Version: 3.8.0
Homepage: http://spark.apache.org/

Package: spark-core
Architecture: all
Depends: adduser, bigtop-utils (>= 0.7), hadoop-client
Description: Lightning-Fast Cluster Computing
 Spark is a MapReduce-like cluster computing framework designed to support
 low-latency iterative jobs and interactive use from an interpreter. It is
 written in Scala, a high-level language for the JVM, and exposes a clean 
 language-integrated syntax that makes it easy to write parallel jobs. 
 Spark runs on top of the Apache Mesos cluster manager.

Package: spark-master
Architecture: all
Depends: spark-core (= ${source:Version})
Description: Server for Spark master
 Server for Spark master

Package: spark-worker
Architecture: all
Depends: spark-core (= ${source:Version})
Description: Server for Spark worker
 Server for Spark worker

Package: spark-python
Architecture: all
Depends: spark-core (= ${source:Version}), python
Description: Python client for Spark
 Includes PySpark, an interactive Python shell for Spark, and related libraries

Package: spark-history-server
Architecture: all
Depends: spark-core (= ${source:Version})
Description: History server for Apache Spark
 History server for Apache Spark

Package: spark-thriftserver
Architecture: all
Depends: spark-core (= ${source:Version})
Description: Thrift server for Spark SQL
 Thrift server for Spark SQL
