blob: 146326dc145770d83f3011598aed195d18ebb0a0 [file] [log] [blame]
# 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.
%define spark_name spark
%define spark_pkg_name spark%{pkg_name_suffix}
%define hadoop_pkg_name hadoop%{pkg_name_suffix}
%define etc_default %{parent_dir}/etc/default
%define usr_lib_spark %{parent_dir}/usr/lib/%{spark_name}
%define var_lib_spark %{parent_dir}/var/lib/%{spark_name}
%define etc_spark %{parent_dir}/etc/%{spark_name}
%define bin_dir %{parent_dir}/%{_bindir}
%define man_dir %{parent_dir}/%{_mandir}
%define doc_dir %{parent_dir}/%{_docdir}
# No prefix directory
%define np_var_log_spark /var/log/%{spark_name}
%define np_var_run_spark /var/run/%{spark_name}
%define np_etc_spark /etc/%{spark_name}
%define spark_services master worker history-server thriftserver
%if %{?suse_version:1}0
%define doc_spark %{doc_dir}/spark
%define alternatives_cmd update-alternatives
%else
%define doc_spark %{doc_dir}/spark-%{spark_version}
%define alternatives_cmd alternatives
%endif
# disable repacking jars
%define __os_install_post %{nil}
Name: %{spark_pkg_name}
Version: %{spark_version}
Release: %{spark_release}
Summary: Lightning-Fast Cluster Computing
URL: http://spark.apache.org/
Group: Development/Libraries
BuildArch: noarch
Buildroot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
License: ASL 2.0
Source0: %{spark_name}-%{spark_base_version}.tar.gz
Source1: do-component-build
Source2: install_%{spark_name}.sh
Source3: spark-master.svc
Source4: spark-worker.svc
Source6: init.d.tmpl
Source7: spark-history-server.svc
Source8: spark-thriftserver.svc
Source9: bigtop.bom
#BIGTOP_PATCH_FILES
Requires: bigtop-utils >= 0.7, %{hadoop_pkg_name}-client, %{hadoop_pkg_name}-yarn
Requires(preun): /sbin/service
%global initd_dir %{_sysconfdir}/init.d
%if %{?suse_version:1}0
# Required for init scripts
Requires: insserv
%global initd_dir %{_sysconfdir}/rc.d
%else
# Required for init scripts
Requires: /lib/lsb/init-functions
%global initd_dir %{_sysconfdir}/rc.d/init.d
%endif
%description
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 -n %{spark_pkg_name}-core
Summary: Spark core
Group: Development/Libraries
Requires: %{spark_pkg_name} = %{version}-%{release}
%description -n %{spark_pkg_name}-core
Spark core
%package -n %{spark_pkg_name}-master
Summary: Server for Spark master
Group: Development/Libraries
Requires: %{spark_pkg_name}-core = %{version}-%{release}
%description -n %{spark_pkg_name}-master
Server for Spark master
%package -n %{spark_pkg_name}-worker
Summary: Server for Spark worker
Group: Development/Libraries
Requires: %{spark_pkg_name}-core = %{version}-%{release}
%description -n %{spark_pkg_name}-worker
Server for Spark worker
%package -n %{spark_pkg_name}-python
Summary: Python client for Spark
Group: Development/Libraries
# BIGTOP-4073 rockylinux 8 use python2, rockylinux 9 use python3
%if 0%{?rhel} >= 8 || 0%{?openEuler}
%if 0%{?rhel} == 8
Requires: %{spark_pkg_name}-core = %{version}-%{release}, python2
%else
Requires: %{spark_pkg_name}-core = %{version}-%{release}, python3
%endif
%else
Requires: %{spark_pkg_name}-core = %{version}-%{release}, python
%endif
%description -n %{spark_pkg_name}-python
Includes PySpark, an interactive Python shell for Spark, and related libraries
%package -n %{spark_pkg_name}-history-server
Summary: History server for Apache Spark
Group: Development/Libraries
Requires: %{spark_pkg_name}-core = %{version}-%{release}
%description -n %{spark_pkg_name}-history-server
History server for Apache Spark
%package -n %{spark_pkg_name}-thriftserver
Summary: Thrift server for Spark SQL
Group: Development/Libraries
Requires: %{spark_pkg_name}-core = %{version}-%{release}
%description -n %{spark_pkg_name}-thriftserver
Thrift server for Spark SQL
%package -n %{spark_pkg_name}-datanucleus
Summary: DataNucleus libraries for Apache Spark
Group: Development/Libraries
%description -n %{spark_pkg_name}-datanucleus
DataNucleus libraries used by Spark SQL with Hive Support
%package -n %{spark_pkg_name}-external
Summary: External libraries for Apache Spark
Group: Development/Libraries
%description -n %{spark_pkg_name}-external
External libraries built for Apache Spark but not included in the main
distribution (e.g., external streaming libraries)
%package -n %{spark_pkg_name}-yarn-shuffle
Summary: Spark YARN Shuffle Service
Group: Development/Libraries
%description -n %{spark_pkg_name}-yarn-shuffle
Spark YARN Shuffle Service
%package -n %{spark_pkg_name}-sparkr
Summary: R package for Apache Spark
Group: Development/Libraries
Requires: %{spark_pkg_name}-core = %{version}-%{release}, R
%description -n %{spark_pkg_name}-sparkr
SparkR is an R package that provides a light-weight frontend to use Apache Spark from R.
%prep
%setup -n %{spark_name}-%{spark_base_version}
#BIGTOP_PATCH_COMMANDS
%build
bash $RPM_SOURCE_DIR/do-component-build
%install
%__rm -rf $RPM_BUILD_ROOT
%__install -d -m 0755 $RPM_BUILD_ROOT/%{initd_dir}/
%if 0%{?rhel} >= 8
PYSPARK_PYTHON=python2 bash $RPM_SOURCE_DIR/install_spark.sh \
--build-dir=`pwd` \
--source-dir=$RPM_SOURCE_DIR \
--prefix=$RPM_BUILD_ROOT \
--doc-dir=%{doc_spark} \
--lib-dir=%{usr_lib_spark} \
--var-dir=%{var_lib_spark} \
--bin-dir=%{bin_dir} \
--man-dir=%{man_dir} \
--etc-default=%{etc_default} \
--etc-spark=%{etc_spark}
%else
bash $RPM_SOURCE_DIR/install_spark.sh \
--build-dir=`pwd` \
--source-dir=$RPM_SOURCE_DIR \
--prefix=$RPM_BUILD_ROOT \
--doc-dir=%{doc_spark} \
--lib-dir=%{usr_lib_spark} \
--var-dir=%{var_lib_spark} \
--bin-dir=%{bin_dir} \
--man-dir=%{man_dir} \
--etc-default=%{etc_default} \
--etc-spark=%{etc_spark}
%endif
%__rm -f $RPM_BUILD_ROOT/%{usr_lib_spark}/jars/hadoop-*.jar
for service in %{spark_services}
do
# Install init script
init_file=$RPM_BUILD_ROOT/%{initd_dir}/%{spark_name}-${service}
bash $RPM_SOURCE_DIR/init.d.tmpl $RPM_SOURCE_DIR/spark-${service}.svc rpm $init_file
done
%pre
getent group spark >/dev/null || groupadd -r spark
getent passwd spark >/dev/null || useradd -c "Spark" -s /sbin/nologin -g spark -r -d %{var_lib_spark} spark 2> /dev/null || :
%post
%{alternatives_cmd} --install %{np_etc_spark}/conf %{spark_name}-conf %{etc_spark}/conf.dist 30
%preun
if [ "$1" = 0 ]; then
%{alternatives_cmd} --remove %{spark_name}-conf %{etc_spark}/conf.dist || :
fi
for service in %{spark_services}; do
/sbin/service %{spark_name}-${service} status > /dev/null 2>&1
if [ $? -eq 0 ]; then
/sbin/service %{spark_name}-${service} stop > /dev/null 2>&1
fi
done
#######################
#### FILES SECTION ####
#######################
%files
%defattr(-,root,root,755)
%config(noreplace) %{etc_spark}/conf.dist
%doc %{doc_spark}
%{usr_lib_spark}/LICENSE
%{usr_lib_spark}/NOTICE
%{usr_lib_spark}/RELEASE
%{usr_lib_spark}/bin
%exclude %{usr_lib_spark}/bin/pyspark
%{usr_lib_spark}/conf
%{usr_lib_spark}/data
%{usr_lib_spark}/examples
%{usr_lib_spark}/jars
%exclude %{usr_lib_spark}/jars/datanucleus-*.jar
%{usr_lib_spark}/licenses
%{usr_lib_spark}/sbin
%{usr_lib_spark}/work
%{usr_lib_spark}/kubernetes
%{np_etc_spark}
%attr(0755,spark,spark) %{var_lib_spark}
%attr(0755,spark,spark) %{np_var_run_spark}
%attr(0755,spark,spark) %{np_var_log_spark}
%{bin_dir}/spark-*
%{bin_dir}/find-spark-home
%exclude %{usr_lib_spark}/R
%exclude %{usr_lib_spark}/bin/sparkR
%exclude %{bin_dir}/sparkR
%files -n %{spark_pkg_name}-core
%defattr(-,root,root,755)
%{usr_lib_spark}/README.md
%files -n %{spark_pkg_name}-python
%defattr(-,root,root,755)
%attr(0755,root,root) %{bin_dir}/pyspark
%attr(0755,root,root) %{usr_lib_spark}/bin/pyspark
%{usr_lib_spark}/python
%files -n %{spark_pkg_name}-datanucleus
%defattr(-,root,root,755)
%{usr_lib_spark}/jars/datanucleus-*.jar
%{usr_lib_spark}/yarn/lib/datanucleus-*.jar
%files -n %{spark_pkg_name}-external
%defattr(-,root,root,755)
%{usr_lib_spark}/external
%files -n %{spark_pkg_name}-yarn-shuffle
%defattr(-,root,root,755)
%{usr_lib_spark}/yarn/spark-*-yarn-shuffle.jar
%{usr_lib_spark}/yarn/lib/spark-yarn-shuffle.jar
%files -n %{spark_pkg_name}-sparkr
%defattr(-,root,root,755)
%{usr_lib_spark}/R
%{usr_lib_spark}/bin/sparkR
%{bin_dir}/sparkR
%define service_macro() \
%files -n %{spark_pkg_name}-%1 \
%attr(0755,root,root)/%{initd_dir}/%{spark_name}-%1 \
%post -n %{spark_pkg_name}-%1 \
chkconfig --add %{spark_name}-%1 \
\
%preun -n %{spark_pkg_name}-%1 \
if [ $1 = 0 ] ; then \
service %{spark_name}-%1 stop > /dev/null 2>&1 \
chkconfig --del %{spark_name}-%1 \
fi \
%postun -n %{spark_pkg_name}-%1 \
if [ $1 -ge 1 ]; then \
service %{spark_name}-%1 condrestart >/dev/null 2>&1 \
fi
%service_macro master
%service_macro worker
%service_macro history-server
%service_macro thriftserver