%global hadoop_version 2.2.0
%global hadoop_generation 23
%global pig_version 0.12.0
%global jetty_version 8.1.14.v20131031
%global jline_version 1
Name: hive
Version: 0.12.0
Release: 4%{?dist}
Summary: The Apache Hadoop data warehouse
License: ASL 2.0
URL: http://hive.apache.org/
Source0: https://github.com/apache/%{name}/archive/release-%{version}.tar.gz
Patch0: %{name}-general-build-mods.patch
# following patches are organized per module
Patch1: %{name}-shims-mods.patch
Patch2: %{name}-metastore-mods.patch
Patch3: %{name}-ql-mods.patch
Patch4: %{name}-service-mods.patch
Patch5: %{name}-hcatalog-mods.patch
Patch6: %{name}-model-enhancer-asm.patch
Patch7: %{name}-hwi-mods.patch
BuildRequires: activemq-core
BuildRequires: activemq-kahadb
BuildRequires: ant-contrib
BuildRequires: apache-commons-exec
BuildRequires: apache-ivy >= 2.3.0
BuildRequires: avro-mapred
BuildRequires: datanucleus-api-jdo
BuildRequires: datanucleus-rdbms
BuildRequires: fb303-devel
BuildRequires: fb303-java
BuildRequires: glassfish-servlet-api
BuildRequires: hadoop-tests
BuildRequires: ivy-local >= 3.5.0-2
BuildRequires: jackson
BuildRequires: java-devel
BuildRequires: javaewah
BuildRequires: javolution
BuildRequires: jdo-api
BuildRequires: jetty8
BuildRequires: json-lib
BuildRequires: json_simple
BuildRequires: libthrift-java
BuildRequires: maven-clean-plugin
BuildRequires: maven-install-plugin
BuildRequires: maven-local >= 3.5.0-2
BuildRequires: pig
BuildRequires: rsync
BuildRequires: jul-to-slf4j
BuildRequires: snappy-java
BuildRequires: thrift-devel
BuildRequires: xmvn >= 1.5.0
BuildRequires: zookeeper-java
BuildArch: noarch
# exclude arm due to hadoop dependencies
ExcludeArch: %{arm}
# problems with auto-requires being generated
# Bug 1075626
Requires: java >= 1:1.7.0
Requires: antlr3-tool
Requires: apache-commons-cli
Requires: apache-commons-codec
Requires: apache-commons-collections
Requires: apache-commons-compress
Requires: apache-commons-configuration
Requires: apache-commons-lang
Requires: apache-commons-logging
Requires: apache-commons-pool
Requires: avro-ipc
Requires: avro-mapred
Requires: datanucleus-api-jdo
Requires: datanucleus-rdbms
Requires: derby
Requires: fb303-java
Requires: glassfish-el-api
Requires: guava
Requires: hadoop-common
Requires: hadoop-mapreduce
Requires: hbase
Requires: jackson
Requires: javaewah
Requires: javolution
Requires: jboss-transaction-1.2-api
Requires: jdo-api
Requires: jetty8
Requires: jline1
Requires: json-lib
Requires: libthrift-java
Requires: log4j
Requires: mockito
Requires: netty3
Requires: protobuf-java
Requires: slf4j
Requires: snappy-java
Requires: zookeeper-java
%description
The Apache Hive data warehouse software facilitates querying and
managing large datasets residing in distributed storage. Apache Hive
provides a mechanism to project structure onto this data and query
the data using a SQL-like language called HiveQL.
%package hcatalog
Summary: hcatalog module for Hive
Requires: %{name}
%description hcatalog
This package contains module for the hcatalog sub-project in %{name}.
%package javadoc
Summary: Javadoc for %{name}
%description javadoc
This package contains javadoc for %{name}.
%prep
%mvn_package :hcatalog hcatalog
%setup -q -n %{name}-release-%{version}
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
%patch7 -p1
find -name "*.jar" -delete
sed -i 's/\r//' LICENSE NOTICE README.txt
# make sure build doesn't d/l ivy
sed -i "/<get.*ivy_repo_url.*ivy.jar/d" build.xml
# hcatalog setup
%pom_disable_module storage-handlers/hbase hcatalog
%pom_remove_dep org.apache.pig:pig hcatalog
%pom_add_dep org.apache.pig:pig:%{pig_version} hcatalog
%pom_add_dep org.apache.hadoop:hadoop-common:%{hadoop_version} hcatalog/core
%pom_add_dep org.apache.hadoop:hadoop-mapreduce-client-core:%{hadoop_version} hcatalog/core
%pom_add_dep org.apache.hadoop:hadoop-archives:%{hadoop_version} hcatalog/core
%pom_add_dep org.apache.hadoop:hadoop-common:%{hadoop_version} hcatalog/server-extensions
%pom_add_dep org.apache.hadoop:hadoop-common:%{hadoop_version} hcatalog/webhcat/java-client
%pom_add_dep org.apache.hadoop:hadoop-mapreduce-client-core:%{hadoop_version} hcatalog/webhcat/java-client
%pom_add_dep org.apache.hadoop:hadoop-common:%{hadoop_version} hcatalog/webhcat/svr
%pom_add_dep org.apache.hadoop:hadoop-mapreduce-client-core:%{hadoop_version} hcatalog/webhcat/svr
%pom_add_dep org.apache.hadoop:hadoop-hdfs:%{hadoop_version} hcatalog/webhcat/svr
%pom_remove_dep org.eclipse.jetty.aggregate:jetty-all-server hcatalog/webhcat/svr
%pom_add_dep org.eclipse.jetty:jetty-server:%{jetty_version} hcatalog/webhcat/svr
%pom_add_dep org.eclipse.jetty:jetty-util:%{jetty_version} hcatalog/webhcat/svr
%pom_add_dep org.eclipse.jetty:jetty-rewrite:%{jetty_version} hcatalog/webhcat/svr
# missing shebang
sed -i -e '1d;2i#!/usr/bin/env bash' bin/hive-config.sh
# omit hbase-handler and testutils due to dep issues
# hcatalog is built separately
sed -i 's/hbase-handler,testutils,hcatalog//g' build.properties
%build
ARG_BLOCK="
-Dhadoop.version=%{hadoop_version} -Dhadoop-0.%{hadoop_generation}.version=%{hadoop_version} \
-Dhadoop.mr.rev=%{hadoop_generation} -Dmvn.hadoop.profile=hadoop%{hadoop_generation} \
-Dshims.include=0.%{hadoop_generation} \
-Dbuild.profile=full -Dthrift.home=/usr \
-Djline.version=%{jline_version} \
-Djetty.version=%{jetty_version} \
"
# for javadoc encoding
export LC_ALL=en_US.UTF-8
# core modules
ant $ARG_BLOCK package
# hbase-handler
# TODO: upstream trunk patch for Hbase version 0.96 (HIVE-4388)
# but trunk patch is TOO sprawling (665k);
# will enable in a future TBD upstream release
# before building hcatalog with xmvn, we need to install
# its newly created hive deps
for module in beeline cli common contrib hwi jdbc metastore serde service shims; do
%mvn_artifact build/$module/pom.xml build/$module/%{name}-$module-%{version}.jar
xmvn install:install-file -Dfile=build/$module/%{name}-$module-%{version}.jar -DpomFile=build/$module/pom.xml
done
# ql -> hive-exec
%mvn_artifact build/ql/pom.xml build/ql/%{name}-exec-%{version}.jar
xmvn install:install-file -Dfile=build/ql/%{name}-exec-%{version}.jar -DpomFile=build/ql/pom.xml
# hcatalog
mkdir -p build/hcatalog/classes
pushd .
cd hcatalog
%mvn_build -f -s -j -- \
-Dmvn.hadoop.profile=hadoop%{hadoop_generation} -Dhadoop.version=%{hadoop_version} \
-Djetty.webhcat.version=%{jetty_version} \
-Dpig.version=%{pig_version}
# javadoc setup
for module in core hcatalog-pig-adapter server-extensions webhcat/java-client webhcat/svr; do
cp -r ${module}/target/classes/* ../build/hcatalog/classes
cp -r ${module}/src/main/java/* src/java/
done
popd
# combo javadoc this time
ant $ARG_BLOCK javadoc
%install
%mvn_install -J build/dist/docs
# hcatalog install
pushd .
cd hcatalog
# add the parent pom
install -pm 0644 pom.xml %{buildroot}%{_mavenpomdir}/JPP.%{name}-hcatalog.pom
%add_maven_depmap JPP.%{name}-hcatalog.pom -f "hcatalog"
# inconsistent module naming means we do these individually
install -pm 0644 core/target/hcatalog-core-%{version}.jar %{buildroot}%{_javadir}/%{name}/hcatalog-core.jar
install -pm 0644 core/pom.xml %{buildroot}%{_mavenpomdir}/JPP.%{name}-hcatalog-core.pom
%add_maven_depmap JPP.%{name}-hcatalog-core.pom %{name}/hcatalog-core.jar -f "hcatalog"
install -pm 0644 hcatalog-pig-adapter/target/hcatalog-pig-adapter-%{version}.jar %{buildroot}%{_javadir}/%{name}/hcatalog-pig-adapter.jar
install -pm 0644 hcatalog-pig-adapter/pom.xml %{buildroot}%{_mavenpomdir}/JPP.%{name}-hcatalog-pig-adapter.pom
%add_maven_depmap JPP.%{name}-hcatalog-pig-adapter.pom %{name}/hcatalog-pig-adapter.jar -f "hcatalog"
install -pm 0644 server-extensions/target/hcatalog-server-extensions-%{version}.jar %{buildroot}%{_javadir}/%{name}/hcatalog-server-extensions.jar
install -pm 0644 server-extensions/pom.xml %{buildroot}%{_mavenpomdir}/JPP.%{name}-hcatalog-server-extensions.pom
%add_maven_depmap JPP.%{name}-hcatalog-server-extensions.pom %{name}/hcatalog-server-extensions.jar -f "hcatalog"
install -pm 0644 webhcat/java-client/target/webhcat-java-client-%{version}.jar %{buildroot}%{_javadir}/%{name}/webhcat-java-client.jar
install -pm 0644 webhcat/java-client/pom.xml %{buildroot}%{_mavenpomdir}/JPP.%{name}-webhcat-java-client.pom
%add_maven_depmap JPP.%{name}-webhcat-java-client.pom %{name}/webhcat-java-client.jar -f "hcatalog"
install -pm 0644 webhcat/svr/target/webhcat-%{version}.jar %{buildroot}%{_javadir}/%{name}/webhcat.jar
install -pm 0644 webhcat/svr/pom.xml %{buildroot}%{_mavenpomdir}/JPP.%{name}-webhcat.pom
%add_maven_depmap JPP.%{name}-webhcat.pom %{name}/webhcat.jar -f "hcatalog"
popd
# create the root from here
install -d -m 0755 %{buildroot}%{_datadir}/%{name}
install -d -m 0755 %{buildroot}%{_datadir}/%{name}/bin
install -d -m 0755 %{buildroot}%{_datadir}/%{name}/bin/ext
install -d -m 0755 %{buildroot}%{_datadir}/%{name}/bin/ext/util
install -d -m 0755 %{buildroot}%{_datadir}/%{name}/lib
install -d -m 0755 %{buildroot}%{_datadir}/%{name}/conf
install -d -m 0755 %{buildroot}%{_sysconfdir}/%{name}
# bin
install -dm 0755 %{buildroot}%{_bindir}
for f in %{name} hive-config.sh init-hive-dfs.sh metatool schematool; do
install -p bin/${f} %{buildroot}%{_datadir}/%{name}/bin
ln -s %{_datadir}/%{name}/bin/${f} %{buildroot}%{_bindir}/${f}
done
# bin/ext/util
cp -pr bin/ext/* %{buildroot}%{_datadir}/%{name}/bin/ext
# don't have these just yet...
for f in beeline.sh hiveserver2.sh hwi.sh; do
rm %{buildroot}%{_datadir}/%{name}/bin/ext/${f}
done
# conf
for f in hive-default.xml hive-env.sh hive-exec-log4j.properties hive-log4j.properties; do
cp -p build/dist/conf/${f}.template %{buildroot}%{_datadir}/%{name}/conf/${f}
ln -s %{_datadir}/%{name}/conf/${f} %{buildroot}%{_sysconfdir}/%{name}/${f}
done
# lib
rsync -aP build/dist/lib/*.jar build/ivy/lib/hadoop0.%{hadoop_generation}.shim/*.jar \
%{buildroot}%{_datadir}/%{name}/lib
# xmvn-subst won't link JDK tools.jar
rm %{buildroot}%{_datadir}/%{name}/lib/tools-*.jar
%{_bindir}/xmvn-subst %{buildroot}%{_datadir}/%{name}/lib
# manually replace the hive jars with their links
rm %{buildroot}%{_datadir}/%{name}/lib/hive-*.jar
for m in beeline cli common contrib exec hwi jdbc metastore serde service shims; do
ln -s %{_javadir}/%{name}/%{name}-${m}.jar %{buildroot}%{_datadir}/%{name}/lib/%{name}-${m}-%{version}.jar
done
# MR needs the shims and thrift jars in it's classpath
mkdir -p -m0755 %{buildroot}/%{_datadir}/hadoop/mapreduce/lib
ln -s %{_javadir}/%{name}/%{name}-shims.jar %{buildroot}%{_datadir}/hadoop/mapreduce/lib/%{name}-shims.jar
ln -s `xmvn-resolve org.apache.thrift:libthrift` %{buildroot}%{_datadir}/hadoop/mapreduce/lib/%{name}-libthrift.jar
%check
# tests are not run due to dependency on hive hbase support
# which is currently unavailable
%files -f .mfiles
%doc LICENSE NOTICE README.txt
%{_bindir}/*
%{_datadir}/%{name}
%{_sysconfdir}/%{name}
%dir %{_javadir}/%{name}
%{_datadir}/hadoop/mapreduce/lib/%{name}-shims.jar
%{_datadir}/hadoop/mapreduce/lib/%{name}-libthrift.jar
%files hcatalog -f hcatalog/.mfiles-hcatalog
%files javadoc -f .mfiles-javadoc
%doc LICENSE NOTICE
%changelog
* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.12.0-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
* Thu Mar 20 2014 Peter MacKinnon <pmackinn@redhat.com> 0.12.0-3
- enable full build profile (almost)
* Tue Mar 18 2014 Peter MacKinnon <pmackinn@redhat.com> 0.12.0-2
- reinstate exclude arch arm because of hadoop dep
* Thu Feb 27 2014 Peter MacKinnon <pmackinn@redhat.com> 0.12.0-1
- Initial rpm
- Add bin and env scripts
- Remove ivy download
- Add missing maven plugins
- Review improvements