You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@training.apache.org by la...@apache.org on 2020/06/30 18:39:17 UTC

[incubator-training] branch master updated: Add Apache Hive Slides (#66)

This is an automated email from the ASF dual-hosted git repository.

larsfrancke pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-training.git


The following commit(s) were added to refs/heads/master by this push:
     new 9ae0a75  Add Apache Hive Slides (#66)
9ae0a75 is described below

commit 9ae0a7563aed3d5cc0a9a2bd94bb6a7c49333b6b
Author: Gautam Gupta <gr...@gmail.com>
AuthorDate: Tue Jun 30 11:39:07 2020 -0700

    Add Apache Hive Slides (#66)
    
    This closes TRAINING-28
---
 content/ApacheHive/.DS_Store                       | Bin 0 -> 6148 bytes
 content/ApacheHive/README.md                       |  66 ++++
 content/ApacheHive/install-deps-centos.sh          |  61 ++++
 content/ApacheHive/install-deps-mac.sh             |  52 +++
 content/ApacheHive/pom.xml                         | 236 ++++++++++++++
 content/ApacheHive/src/main/asciidoc/index.adoc    | 129 ++++++++
 .../src/main/resources/images/logo-apache.png      | Bin 0 -> 16185 bytes
 content/ApacheHive/src/main/theme/apache.css       | 349 +++++++++++++++++++++
 8 files changed, 893 insertions(+)

diff --git a/content/ApacheHive/.DS_Store b/content/ApacheHive/.DS_Store
new file mode 100644
index 0000000..638b0d7
Binary files /dev/null and b/content/ApacheHive/.DS_Store differ
diff --git a/content/ApacheHive/README.md b/content/ApacheHive/README.md
new file mode 100644
index 0000000..1845bc1
--- /dev/null
+++ b/content/ApacheHive/README.md
@@ -0,0 +1,66 @@
+<!--
+
+  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.
+
+-->
+
+# Presentation with Reveal.JS and AsciiDoctor
+
+Remarks:
+- Currently it seems as if the system can't detect the 'docinfo' files, so we have to replace the `document.html.slim` file from `asciidoctor-reveal.js` with an updated one, that adds some additional js and css references. This template is located in `libs/docinfo-hack`.
+- In order to use the preview of the IntelliJ asciidoctor plugin, you need to set an attribute in the plugin settings: `imagesdir` = `../resources/images`
+- Even if it is possible to run the presentation directly from the `generated-slides` directory, some JavaScript extensions don't work in this case. Therefore it is required to run the presentation from a local webserver. 
+- In order to generate the diagrams, GraphVIS needs to be installed locally. Get it from: http://www.graphviz.org/
+- The template is adjusted to use the codecentric font `Panton`, so be sure to have that installed on your presentation machine.
+- Any css adjustments can go to `src/main/theme/cc.css` as this is automatically embedded into the themes directory.
+
+## Building the presentation
+
+By running the following command, you can generate the presentation:
+
+    mvn clean package
+   
+## Running the presentation
+
+In order to start a local web server serving the presentation, execute the following command:
+
+    mvn jetty:run-exploded
+    
+As soon as that's done, just point your browser to:
+
+    http://localhost:8080/
+
+## Generating PDF versions
+
+In order to generate a PDF version of the presentation just add `?print-pdf` to the url. (Keep in mind, that you have to add it before any `#blahblah`)
+
+The following link should do the trick:
+
+    http://localhost:8080/?print-pdf
+    
+As soon as that's loaded, just use the normal `print` functionality of the browser and `print as PDF`.
+
+## Installing third party software:
+
+### Mermaid
+
+    npm install mermaid.cli
+    
+This will install mermaid under `node_modules/.bin/mmdc`.
+
+### PhantomJS
+
+https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-macosx.zip
diff --git a/content/ApacheHive/install-deps-centos.sh b/content/ApacheHive/install-deps-centos.sh
new file mode 100644
index 0000000..31f0323
--- /dev/null
+++ b/content/ApacheHive/install-deps-centos.sh
@@ -0,0 +1,61 @@
+#!/usr/bin/env bash
+# ----------------------------------------------------------------------------
+# 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.
+# ----------------------------------------------------------------------------
+
+
+############# install necessary packages
+yum install -y git graphviz maven nodejs wget bzip2 python36 python36-pip pygobject3 cargo
+
+#############
+python3 -m pip install --upgrade pip setuptools seqdiag blockdiag actdiag nwdiag convert syntrax racks opc-diag
+npm install vega pango
+
+############# install stack
+wget -qO- https://get.haskellstack.org/ | sh
+
+############# install PhantomJS
+wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
+bunzip2 phantomjs-2.1.1-linux-x86_64.tar.bz2
+tar -xvf phantomjs-2.1.1-linux-x86_64.tar
+
+############# install ERD
+cd libs
+mkdir third-party
+cd third-party
+git clone https://github.com/BurntSushi/erd.git
+cd erd
+stack install
+read -p "Add stack ($HOME/.local/bin) to PATH ($PATH) ? (y/n)" -n 1 -r YES_NO
+if [ $YES_NO  = "y" ]; then
+   echo 'export PATH=$PATH:$HOME/.local/bin' >> ~/.bash_profile
+   . ~/.bash_profile
+fi
+
+############# install SVGBob
+cargo install svgbob_cli
+read -p "Add cargo ($HOME/.cargo/bin) to PATH ($PATH) ? (y/n)" -n 1 -r YES_NO
+if [ $YES_NO  = "y" ]; then
+   echo 'export PATH=$PATH:$HOME/.cargo/bin' >> ~/.bash_profile
+   . ~/.bash_profile
+fi
+
+############# 
+cd ../../..
+mvn jetty:run-exploded
+
diff --git a/content/ApacheHive/install-deps-mac.sh b/content/ApacheHive/install-deps-mac.sh
new file mode 100644
index 0000000..0e4839b
--- /dev/null
+++ b/content/ApacheHive/install-deps-mac.sh
@@ -0,0 +1,52 @@
+#!/usr/bin/env bash
+# ----------------------------------------------------------------------------
+# 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.
+# ----------------------------------------------------------------------------
+
+cd libs
+mkdir third-party
+cd third-party
+
+# Install ERD
+git clone git://github.com/BurntSushi/erd
+cd erd
+stack init
+stack build --system-ghc
+cd ..
+
+# Install Mermaid
+npm install mermaid.cli
+
+# Install PhantomJS
+wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-macosx.zip
+unzip phantomjs-2.1.1-macosx.zip
+
+# SVGBob
+cargo install svgbob_cli --path ./svgbob
+
+# Syntrax
+pip install --upgrade syntrax
+pip install pycairo
+brew install pygobject3
+
+# Vega
+npm install vega
+
+# ImageMagic
+#wget https://imagemagick.org/download/binaries/ImageMagick-x86_64-apple-darwin17.7.0.tar.gz
+#tar xvzf ImageMagick-x86_64-apple-darwin17.7.0.tar.gz
diff --git a/content/ApacheHive/pom.xml b/content/ApacheHive/pom.xml
new file mode 100644
index 0000000..156f12c
--- /dev/null
+++ b/content/ApacheHive/pom.xml
@@ -0,0 +1,236 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+  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.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache</groupId>
+        <artifactId>apache</artifactId>
+        <version>21</version>
+    </parent>
+
+    <groupId>org.apache.training</groupId>
+    <artifactId>apache-hive</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+    <packaging>war</packaging>
+
+    <name>Apache Hive Slides</name>
+    <description></description>
+
+    <properties>
+        <project.slides.directory>${project.build.directory}/generated-slides</project.slides.directory>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <asciidoctor.maven.plugin.version>2.0.0-RC.1</asciidoctor.maven.plugin.version>
+        <asciidoctorj.version>2.0.0-RC.2</asciidoctorj.version>
+        <revealjs.version>3.7.0</revealjs.version>
+        <asciidoctor-revealjs.version>2.0.0</asciidoctor-revealjs.version>
+        <maven-resources-plugin.version>3.1.0</maven-resources-plugin.version>
+    </properties>
+
+    <build>
+        <plugins>
+            <!-- Check if all source files have the required apache license headers -->
+            <plugin>
+                <groupId>org.apache.rat</groupId>
+                <artifactId>apache-rat-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>license-check</id>
+                        <phase>verify</phase>
+                        <goals>
+                            <goal>check</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <plugin>
+                <groupId>com.googlecode.maven-download-plugin</groupId>
+                <artifactId>download-maven-plugin</artifactId>
+                <version>1.4.1</version>
+                <executions>
+                    <execution>
+                        <id>install-asciidoctor-revealjs</id>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>wget</goal>
+                        </goals>
+                        <configuration>
+                            <url>https://github.com/asciidoctor/asciidoctor-reveal.js/archive/v${asciidoctor-revealjs.version}.zip</url>
+                            <unpack>true</unpack>
+                            <outputFileName>asciidoctor-reveal.js-${asciidoctor-revealjs.version}.zip</outputFileName>
+                            <outputDirectory>${project.build.directory}</outputDirectory>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>install-revealjs</id>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>wget</goal>
+                        </goals>
+                        <configuration>
+                            <url>https://github.com/hakimel/reveal.js/archive/${revealjs.version}.zip</url>
+                            <unpack>true</unpack>
+                            <outputFileName>reveal.js-${revealjs.version}.zip</outputFileName>
+                            <outputDirectory>${project.slides.directory}</outputDirectory>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>download-c3-css</id>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>wget</goal>
+                        </goals>
+                        <configuration>
+                            <url>https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.css</url>
+                            <outputDirectory>${project.slides.directory}/css</outputDirectory>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>download-c3-js</id>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>wget</goal>
+                        </goals>
+                        <configuration>
+                            <url>https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.js</url>
+                            <outputDirectory>${project.slides.directory}/js</outputDirectory>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>download-d3-js</id>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>wget</goal>
+                        </goals>
+                        <configuration>
+                            <url>https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js</url>
+                            <outputDirectory>${project.slides.directory}/js</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.asciidoctor</groupId>
+                <artifactId>asciidoctor-maven-plugin</artifactId>
+                <version>${asciidoctor.maven.plugin.version}</version>
+                <configuration>
+                    <!-- Tell asciidoctor to use the reveal.js backend and not the default html -->
+                    <backend>revealjs</backend>
+                    <!-- Configure where are all the asciidoc source files located -->
+                    <sourceDirectory>src/main/asciidoc</sourceDirectory>
+                    <!-- Configure the target director to where will the output be generated -->
+                    <outputDirectory>${project.slides.directory}</outputDirectory>
+                    <attributes>
+                        <icons>font</icons>
+                    </attributes>
+                    <!-- output file-->
+                    <outputFile>index.html</outputFile>
+                    <!-- This has to point to the asciidoctor-revealjs directory which contains all the "slim" files -->
+                    <templateDir>${project.build.directory}/asciidoctor-reveal.js-${asciidoctor-revealjs.version}/templates</templateDir>
+                    <attributes>
+                        <!--
+                            Tell the system the relative path to the reveal.js files
+                            inside the generated-slides directory.
+                        -->
+                        <revealjsdir>reveal.js-${revealjs.version}</revealjsdir>
+                        <!--
+                            Use our custom theme, which is defined by src/main/theme/apache.css
+                            and copied inside the reveal.js installation by the resources plugin a few lines
+                            up inside this pom.
+                        -->
+                        <revealjs_theme>apache</revealjs_theme>
+                    </attributes>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>generate-slides</id>
+                        <phase>process-resources</phase>
+                        <goals>
+                            <goal>process-asciidoc</goal>
+                        </goals>
+
+                    </execution>
+                </executions>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.asciidoctor</groupId>
+                        <artifactId>asciidoctorj</artifactId>
+                        <version>${asciidoctorj.version}</version>
+                    </dependency>
+                </dependencies>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-resources-plugin</artifactId>
+                <version>${maven-resources-plugin.version}</version>
+                <executions>
+                    <execution>
+                        <id>copy-resources</id>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.build.directory}</outputDirectory>
+                            <resources>
+                                <!-- Copy the normal resources into the root of the slides directory -->
+                                <resource>
+                                    <directory>src/main/resources</directory>
+                                    <targetPath>${project.slides.directory}</targetPath>
+                                </resource>
+                                <!-- Copy our css-theme to the reveal.js theme directory -->
+                                <resource>
+                                    <directory>src/main/theme</directory>
+                                    <filtering>true</filtering>
+                                    <targetPath>${project.slides.directory}/reveal.js-${revealjs.version}/css/theme</targetPath>
+                                </resource>
+                            </resources>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-war-plugin</artifactId>
+                <version>3.2.2</version>
+                <configuration>
+                    <failOnMissingWebXml>false</failOnMissingWebXml>
+                    <warSourceDirectory>${project.slides.directory}</warSourceDirectory>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.eclipse.jetty</groupId>
+                <artifactId>jetty-maven-plugin</artifactId>
+                <version>9.4.14.v20181114</version>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.8.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/content/ApacheHive/src/main/asciidoc/index.adoc b/content/ApacheHive/src/main/asciidoc/index.adoc
new file mode 100644
index 0000000..0b79d84
--- /dev/null
+++ b/content/ApacheHive/src/main/asciidoc/index.adoc
@@ -0,0 +1,129 @@
+////
+
+  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.
+
+////
+:revealjs_progress: true
+:revealjs_slidenumber: true
+:sourcedir: ../java
+
+== What is Apache Hive?
+The Apache Hive ™ data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage using SQL.
+It helps in projecting structure on data already present in a storage.
+
+== Data Types supported in Apache Hive
+Apache Hive supports following data types:
+
+* *Numeric Types*: TINYINT, SMALLINT, INT, BIGINT, FLOAT
+* *Date/Time Types*: TIMESTAMP, DATE, INTERVAL
+* *String Types*: STRING, VARCHAR, CHAR
+* *Misc Types*: BOOLEAN, BINARY
+* *Complex Types*: arrays, maps, structs, union
+
+== Numeric Types in Apache Hive
+Numeric Types in Apache Hive are:
+
+* *TINYINT*: (1-byte signed integer, from -128 to 127)
+* *SMALLINT*: (2-byte signed integer, from -32,768 to 32,767)
+* *INT/INTEGER*: (4-byte signed integer, from -2,147,483,648 to 2,147,483,647)
+* *BIGINT*: (8-byte signed integer, from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807)
+
+
+== Float Types in Apache Hive
+Float Types in Apache Hive are:
+
+* *FLOAT* (4-byte single precision floating point number)
+* *DOUBLE* (8-byte double precision floating point number)
+* *DOUBLE PRECISION* (alias for DOUBLE, only available starting with Hive 2.2.0)
+* *DECIMAL* Introduced in Hive 0.11.0 with a precision of 38 digits
+* *NUMERIC* (same as DECIMAL, starting with Hive 3.0.0)
+
+== Date/Time Types in Apache Hive
+Date/Time Types in Apache Hive are:
+
+* *TIMESTAMP*: Only available starting with Hive 0.8.0
+* *DATE*: Only available starting with Hive 0.12.0
+* *INTERVAL*: Only available starting with Hive 1.2.0
+
+== String Types in Apache Hive
+String Types in Apache Hive are:
+
+* *STRING*
+* *VARCHAR*: Only available starting with Hive 0.12.0
+* *CHAR*: Only available starting with Hive 0.13.0
+
+== Misc Types in Apache Hive
+Misc Types in Apache Hive are:
+
+* *BOOLEAN*
+* *BINARY*: Only available starting with Hive 0.8.0
+
+== Complex Types in Apache Hive
+Complex Types in Apache Hive are:
+
+* *arrays*: ARRAY<data_type> (Note: negative values and non-constant expressions are allowed as of Hive 0.14.)
+* *maps*: MAP<primitive_type, data_type> (Note: negative values and non-constant expressions are allowed as of Hive 0.14.)
+* *structs*: STRUCT<col_name : data_type [COMMENT col_comment], ...>
+* *union*: UNIONTYPE<data_type, data_type, ...> (Note: Only available starting with Hive 0.7.0.)
+
+== Hive Data Definition Language (DDL) Statements
+HiveQL DDL statements are as follows:
+
+* CREATE DATABASE/SCHEMA, TABLE, VIEW, FUNCTION, INDEX
+* DROP DATABASE/SCHEMA, TABLE, VIEW, INDEX
+* TRUNCATE TABLE
+* ALTER DATABASE/SCHEMA, TABLE, VIEW
+
+== Hive Data Definition Language (DDL) Statements contd.
+HiveQL DDL statements are as follows:
+
+* MSCK REPAIR TABLE (or ALTER TABLE RECOVER PARTITIONS)
+* SHOW DATABASES/SCHEMAS, TABLES, TBLPROPERTIES, VIEWS, PARTITIONS, FUNCTIONS, INDEX[ES], COLUMNS, CREATE TABLE
+* DESCRIBE DATABASE/SCHEMA, table_name, view_name, materialized_view_name
+
+== Hive Data Manipulation Language (DML)
+Hive supports following DML statements:
+
+* LOAD
+* INSERT
+* UPDATE
+* DELETE
+* MERGE
+
+== Hive Data Retrieval
+A SELECT statement can be part of a union query or a subquery of another query.
+
+* table_reference indicates the input to the query.
+* It can be a regular table, a view, a join construct or a subquery.
+* Table names and column names are case insensitive.
+
+== Hive SELECT query options
+Hive supports following in SELECT query:
+
+* GROUP BY
+* SORT/ORDER/CLUSTER/DISTRIBUTE BY
+* JOIN
+* UNION
+* TABLESAMPLE
+* Subqueries
+* Virtual Columns
+
+== Further Sources
+Refer official documents on Apache Hive here:
+
+* *Hive Documentation*: https://hive.apache.org
+* *Language Manual*: https://cwiki.apache.org/confluence/display/Hive/LanguageManual
+
diff --git a/content/ApacheHive/src/main/resources/images/logo-apache.png b/content/ApacheHive/src/main/resources/images/logo-apache.png
new file mode 100644
index 0000000..44c337b
Binary files /dev/null and b/content/ApacheHive/src/main/resources/images/logo-apache.png differ
diff --git a/content/ApacheHive/src/main/theme/apache.css b/content/ApacheHive/src/main/theme/apache.css
new file mode 100644
index 0000000..079a53f
--- /dev/null
+++ b/content/ApacheHive/src/main/theme/apache.css
@@ -0,0 +1,349 @@
+/*
+  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.
+*/
+
+section.has-light-background, section.has-light-background h1, section.has-light-background h2, section.has-light-background h3, section.has-light-background h4, section.has-light-background h5, section.has-light-background h6 {
+  color: #fff; }
+
+/*********************************************
+ * GLOBAL STYLES
+ *********************************************/
+body {
+  background-image: url("../../../images/background.jpg");
+  background-repeat: no-repeat;
+  background-size: cover;
+  background-color: #fff; }
+
+.reveal {
+  font-family: Panton-Regular, Helvetica, sans-serif;
+  font-size: 34px;
+  font-weight: normal;
+  color: #000; }
+
+::selection {
+  color: #000;
+  background: #bee4fd;
+  text-shadow: none; }
+
+.reveal .slides > section, .reveal .slides > section > section {
+  line-height: 1.3;
+  font-weight: inherit; }
+
+/*********************************************
+ * HEADERS
+ *********************************************/
+.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {
+  margin: 0 0 20px 0;
+  color: #000;
+  font-family: Panton-Regular, Helvetica, sans-serif;
+  font-weight: 600;
+  line-height: 1.2;
+  letter-spacing: normal;
+  text-transform: uppercase;
+  text-shadow: none;
+  word-wrap: break-word; }
+
+.reveal h1 {
+  font-size: 2.5em; }
+
+.reveal h2 {
+  font-size: 1.6em; }
+
+.reveal h3 {
+  font-size: 1.3em; }
+
+.reveal h4 {
+  font-size: 1em; }
+
+.reveal h1 {
+  text-shadow: none; }
+
+/*********************************************
+ * OTHER
+ *********************************************/
+.reveal p {
+  margin: 20px 0;
+  line-height: 1.3; }
+
+/* Ensure certain elements are never larger than the slide itself */
+.reveal img, .reveal video, .reveal iframe {
+  max-width: 95%;
+  max-height: 95%; }
+
+.reveal strong, .reveal b {
+  font-weight: bold; }
+
+.reveal em {
+  font-style: italic; }
+
+.reveal ol, .reveal dl, .reveal ul {
+  display: inline-block;
+  text-align: left;
+  margin: 0 0 0 1em; }
+
+.reveal ol {
+  list-style-type: decimal; }
+
+.reveal ul {
+  list-style-type: disc; }
+
+.reveal ul ul {
+  list-style-type: square; }
+
+.reveal ul ul ul {
+  list-style-type: circle; }
+
+.reveal ul ul, .reveal ul ol, .reveal ol ol, .reveal ol ul {
+  display: block;
+  margin-left: 40px; }
+
+.reveal dt {
+  font-weight: bold; }
+
+.reveal dd {
+  margin-left: 40px; }
+
+.reveal q, .reveal blockquote {
+  quotes: none; }
+
+.reveal blockquote {
+  display: block;
+  position: relative;
+  width: 70%;
+  margin: 20px auto;
+  padding: 5px;
+  font-style: italic;
+  background: rgba(255, 255, 255, 0.05);
+  box-shadow: 0 0 2px rgba(0, 0, 0, 0.2); }
+
+.reveal blockquote p:first-child, .reveal blockquote p:last-child {
+  display: inline-block; }
+
+.reveal q {
+  font-style: italic; }
+
+.reveal pre {
+  display: block;
+  position: relative;
+  width: 90%;
+  margin: 20px auto;
+  text-align: left;
+  font-size: 0.55em;
+  font-family: monospace;
+  line-height: 1.2em;
+  word-wrap: break-word;
+  box-shadow: 0 0 6px rgba(0, 0, 0, 0.3); }
+
+.reveal code {
+  font-family: monospace; }
+
+.reveal pre code {
+  display: block;
+  padding: 5px;
+  overflow: auto;
+  max-height: 400px;
+  word-wrap: normal;
+  background: #3F3F3F;
+  color: #DCDCDC; }
+
+.reveal table {
+  margin: auto;
+  border-collapse: collapse;
+  border-spacing: 0; }
+
+.reveal table th {
+  font-weight: bold; }
+
+.reveal table th, .reveal table td {
+  text-align: left;
+  padding: 0.2em 0.5em 0.2em 0.5em;
+  border-bottom: 1px solid; }
+
+.reveal table th[align="center"], .reveal table td[align="center"] {
+  text-align: center; }
+
+.reveal table th[align="right"], .reveal table td[align="right"] {
+  text-align: right; }
+
+.reveal table tr:last-child td {
+  border-bottom: none; }
+
+.reveal sup {
+  vertical-align: super; }
+
+.reveal sub {
+  vertical-align: sub; }
+
+.reveal small {
+  display: inline-block;
+  font-size: 0.6em;
+  line-height: 1.2em;
+  vertical-align: top; }
+
+.reveal small * {
+  vertical-align: top; }
+
+/*********************************************
+ * LINKS
+ *********************************************/
+.reveal a {
+  color: #42affa;
+  text-decoration: none;
+  -webkit-transition: color 0.15s ease;
+  -moz-transition: color 0.15s ease;
+  transition: color 0.15s ease; }
+
+.reveal a:hover {
+  color: #8dcffc;
+  text-shadow: none;
+  border: none; }
+
+.reveal .roll span:after {
+  color: #fff;
+  background: #068ee9; }
+
+/*********************************************
+ * IMAGES
+ *********************************************/
+.reveal section img {
+  margin: 15px 0;
+  /*background: rgba(255, 255, 255, 0.12);*/
+  /*border: 4px solid #fff;*/
+  /*box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);*/ }
+
+.reveal a img {
+  -webkit-transition: all 0.15s linear;
+  -moz-transition: all 0.15s linear;
+  transition: all 0.15s linear; }
+
+.reveal a:hover img {
+  background: rgba(255, 255, 255, 0.2);
+  border-color: #42affa;
+  box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
+
+/*********************************************
+ * NAVIGATION CONTROLS
+ *********************************************/
+.reveal .controls div.navigate-left, .reveal .controls div.navigate-left.enabled {
+  border-right-color: #42affa; }
+
+.reveal .controls div.navigate-right, .reveal .controls div.navigate-right.enabled {
+  border-left-color: #42affa; }
+
+.reveal .controls div.navigate-up, .reveal .controls div.navigate-up.enabled {
+  border-bottom-color: #42affa; }
+
+.reveal .controls div.navigate-down, .reveal .controls div.navigate-down.enabled {
+  border-top-color: #42affa; }
+
+.reveal .controls div.navigate-left.enabled:hover {
+  border-right-color: #8dcffc; }
+
+.reveal .controls div.navigate-right.enabled:hover {
+  border-left-color: #8dcffc; }
+
+.reveal .controls div.navigate-up.enabled:hover {
+  border-bottom-color: #8dcffc; }
+
+.reveal .controls div.navigate-down.enabled:hover {
+  border-top-color: #8dcffc; }
+
+/*********************************************
+ * PROGRESS BAR
+ *********************************************/
+.reveal .progress {
+  background: rgba(0, 0, 0, 0.2); }
+
+.reveal .progress span {
+  background: #42affa;
+  -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
+  -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
+  transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
+
+/*********************************************
+ * SLIDE NUMBER
+ *********************************************/
+.reveal .slide-number {
+  color: #42affa; }
+
+.reveal .red {
+  color: red;
+}
+
+/*********************************************
+ * C3JS Charts
+ *********************************************/
+
+.c3 {
+  fill: white;  }
+
+.c3 line, .c3 path {
+  stroke: white !important; }
+
+/*********************************************
+ * Custom styling of individual charts
+ *********************************************/
+
+#most-significant-barriers .c3-shape .c3-shape-2 .c3-bar .c3-bar-2 {
+  color: red;
+}
+
+/*********************************************
+ * Footer and Header
+ *********************************************/
+
+.header {
+  position:relative;
+}
+/*.header .left {
+  position:absolute;
+  top: 5px;
+  left: 5px;
+  width: 196px;
+  height: 100px;
+  background-image: url("../../../images/logo-building-iot.png");
+}*/
+.header .right {
+  position:absolute;
+  top: 5px;
+  right: 5px;
+  width: 246px;
+  height: 100px;
+  background-image: url("../../../images/logo-apache.png");
+}
+
+.footer {
+  position:relative;
+}
+/*.footer .left {
+  position:absolute;
+  bottom: 5px;
+  left: 5px;
+  width: 392px;
+  height: 50px;
+  background-image: url("../../../images/logo-company.png");
+}
+.footer .right {
+  position:absolute;
+  bottom: 5px;
+  right: 5px;
+  width: 306px;
+  height: 100px;
+  background-image: url("../../../images/logo-training.png");
+}*/
+