PHOENIX-6249 Create shaded phoenix-spark connector jar
diff --git a/phoenix-spark-base/phoenix4-spark/pom.xml b/phoenix-spark-base/phoenix4-spark/pom.xml
index 53bbfde..903c75f 100644
--- a/phoenix-spark-base/phoenix4-spark/pom.xml
+++ b/phoenix-spark-base/phoenix4-spark/pom.xml
@@ -61,6 +61,10 @@
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-failsafe-plugin</artifactId>
       </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-shade-plugin</artifactId>
+      </plugin>
     </plugins>
   </build>
 
diff --git a/phoenix-spark-base/phoenix5-spark/pom.xml b/phoenix-spark-base/phoenix5-spark/pom.xml
index 3fd1a9e..3a9105f 100644
--- a/phoenix-spark-base/phoenix5-spark/pom.xml
+++ b/phoenix-spark-base/phoenix5-spark/pom.xml
@@ -39,7 +39,6 @@
     <hadoop.version>${hadoop-three.version}</hadoop.version>
     <jdk.version>1.8</jdk.version>
     <fasterxml.jackson.version>2.10.0</fasterxml.jackson.version>
-    <codehaus.jackson.version>1.9.13</codehaus.jackson.version>
     <phoenix.main.version>5</phoenix.main.version>
   </properties>
 
@@ -48,6 +47,21 @@
       <groupId>org.apache.phoenix</groupId>
       <artifactId>phoenix-connectors-phoenix5-compat</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.apache.hadoop</groupId>
+      <artifactId>hadoop-hdfs-client</artifactId>
+      <exclusions>
+        <exclusion>
+          <groupId>com.fasterxml.jackson.core</groupId>
+          <artifactId>jackson-annotations</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>com.fasterxml.jackson.core</groupId>
+          <artifactId>jackson-databind</artifactId>
+        </exclusion>
+      </exclusions>
+      <scope>provided</scope>
+    </dependency>
   </dependencies>
 
   <dependencyManagement>
@@ -90,6 +104,10 @@
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-failsafe-plugin</artifactId>
       </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-shade-plugin</artifactId>
+      </plugin>
     </plugins>
   </build>
 
diff --git a/phoenix-spark-base/pom.xml b/phoenix-spark-base/pom.xml
index fe01511..00fe45c 100644
--- a/phoenix-spark-base/pom.xml
+++ b/phoenix-spark-base/pom.xml
@@ -144,6 +144,7 @@
           <artifactId>netty</artifactId>
         </exclusion>
       </exclusions>
+      <scope>provided</scope>
     </dependency>
 
     <dependency>
@@ -175,6 +176,7 @@
           <artifactId>netty</artifactId>
         </exclusion>
       </exclusions>
+      <scope>provided</scope>
     </dependency>
 
 
@@ -379,6 +381,53 @@
       <scope>test</scope>
     </dependency>
 
+    <!-- Mark every Hadoop jar as provided -->
+    <dependency>
+      <groupId>org.apache.hadoop</groupId>
+      <artifactId>hadoop-annotations</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.hadoop</groupId>
+      <artifactId>hadoop-auth</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.hadoop</groupId>
+      <artifactId>hadoop-yarn-api</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.hadoop</groupId>
+      <artifactId>hadoop-hdfs</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.hadoop</groupId>
+      <artifactId>hadoop-distcp</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.hadoop</groupId>
+      <artifactId>hadoop-client</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.hadoop</groupId>
+      <artifactId>hadoop-mapreduce-client-jobclient</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.hadoop</groupId>
+      <artifactId>hadoop-mapreduce-client-common</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <!-- We want to take the implementation from Spark -->
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-log4j12</artifactId>
+      <scope>provided</scope>
+    </dependency>
   </dependencies>
 
   <build>
@@ -461,6 +510,7 @@
         <plugin>
           <artifactId>maven-dependency-plugin</artifactId>
           <configuration>
+            <ignoreNonCompile>true</ignoreNonCompile>
             <ignoredUnusedDeclaredDependencies>
               <!-- These are all used -->
               <ignoredUnusedDeclaredDependency>
@@ -546,7 +596,6 @@
             <target>1.8</target>
           </configuration>
         </plugin>
-
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-jar-plugin</artifactId>
@@ -564,6 +613,219 @@
             </execution>
           </executions>
         </plugin>
+        <!-- Taken from phoenix-client-parent
+        this should be kept in sync with Phoenix as much as possible -->
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-shade-plugin</artifactId>
+          <configuration>
+            <finalName>phoenix${phoenix.main.version}-${project.version}-spark</finalName>
+            <shadedArtifactAttached>true</shadedArtifactAttached>
+            <filters>
+              <filter>
+                <artifact>*:*</artifact>
+                <excludes>
+                  <exclude>META-INF/*.SF</exclude>
+                  <exclude>META-INF/*.DSA</exclude>
+                  <exclude>META-INF/*.RSA</exclude>
+                  <exclude>META-INF/license/*</exclude>
+                  <exclude>META-INF/NOTICE</exclude>
+                  <exclude>LICENSE.*</exclude>
+                  <exclude>NOTICE.*</exclude>
+                  <exclude>NOTICE</exclude>
+                  <exclude>README*</exclude>
+                </excludes>
+              </filter>
+             <filter>
+                <artifact>org.apache.hadoop:hadoop-yarn-common</artifact>
+                <excludes>
+                  <exclude>org/apache/hadoop/yarn/factories/package-info.class</exclude>
+                  <exclude>org/apache/hadoop/yarn/util/package-info.class</exclude>
+                  <exclude>org/apache/hadoop/yarn/factory/providers/package-info.class</exclude>
+                  <exclude>org/apache/hadoop/yarn/client/api/impl/package-info.class</exclude>
+                  <exclude>org/apache/hadoop/yarn/client/api/package-info.class</exclude>
+                  <exclude>webapps/**</exclude>
+                </excludes>
+              </filter>
+              <!-- Phoenix specific -->
+              <filter>
+                <artifact>org.apache.commons:commons-math3</artifact>
+                <excludes>
+                  <exclude>assets/**</exclude>
+                </excludes>
+              </filter>
+              <filter>
+                <artifact>org.apache.hbase:hbase-server</artifact>
+                <excludes>
+                  <exclude>hbase-webapps/**</exclude>
+                </excludes>
+              </filter>
+              <!-- Phoenix specific -->
+            </filters>
+            <transformers>
+              <transformer
+                  implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
+              <transformer
+                  implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
+                <resource>csv-bulk-load-config.properties</resource>
+                <file>
+                  ${project.basedir}/../config/csv-bulk-load-config.properties
+                </file>
+              </transformer>
+              <transformer
+                  implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
+                <resource>README.md</resource>
+                <file>${project.basedir}/../README.md</file>
+              </transformer>
+              <transformer
+                  implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
+                <resource>LICENSE.txt</resource>
+                <file>${project.basedir}/../LICENSE</file>
+              </transformer>
+              <transformer
+                  implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
+                <resource>NOTICE</resource>
+                <file>${project.basedir}/../NOTICE</file>
+              </transformer>
+            </transformers>
+            <relocations>
+              <relocation>
+                <pattern>org/</pattern>
+                <shadedPattern>${shaded.package}.org.</shadedPattern>
+                <excludes>
+                  <exclude>org/apache/hadoop/**</exclude>
+                  <!-- Our non-shaded htrace and logging libraries -->
+                  <exclude>org/apache/htrace/**</exclude>
+                  <exclude>org/slf4j/**</exclude>
+                  <exclude>org/apache/commons/logging/**</exclude>
+                  <exclude>org/apache/log4j/**</exclude>
+                  <!-- Not the org/ packages that are a part of the jdk -->
+                  <exclude>org/ietf/jgss/**</exclude>
+                  <exclude>org/omg/**</exclude>
+                  <exclude>org/w3c/dom/**</exclude>
+                  <exclude>org/xml/sax/**</exclude>
+                  <!-- Extras compared to Hadoop -->
+                  <!-- Hbase classes - Maybe these could be shaded as well ? -->
+                  <exclude>org/apache/hbase/**</exclude>
+                  <!-- We use the spark classpath directly -->
+                  <exclude>org/apache/spark/**</exclude>
+                  <!-- Phoenix classes -->
+                  <exclude>org/apache/phoenix/**</exclude>
+                  <exclude>org/apache/omid/**</exclude>
+                  <!-- Do want/need to expose Tephra as well ? -->
+                </excludes>
+              </relocation>
+              <relocation>
+                <pattern>com/</pattern>
+                <shadedPattern>${shaded.package}.com.</shadedPattern>
+                <excludes>
+                  <!-- Not the com/ packages that are a part of particular jdk implementations -->
+                  <exclude>com/sun/tools/**</exclude>
+                  <exclude>com/sun/javadoc/**</exclude>
+                  <exclude>com/sun/security/**</exclude>
+                  <exclude>com/sun/jndi/**</exclude>
+                  <exclude>com/sun/management/**</exclude>
+                </excludes>
+              </relocation>
+              <relocation>
+                <pattern>io/</pattern>
+                <shadedPattern>${shaded.package}.io.</shadedPattern>
+                <excludes>
+                  <!-- Exclude config keys for Hadoop that look like package names -->
+                  <exclude>io/compression/**</exclude>
+                  <exclude>io/mapfile/**</exclude>
+                  <exclude>io/map/index/*</exclude>
+                  <exclude>io/seqfile/**</exclude>
+                  <exclude>io/file/buffer/size</exclude>
+                  <exclude>io/skip/checksum/errors</exclude>
+                  <exclude>io/sort/*</exclude>
+                  <exclude>io/serializations</exclude>
+                </excludes>
+              </relocation>
+              <!-- JSRs that haven't made it to inclusion in J2SE -->
+              <relocation>
+                <pattern>javax/el/</pattern>
+                <shadedPattern>${shaded.package}.javax.el.</shadedPattern>
+              </relocation>
+              <relocation>
+                <pattern>javax/cache/</pattern>
+                <shadedPattern>${shaded.package}.javax.cache.</shadedPattern>
+              </relocation>
+              <relocation>
+                <pattern>javax/servlet/</pattern>
+                <shadedPattern>${shaded.package}.javax.servlet.</shadedPattern>
+              </relocation>
+              <relocation>
+                <pattern>javax/ws/</pattern>
+                <shadedPattern>${shaded.package}.javax.ws.</shadedPattern>
+              </relocation>
+              <relocation>
+                <pattern>javax/annotation/</pattern>
+                <shadedPattern>${shaded.package}.javax.annotation.</shadedPattern>
+              </relocation>
+              <relocation>
+                <pattern>javax/inject/</pattern>
+                <shadedPattern>${shaded.package}.javax.inject.</shadedPattern>
+              </relocation>
+              <relocation>
+                <pattern>javax/validation/</pattern>
+                <shadedPattern>${shaded.package}.javax.validation.</shadedPattern>
+            </relocation>
+              <relocation>
+                <pattern>net/</pattern>
+                <shadedPattern>${shaded.package}.net.</shadedPattern>
+                <excludes>
+                  <!-- Exclude config keys for Hadoop that look like package names -->
+                  <exclude>net/topology/**</exclude>
+                </excludes>
+              </relocation>
+              <!-- okio declares a top level package instead of nested -->
+              <relocation>
+                <pattern>okio/</pattern>
+                <shadedPattern>${shaded.package}.okio.</shadedPattern>
+              </relocation>
+              <!-- Phoenix specific relocations -->
+              <relocation>
+                <!-- Tephra -->
+                <pattern>co/</pattern>
+                <shadedPattern>${shaded.package}.co.</shadedPattern>
+              </relocation>
+              <relocation>
+                <pattern>it/</pattern>
+                <shadedPattern>${shaded.package}.it.</shadedPattern>
+              </relocation>
+              <relocation>
+                <pattern>javassist/</pattern>
+                <shadedPattern>${shaded.package}.javassist.</shadedPattern>
+              </relocation>
+              <relocation>
+                <pattern>jersey/</pattern>
+                <shadedPattern>${shaded.package}.jersey.</shadedPattern>
+              </relocation>
+              <relocation>
+                <pattern>jline/</pattern>
+                <shadedPattern>${shaded.package}.jline.</shadedPattern>
+              </relocation>
+              <relocation>
+                <pattern>mozilla/</pattern>
+                <shadedPattern>${shaded.package}.mozilla.</shadedPattern>
+              </relocation>
+              <relocation>
+                <pattern>tables/</pattern>
+                <shadedPattern>${shaded.package}.tables.</shadedPattern>
+              </relocation>
+              <!-- Phoenix specific relocations end -->
+            </relocations>
+          </configuration>
+          <executions>
+            <execution>
+              <phase>package</phase>
+              <goals>
+                <goal>shade</goal>
+              </goals>
+            </execution>
+          </executions>
+        </plugin>
       </plugins>
     </pluginManagement>
   </build>
diff --git a/phoenix4-connectors-assembly/pom.xml b/phoenix4-connectors-assembly/pom.xml
index 4da2d8b..7f8bd88 100644
--- a/phoenix4-connectors-assembly/pom.xml
+++ b/phoenix4-connectors-assembly/pom.xml
@@ -133,7 +133,7 @@
               <arguments>
                 <argument>-fnsv</argument>
                 <argument>
-                  phoenix4-spark-${project.version}.jar
+                  phoenix4-${project.version}-spark.jar
                 </argument>
                 <argument>
                   phoenix4-spark.jar
diff --git a/phoenix4-connectors-assembly/src/build/components/phoenix4-jars.xml b/phoenix4-connectors-assembly/src/build/components/phoenix4-jars.xml
index 2fe4e2f..5c509d5 100644
--- a/phoenix4-connectors-assembly/src/build/components/phoenix4-jars.xml
+++ b/phoenix4-connectors-assembly/src/build/components/phoenix4-jars.xml
@@ -51,7 +51,7 @@
       <directory>${project.basedir}/../phoenix-spark-base/phoenix4-spark/target</directory>
       <outputDirectory>/</outputDirectory>
       <includes>
-        <include>phoenix4-spark-${project.version}.jar</include>
+        <include>phoenix4-${project.version}-spark.jar</include>
         <include>phoenix4-spark.jar</include>
       </includes>
     </fileSet>
diff --git a/phoenix5-connectors-assembly/pom.xml b/phoenix5-connectors-assembly/pom.xml
index a48238e..ec2bdb5 100644
--- a/phoenix5-connectors-assembly/pom.xml
+++ b/phoenix5-connectors-assembly/pom.xml
@@ -140,7 +140,7 @@
               <arguments>
                 <argument>-fnsv</argument>
                 <argument>
-                  phoenix5-spark-${project.version}.jar
+                  phoenix5-${project.version}-spark.jar
                 </argument>
                 <argument>
                   phoenix5-spark.jar
diff --git a/phoenix5-connectors-assembly/src/build/components/phoenix5-jars.xml b/phoenix5-connectors-assembly/src/build/components/phoenix5-jars.xml
index 660974c..ac1630e 100644
--- a/phoenix5-connectors-assembly/src/build/components/phoenix5-jars.xml
+++ b/phoenix5-connectors-assembly/src/build/components/phoenix5-jars.xml
@@ -51,7 +51,7 @@
       <directory>${project.basedir}/../phoenix-spark-base/phoenix5-spark/target</directory>
       <outputDirectory>/</outputDirectory>
       <includes>
-        <include>phoenix5-spark-${project.version}.jar</include>
+        <include>phoenix5-${project.version}-spark.jar</include>
         <include>phoenix5-spark.jar</include>
       </includes>
     </fileSet>
diff --git a/pom.xml b/pom.xml
index bcaf6fc..2b538d4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -62,7 +62,7 @@
     <!-- Hadoop Versions -->
     <hbase-one.version>1.4.0</hbase-one.version>
     <hbase-two.version>2.1.10</hbase-two.version>
-    <hbase-thirdparty-version>2.2.1</hbase-thirdparty-version>
+    <hbase-thirdparty-version>2.1.0</hbase-thirdparty-version>
     <hadoop-two.version>2.7.5</hadoop-two.version>
     <hadoop-three.version>3.0.3</hadoop-three.version>
 
@@ -102,8 +102,6 @@
     <jodatime.version>2.10.5</jodatime.version>
     <commons-cli.version>1.4</commons-cli.version>
     <commons-compress.version>1.9</commons-compress.version>
-    <!-- For pig -->
-    <commons-logging.version>1.2</commons-logging.version>
     <!-- For Kafka -->
     <com-101tek-zkclient.version>0.7</com-101tek-zkclient.version>
     <!-- For hive -->
@@ -117,6 +115,7 @@
     <maven-project-info-reports-plugin.version>3.1.1</maven-project-info-reports-plugin.version>
     <maven-checkstyle-plugin.version>3.1.0</maven-checkstyle-plugin.version>
     <maven-build-helper-plugin.version>3.2.0</maven-build-helper-plugin.version>
+
     <exec-maven-plugin.version>1.6.0</exec-maven-plugin.version>
     <spotbugs-maven-plugin.version>4.1.3</spotbugs-maven-plugin.version>
     <spotbugs.version>4.1.3</spotbugs.version>
@@ -574,7 +573,6 @@
         <groupId>org.apache.hbase.thirdparty</groupId>
         <artifactId>hbase-shaded-miscellaneous</artifactId>
         <version>${hbase-thirdparty-version}</version>
-        <scope>provided</scope>
       </dependency>
       <dependency>
         <groupId>org.apache.hbase.thirdparty</groupId>
@@ -697,6 +695,11 @@
         <artifactId>hadoop-hdfs-client</artifactId>
         <version>${hadoop.version}</version>
       </dependency>
+      <dependency>
+        <groupId>org.apache.hadoop</groupId>
+        <artifactId>hadoop-distcp</artifactId>
+        <version>${hadoop.version}</version>
+      </dependency>
       <!-- End for exclusion only -->
 
       <dependency>
@@ -788,11 +791,6 @@
         <artifactId>protobuf-java</artifactId>
         <version>2.5.0</version>
       </dependency>
-      <dependency>
-        <groupId>commons-logging</groupId>
-        <artifactId>commons-logging</artifactId>
-        <version>${commons-logging.version}</version>
-      </dependency>
 
       <dependency>
         <groupId>org.slf4j</groupId>