Blob Blame History Raw
%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